update
This commit is contained in:
@@ -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); }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user