update
This commit is contained in:
@@ -19,13 +19,29 @@ from textkit import _norm_titel
|
||||
|
||||
log = logging.getLogger("creator.lernen")
|
||||
|
||||
NOETIG = 3 # gute Antworten bis "absolviert"
|
||||
NOETIG = 3 # gute Antworten bis "absolviert" (Tier 1)
|
||||
MASTERY = 10 # Score bis "verstanden" (Tier 2)
|
||||
VERTIEFUNG_TIMEOUT = 600
|
||||
CHAT_TIMEOUT = 240
|
||||
PRUEFUNG_TIMEOUT = 120 # kurze JSON-Turns; deckelt die Serien-Latenz pro Prüfungs-Schritt
|
||||
KRITIK_MAX_RUNDEN = 2 # Generator → Kritiker → ggf. Neu, höchstens so oft
|
||||
|
||||
|
||||
def score_berechnen(score_vor_frage: int, gut: bool, tier2: bool, absolviert: bool) -> int:
|
||||
"""Neuer Score nach einer Antwort · driftfrei (immer aus dem Basis-Score gerechnet).
|
||||
|
||||
Tier 1 (tier2=False): +1 bei richtig, KEINE Strafe bei falsch, Deckel NOETIG (3).
|
||||
Tier 2 (tier2=True): +1 bei richtig (Deckel MASTERY=10), −1 bei falsch.
|
||||
Boden ist NOETIG, sobald der Baustein absolviert ist — sonst 0 (kann nicht
|
||||
unter 3 fallen, absolviert bleibt erhalten). Re-Bewertung nutzt denselben
|
||||
Basis-Score und ersetzt so das vorige Ergebnis (kein Doppelzählen).
|
||||
"""
|
||||
delta = 1 if gut else (-1 if tier2 else 0)
|
||||
floor = NOETIG if absolviert else 0
|
||||
cap = MASTERY if tier2 else NOETIG
|
||||
return max(floor, min(cap, score_vor_frage + delta))
|
||||
|
||||
|
||||
def _transcript(messages: list[dict]) -> str:
|
||||
return "\n".join(
|
||||
f"{'Nutzer' if m.get('role') == 'user' else 'Assistent'}: {m.get('content', '')}"
|
||||
|
||||
Reference in New Issue
Block a user