update
This commit is contained in:
@@ -75,10 +75,13 @@ def _soll_konsens(prompt: str):
|
||||
|
||||
def _soll_beleg(prompt: str):
|
||||
text = _text_nach(prompt, "QUELLTEXT:")
|
||||
for _, saetze in PUNKTE:
|
||||
if saetze[0] in text and saetze[0] in prompt:
|
||||
return {"zitat": saetze[0]}
|
||||
return {"zitat": ""}
|
||||
zeilen = re.findall(r"^(\d+): (.+)$", _text_nach(prompt, "SOLL-PUNKTE:"), re.MULTILINE)
|
||||
out = []
|
||||
for i, punkt in zeilen:
|
||||
for p, saetze in PUNKTE:
|
||||
if p == punkt.strip() and saetze[0] in text:
|
||||
out.append({"soll": int(i), "zitat": saetze[0]})
|
||||
return out
|
||||
|
||||
|
||||
def _extraktion(prompt: str):
|
||||
@@ -116,14 +119,6 @@ def _soll_stich(prompt: str):
|
||||
return {"soll": next(iter(punkte.values()), "fremd")}
|
||||
|
||||
|
||||
def _anker_fix(prompt: str):
|
||||
text = _text_nach(prompt, "QUELLTEXT:")
|
||||
for a in ATOME:
|
||||
if a["titel"] in prompt and a["zitat"] in text:
|
||||
return {"zitat": a["zitat"]}
|
||||
return {"zitat": ""}
|
||||
|
||||
|
||||
def _anker_fix_batch(prompt: str):
|
||||
text = _text_nach(prompt, "QUELLTEXT:")
|
||||
zeilen = re.findall(r"^(\d+): (.+?) —", _text_nach(prompt, "ATOME:"), re.MULTILINE)
|
||||
@@ -176,9 +171,16 @@ def _kapitel_intro(prompt: str):
|
||||
|
||||
|
||||
def _level_kalibrierung(prompt: str):
|
||||
ids = _ids(_text_nach(prompt, "ATOME:"))
|
||||
# deterministisch: erstes Atom wird Grundgerüst, Rest Standardstoff
|
||||
return [{"atom": i, "level": "E" if n == 0 else "M"} for n, i in enumerate(ids)]
|
||||
# deklariertes Level der Fake-Welt zurückgeben (Titel-Match) — der E2E-Pfad
|
||||
# erzeugt so echte E/M/S-Durchgänge; Unbekanntes wird Standardstoff
|
||||
zeilen = re.findall(r"^(\d+): (.+?) —", _text_nach(prompt, "ATOME:"), re.MULTILINE)
|
||||
je_titel = {a["titel"]: a["level"] for a in ATOME}
|
||||
return [{"atom": int(i), "level": je_titel.get(t.strip(), "M")} for i, t in zeilen]
|
||||
|
||||
|
||||
def _titel_fix(prompt: str):
|
||||
zeilen = re.findall(r"^(\d+): ", _text_nach(prompt, "ATOME:"), re.MULTILINE)
|
||||
return [{"atom": int(i), "titel": f"Konzept {i}"} for i in zeilen]
|
||||
|
||||
|
||||
def _kapitel_schnitt(prompt: str):
|
||||
@@ -196,7 +198,7 @@ def _zyklus(prompt: str):
|
||||
|
||||
def _writer(prompt: str):
|
||||
ziel = re.search(r"Lernziel: (.+)", prompt)
|
||||
marker = re.findall(r"MARKER \(exakt so übernehmen\): (<!-- atom: \d+ \| (.+?) \| [EMS] -->)",
|
||||
marker = re.findall(r"MARKER \(exakt so übernehmen\): (<!-- atom: \d+ \| (.+?) -->)",
|
||||
prompt)
|
||||
defs = re.findall(r"Definition: (.+)", prompt)
|
||||
fragen = re.findall(r"^- (.+\?)$", prompt, re.MULTILINE)[:2]
|
||||
@@ -240,8 +242,9 @@ _HANDLER = {
|
||||
"Atom-Extraktion": _extraktion, "Atom-Extraktion-Aufgaben": _extraktion,
|
||||
"Atom-Merge": _merge,
|
||||
"Atom-Soll-Zuordnung": _soll_zuordnung, "Atom-Soll-Stich": _soll_stich,
|
||||
"Atom-Anker-Fix": _anker_fix, "Atom-Anker-Fix-Batch": _anker_fix_batch,
|
||||
"Atom-Luecke": _luecke, "Soll-Abgedeckt": lambda p: {"abgedeckt": True},
|
||||
"Atom-Anker-Fix-Batch": _anker_fix_batch,
|
||||
"Atom-Luecke": _luecke, "Atom-Titel-Fix": _titel_fix,
|
||||
"Soll-Abgedeckt": lambda p: {"abgedeckt": True},
|
||||
"Artefakt-Generate": _artefakt_generate, "Artefakt-Verify": _artefakt_verify,
|
||||
"Artefakt-Fix": _artefakt_fix, "Lernziele": _lernziele, "Kapitel-Intro": _kapitel_intro,
|
||||
"Kapitel-Schnitt": _kapitel_schnitt, "Level-Kalibrierung": _level_kalibrierung,
|
||||
|
||||
Reference in New Issue
Block a user