This commit is contained in:
team3
2026-06-15 17:02:53 +02:00
parent 19b520a3b1
commit 466818c47c
4 changed files with 70 additions and 6 deletions

View File

@@ -193,10 +193,15 @@ function nachfragen() {
)
}
let letzteFeedbackMsg = null // Referenz auf die zuletzt gezeigte (provisorische) Bewertungs-Bubble
let pruefenRun = 0 // nur die jüngste Hintergrund-Prüfung darf die Anzeige korrigieren
function bewerten(res) {
letztesFeedback.value = res.feedback || ''
pruefMessages.value.push({ role: 'assistant', kind: 'feedback', content: res.feedback || '', bewertung: res.bewertung })
pruefMessages.value.push({ role: 'assistant', kind: 'feedback', content: res.feedback || '', bewertung: res.bewertung, geprueft: false })
letzteFeedbackMsg = pruefMessages.value[pruefMessages.value.length - 1]
pruefPhase.value = 'bewertet'
verdictPruefen() // im Hintergrund verbindlich prüfen lassen
}
function antwortPayload() {
@@ -206,6 +211,29 @@ function antwortPayload() {
}
}
// Hintergrund: voller Bewerter+Kritiker. Persistiert serverseitig; korrigiert die Anzeige bei Abweichung.
async function verdictPruefen() {
const meine = ++pruefenRun
const ziel = letzteFeedbackMsg
try {
const res = await pruefeBaustein({
topic: props.topic, baustein: props.baustein, section: props.section,
provider: props.provider, messages: pruefDialog(), ...antwortPayload(), aktion: 'antwort_pruefen',
})
if (meine !== pruefenRun) return // eine neuere Bewertung läuft → diese verwerfen
applyPruefung(res)
if (ziel) {
if (res.bewertung !== ziel.bewertung || (res.feedback && res.feedback !== ziel.content)) {
ziel.content = res.feedback || ziel.content
ziel.bewertung = res.bewertung
}
ziel.geprueft = true
}
} catch {
if (meine === pruefenRun && ziel) ziel.geprueft = true
}
}
function antwortAbgeben() {
const text = pruefInput.value.trim()
if (!text || pruefLoading.value) return
@@ -297,7 +325,7 @@ function neuBewerten() {
<div v-if="pruefMessages.length" ref="pruefMessagesEl" class="bp-messages" @scroll="onPruefScroll">
<template v-for="(m, i) in pruefMessages" :key="i">
<div v-if="m.kind === 'feedback'" class="bp-feedback" :class="m.bewertung">{{ m.content }}</div>
<div v-if="m.kind === 'feedback'" class="bp-feedback" :class="m.bewertung">{{ m.content }}<span v-if="!m.geprueft" class="bp-pruefend"> · wird geprüft</span></div>
<div v-else-if="m.kind === 'fehler'" class="bp-error">{{ m.content }}</div>
<div v-else-if="m.role === 'assistant'" class="bp-msg assistant markdown" v-html="renderMarkdown(m.content)"></div>
<div v-else class="bp-msg user">{{ m.content }}</div>
@@ -418,6 +446,7 @@ function neuBewerten() {
line-height: 1.4;
border: 1px solid var(--border);
}
.bp-pruefend { font-style: italic; opacity: 0.7; font-size: 0.92em; }
.bp-feedback.gut { background: var(--success-soft); border-color: var(--success-border); color: var(--success); }
.bp-feedback.schlecht { background: var(--danger-soft, #fee2e2); border-color: var(--danger-border, #f87171); color: var(--danger); }