update
This commit is contained in:
@@ -36,9 +36,10 @@ class Ergebnis:
|
||||
|
||||
|
||||
def module_laden() -> None:
|
||||
"""Worker-Module importieren → Registrierung; danach Graph validieren."""
|
||||
for mod in ("suche", "laden", "korpus", "inventar", "dedup",
|
||||
"struktur", "guide", "redundanz", "montage"):
|
||||
"""Worker-Module aus dem Graph ableiten (eine Wahrheit: pipeline.yaml),
|
||||
importieren → Registrierung; danach voll validieren."""
|
||||
g = graph.laden(None)
|
||||
for mod in sorted({k.worker.split(".")[0] for k in g.knoten.values()}):
|
||||
importlib.import_module(f"backend.{mod}")
|
||||
graph.laden(set(WORKER))
|
||||
|
||||
@@ -218,7 +219,7 @@ def _gate_pruefen(g: graph.Graph, topic: str, run_id: int, stufe_i: int) -> None
|
||||
return
|
||||
runde = (db.one("SELECT COUNT(*) c FROM gate_laeufe WHERE topic=? AND knoten=?",
|
||||
topic, gate.id) or {"c": 0})["c"] + 1
|
||||
if runde > config.GATE_RUNDEN_MAX.get(gate.id, 3):
|
||||
if runde > gate.runden_max:
|
||||
_pausieren(run_id, f"gate_cap:{gate.id}:{runde}")
|
||||
return
|
||||
db.insert("tasks", ignore=True, run_id=run_id, topic=topic, knoten=gate.id,
|
||||
@@ -340,21 +341,27 @@ def _pausieren(run_id: int, grund: str, status: str = "paused") -> None:
|
||||
|
||||
|
||||
def _abschliessen(g: graph.Graph, topic: str, run_id: int) -> None:
|
||||
"""Kein Task mehr offen: done, wenn alle Gates grün + Montage fertig."""
|
||||
fertig = db.one("SELECT id FROM tasks WHERE topic=? AND knoten='montage' "
|
||||
"AND status='fertig'", topic)
|
||||
"""Kein Task mehr offen: done, wenn die letzte Stufe fertig ist."""
|
||||
terminal = [k.id for k in g.knoten.values() if k.stufe == g.stufen[-1]]
|
||||
qs = ",".join("?" * len(terminal))
|
||||
fertig = db.one(f"SELECT id FROM tasks WHERE topic=? AND knoten IN ({qs}) "
|
||||
"AND status='fertig'", topic, *terminal)
|
||||
offen_fehler = db.one("SELECT id FROM tasks WHERE topic=? AND status='fehler' "
|
||||
"LIMIT 1", topic)
|
||||
if fertig and not offen_fehler:
|
||||
db.update("runs", "id=?", (run_id,), status="done", beendet=db.now())
|
||||
else:
|
||||
grund = "tasks_mit_fehler" if offen_fehler else "leerlauf_ohne_montage"
|
||||
grund = "tasks_mit_fehler" if offen_fehler else "leerlauf_ohne_abschluss"
|
||||
_pausieren(run_id, grund)
|
||||
|
||||
|
||||
def _start_tasks(topic: str, run_id: int) -> None:
|
||||
"""Initiale Tasks der Stufe 1 (idempotent — Resume ist ein No-Op)."""
|
||||
for lens in config.RECHERCHE_LENSES:
|
||||
db.insert("tasks", ignore=True, run_id=run_id, topic=topic,
|
||||
knoten="recherche_plan", item=f"r1:lens:{lens}", runde=1,
|
||||
payload=db.j({"lens": lens}), erzeugt_von="start")
|
||||
"""Initiale Tasks: Knoten der Stufe 1 ohne Normal-Vorgänger (aus dem
|
||||
Graph abgeleitet, keine Knoten-Namen im Code). Idempotent."""
|
||||
g = graph.get()
|
||||
ziele = {k["nach"] for k in g.kanten if k["art"] == "normal"}
|
||||
for kn in g.knoten.values():
|
||||
if kn.stufe == g.stufen[0] and kn.id not in ziele:
|
||||
db.insert("tasks", ignore=True, run_id=run_id, topic=topic,
|
||||
knoten=kn.id, item="r1:start", runde=1,
|
||||
payload="{}", erzeugt_von="start")
|
||||
|
||||
Reference in New Issue
Block a user