update
This commit is contained in:
@@ -19,26 +19,36 @@ from textkit import _norm_titel
|
||||
|
||||
log = logging.getLogger("creator.lernen")
|
||||
|
||||
NOETIG = 3 # gute Antworten bis "absolviert" (Tier 1)
|
||||
NOETIG = 3 # gute Antworten bis "absolviert" (Tier 1)
|
||||
MASTERY = 10 # Score bis "verstanden" (Tier 2)
|
||||
MEISTERN = 25 # Score bis "gemeistert" (Tier 3, Maximum)
|
||||
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:
|
||||
def score_berechnen(
|
||||
score_vor_frage: int, gut: bool, tier2: bool, tier3: bool, absolviert: bool, gemeistert: 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).
|
||||
Drei Stufen, freigeschaltet über Guide-Flags:
|
||||
- Tier 1 (tier2=False): +1 bei richtig, KEINE Strafe, Deckel NOETIG (3).
|
||||
- Tier 2 (tier2, nicht tier3): +1 / −1, Boden 3, Deckel MASTERY (10).
|
||||
- Tier 3 (tier3, Meisterpfad): +1 / −2, Boden 10, Deckel MEISTERN (25).
|
||||
Boden vor dem Absolvieren ist 0 (sonst NOETIG — absolviert bleibt erhalten).
|
||||
Ist der Baustein gemeistert, friert der Score bei MEISTERN ein (keine Punkte mehr).
|
||||
Re-Bewertung nutzt denselben Basis-Score und ersetzt das vorige Ergebnis.
|
||||
"""
|
||||
delta = 1 if gut else (-1 if tier2 else 0)
|
||||
floor = NOETIG if absolviert else 0
|
||||
cap = MASTERY if tier2 else NOETIG
|
||||
if gemeistert:
|
||||
return MEISTERN
|
||||
if not tier2:
|
||||
delta, floor, cap = (1 if gut else 0), (NOETIG if absolviert else 0), NOETIG
|
||||
elif not tier3:
|
||||
delta, floor, cap = (1 if gut else -1), NOETIG, MASTERY
|
||||
else:
|
||||
delta, floor, cap = (1 if gut else -2), MASTERY, MEISTERN
|
||||
return max(floor, min(cap, score_vor_frage + delta))
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user