60 lines
2.2 KiB
Python
60 lines
2.2 KiB
Python
"""Fidelity 0 des Trainers: Fake-E2E-Lauf im Subprozess — Sekunden, null Tokens.
|
|
|
|
Misst mit den CREATOR_PARAMS des Kandidaten: (a) halten die Invarianten? (b) wie viele
|
|
Agenten-Calls erzeugt die Struktur (Proxy für Tokens/Laufzeit)? Unsinnige Kandidaten
|
|
fallen hier raus, bevor ein echter Lauf Geld kostet.
|
|
|
|
CLI: python3 train_f0.py <ausgabe.json> (CREATOR_PARAMS im ENV)
|
|
"""
|
|
|
|
import asyncio
|
|
import json
|
|
import sys
|
|
import tempfile
|
|
import time
|
|
from pathlib import Path
|
|
|
|
# WICHTIG: config (mit CREATOR_PARAMS) lädt vor allen Pipeline-Modulen
|
|
import database
|
|
from fake_agents import Welt, aktivieren
|
|
from fsutil import atomic_write_json
|
|
|
|
|
|
async def f0(out: str) -> None:
|
|
tmp = Path(tempfile.mkdtemp(prefix="train-f0-"))
|
|
database.DB_PATH = tmp / "f0.db"
|
|
database._db = None
|
|
await database.init_db()
|
|
welt = Welt()
|
|
aktivieren(welt)
|
|
import board_inventory as bi
|
|
import qa
|
|
qa.QA_DIR = tmp / "qa"
|
|
from pipeline import GenContext
|
|
|
|
work = tmp / "arbeit"
|
|
work.mkdir()
|
|
files = {"arbeit": work, "final": tmp / "blocks.md",
|
|
"sub_roh": tmp / "sub_roh.json", "sidecar": tmp / "subblocks.json",
|
|
"facts": tmp / "facts.json", "question_pattern": tmp / "question_pattern.json",
|
|
"artefakte": tmp / "artefakte.json", "outline": tmp / "outline.json",
|
|
"outline_slots": [tmp / f"outline-{i}.json" for i in (1, 2, 3)],
|
|
"research": [work / f"research-{i}.md" for i in (1, 2, 3, 4, 5)]}
|
|
ctx = GenContext(topic="f0", provider="claude", is_cancelled=lambda: False)
|
|
start = time.monotonic()
|
|
ok = await asyncio.wait_for(
|
|
bi.run_boards(ctx, lambda *a, **k: None, files, {"type": "thema"}, None, "",
|
|
research=True, qa_force=True), timeout=180)
|
|
from tests.invarianten import pruefe_invarianten
|
|
fehler = await pruefe_invarianten("f0", files)
|
|
atomic_write_json(Path(out), {
|
|
"ok": bool(ok), "invarianten_fehler": fehler, "calls": len(welt.calls),
|
|
"dauer_s": round(time.monotonic() - start, 1)}, indent=1)
|
|
await database.close_db()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
if len(sys.argv) != 2:
|
|
raise SystemExit("Nutzung: python3 train_f0.py <ausgabe.json>")
|
|
asyncio.run(f0(sys.argv[1]))
|