This commit is contained in:
team3
2026-06-24 22:33:12 +02:00
parent ccbe7765d4
commit e0a5f4956f

View File

@@ -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)
# 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")
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}
res = await _buche(req, req.frage, roh, cap) # kurzer Lock: Basis driftfrei über offene_frage-Anker
res["feedback"] = data["feedback"]
return res
# --- Guides ---