update
This commit is contained in:
@@ -1613,11 +1613,60 @@ async def _mirror_sidecar_db(topic: str, sidecar: dict) -> None:
|
||||
|
||||
|
||||
|
||||
async def _guide_ebene(topic: str, instructions: str, provider: str, is_cancelled, set_p) -> None:
|
||||
"""Guide-Ebene der Auto-Sequenz: generieren → QA → „Befunde beheben"-Loop bis
|
||||
100 %/Stillstand/10×. Fail-open: Fehler überspringen den Guide, blockieren nichts."""
|
||||
import uuid
|
||||
from datetime import datetime, timezone
|
||||
try:
|
||||
import guide, guide_qa, guide_board
|
||||
from auto_loop import auto_repair_loop
|
||||
fmt = "Guide"
|
||||
now = datetime.now(timezone.utc).isoformat()
|
||||
guide_id = str(uuid.uuid4())
|
||||
await db.create_guide({"id": guide_id, "topic": topic, "format": fmt,
|
||||
"instructions": instructions, "status": "queued",
|
||||
"progress": None, "created_at": now, "updated_at": now})
|
||||
set_p("Guide wird generiert…")
|
||||
await guide.generate_guide(guide_id, topic, fmt, instructions, provider)
|
||||
if is_cancelled():
|
||||
return
|
||||
|
||||
async def _messen():
|
||||
rep = await guide_qa.guide_qa_report(topic, llm=True)
|
||||
return float(rep["note_guide"]) if rep else 10.0
|
||||
|
||||
erst = await _messen()
|
||||
|
||||
async def _reparieren():
|
||||
set_p("Befunde beheben (Guide)…")
|
||||
await guide_board.repair_karten(topic, fmt) # befundtragende Karten → pruefer
|
||||
await guide.generate_guide(topic=topic, format_name=fmt, guide_id=guide_id,
|
||||
instructions=instructions, provider=provider) # resumt offene Karten
|
||||
return await _messen()
|
||||
|
||||
res = await auto_repair_loop("Guide", erst, _reparieren)
|
||||
if res["grund"] != "fertig":
|
||||
msg = (f"Guide bleibt bei {round(res['note'] * 10)} % ({res['grund']}, "
|
||||
f"{res['runden']} Runden) — «Befunde beheben» hat keinen Pfad (Systemfehler)")
|
||||
_blocks_errors[topic] = msg
|
||||
set_p(msg)
|
||||
else:
|
||||
set_p(f"Guide: 100 % nach {res['runden']} Runde(n)")
|
||||
except Exception as e:
|
||||
log.exception("[%s] Guide-Ebene fehlgeschlagen", topic)
|
||||
_blocks_errors[topic] = f"Guide-Ebene: {str(e)[:500]}"
|
||||
|
||||
|
||||
async def generate_blocks(topic: str, instructions: str = "", provider: str = DEFAULT_PROVIDER,
|
||||
research: bool = True, qa_force: bool = False) -> None:
|
||||
research: bool = True, qa_force: bool = False,
|
||||
auto_inventory: bool = True, auto_artefacts: bool = True,
|
||||
auto_guide: bool = True) -> None:
|
||||
"""Kanban entry point: source prep, then both boards (inventory + artefacts) until
|
||||
quiescence. research=False = Continue (drain the existing queue, no new search).
|
||||
A run on a finished topic ADDS research (live extension) — full rebuild = DELETE /blocks."""
|
||||
A run on a finished topic ADDS research (live extension) — full rebuild = DELETE /blocks.
|
||||
auto_* per level: after each level's QA, loop „Befunde beheben" until 100 % / stall / 10×;
|
||||
if off, stop after that level's QA (control point)."""
|
||||
if topic in _blocks_progress:
|
||||
return
|
||||
_blocks_progress[topic] = "Warten…"
|
||||
@@ -1646,10 +1695,16 @@ async def generate_blocks(topic: str, instructions: str = "", provider: str = DE
|
||||
_blocks_errors[topic] = "Cancelled — progress is preserved"
|
||||
return
|
||||
import board_inventory # lazy: the boards import blocks
|
||||
status: dict = {}
|
||||
ok = await board_inventory.run_boards(ctx, set_p, files, q, folder, instructions,
|
||||
research=research, qa_force=qa_force)
|
||||
research=research, qa_force=qa_force,
|
||||
auto_inventory=auto_inventory, auto_artefacts=auto_artefacts,
|
||||
status_out=status)
|
||||
if not ok and is_cancelled():
|
||||
_blocks_errors[topic] = "Cancelled — progress is preserved"
|
||||
elif ok and auto_guide and status.get("weiter") and not is_cancelled():
|
||||
# Auto-Sequenz: Inventar + Artefakte liefen sauber durch → Guide-Ebene.
|
||||
await _guide_ebene(topic, instructions, provider, is_cancelled, set_p)
|
||||
except Exception as e:
|
||||
log.exception("[%s] Blocks generation failed", topic)
|
||||
_blocks_errors[topic] = str(e)[:2000]
|
||||
|
||||
Reference in New Issue
Block a user