update
This commit is contained in:
@@ -415,33 +415,19 @@ async def baustein_pruefung_route(req: BausteinPruefungRequest):
|
||||
return {"feedback": data["feedback"], "punkte": punkte, "bewertung": _farbe(punkte),
|
||||
"gute_antworten": gute, "cap": cap}
|
||||
|
||||
# aktion "antwort_pruefen" (Agent 2 genau): verbindlich, persistiert. Serialisiert je Baustein,
|
||||
# Basis driftfrei über den offene_frage-Anker. NUR hier ändert sich der Score.
|
||||
async with _pruef_lock(req.topic, req.baustein):
|
||||
stand = await get_baustein_progress(req.topic, req.baustein)
|
||||
war_stufe = stand["absolviert"] is not None # Element-Guard
|
||||
basis, re_bewertung = _basis(stand, req.frage)
|
||||
if not re_bewertung:
|
||||
await set_offene_frage(req.topic, req.baustein, req.frage, basis, 0)
|
||||
|
||||
data = await pruefung_bewertung(
|
||||
req.topic, req.baustein, req.section, kompakt, req.frage, msgs, provider=req.provider,
|
||||
role="guide" if req.gruendlich else "judge", begruendung=req.begruendung,
|
||||
)
|
||||
if data is None:
|
||||
raise HTTPException(502, "Bewertung fehlgeschlagen — bitte erneut versuchen")
|
||||
|
||||
floor = floor_aus_score(basis, cap)
|
||||
roh = _erklaeren_delta(data["niveau"], req.nachgefragt)
|
||||
d = progressiver_malus(basis, cap) if roh < 0 else roh
|
||||
score = score_berechnen(basis, d, floor, cap)
|
||||
punkte = score - basis
|
||||
gute = await set_baustein_score(req.topic, req.baustein, score)
|
||||
if not war_stufe and stufe_aus_score(score, cap) is not None:
|
||||
if await set_baustein_absolviert(req.topic, req.baustein):
|
||||
asyncio.create_task(baustein_element_anlegen(req.topic, req.baustein, req.section, req.provider))
|
||||
return {"feedback": data["feedback"], "punkte": punkte, "bewertung": _farbe(punkte),
|
||||
"gute_antworten": gute, "cap": cap}
|
||||
# aktion "antwort_pruefen" (Agent 2 genau): verbindlich, persistiert. NUR hier ändert sich der Score.
|
||||
# LLM läuft OHNE Lock; gebucht wird kurz über _buche (Anker + Score), wie bei Quiz/Lück.
|
||||
# So blockiert die lange KI-Bewertung keine folgende (deterministische) Antwort desselben Bausteins.
|
||||
data = await pruefung_bewertung(
|
||||
req.topic, req.baustein, req.section, kompakt, req.frage, msgs, provider=req.provider,
|
||||
role="guide" if req.gruendlich else "judge", begruendung=req.begruendung,
|
||||
)
|
||||
if data is None:
|
||||
raise HTTPException(502, "Bewertung fehlgeschlagen — bitte erneut versuchen")
|
||||
roh = _erklaeren_delta(data["niveau"], req.nachgefragt)
|
||||
res = await _buche(req, req.frage, roh, cap) # kurzer Lock: Basis driftfrei über offene_frage-Anker
|
||||
res["feedback"] = data["feedback"]
|
||||
return res
|
||||
|
||||
|
||||
# --- Guides ---
|
||||
|
||||
Reference in New Issue
Block a user