from pathlib import Path PROJECT_ROOT = Path(__file__).resolve().parent.parent TEMPLATES_DIR = PROJECT_ROOT / "templates" STORAGE_DIR = PROJECT_ROOT / "storage" FRONTEND_DIST = PROJECT_ROOT / "frontend" / "dist" DB_PATH = STORAGE_DIR / "creator.db" PROJECTS_DIR = PROJECT_ROOT / "projects" MAX_CONCURRENT_GENERATIONS = 10 # Timeouts pro Agenten-Schritt: (Basis-Sekunden, Sekunden pro Baustein/Section). # Gilt für alle Provider gleich — wer zu langsam ist, wird neu gestartet bzw. überholt. TIMEOUTS = { "recherche": (1800, 0), # fix 30 min "auswahl": (600, 10), "auswahl_check": (300, 2), "sortierung": (300, 5), "plan": (300, 5), "writer": (600, 120), # pro Section im Chunk "onepager_recherche": (900, 0), "onepager_bauen": (300, 0), "onepager_verify": (300, 0), } # Welcher Anteil der sortierten Baustein-Liste in welches Format fließt: (Anteil, Mindestanzahl). FORMAT_ANTEIL = { "MiniGuide": (0.10, 8), "Guide": (0.50, 20), "FullGuide": (1.00, 0), } # Provider-Stacks: komplett unabhängig, einer kann jederzeit entfernt werden. # Rollen: "quick" = Massenarbeit (Recherche, Einordnung), # "fast" = Urteilsaufgaben mit kleinem Output (Auswahl, Final, OnePager, Chat), # "guide" = große Generierung (Plan, Writer). DEFAULT_PROVIDER = "claude" PROVIDERS = { "claude": { "cli": "claude", "guide": "claude-opus-4-8[1m]", "fast": "claude-sonnet-4-6", "quick": "claude-sonnet-4-6", "env_key": None, # Auth via CLAUDE_CODE_OAUTH_TOKEN oder ~/.claude }, "minimax": { "cli": "opencode", "guide": "minimax/MiniMax-M3", "fast": "minimax/MiniMax-M3", "quick": "minimax/MiniMax-M3", "env_key": "MINIMAX_API_KEY", }, "lokal": { "cli": "opencode", "guide": "ollama/qwen3.6:27b", "fast": "ollama/qwen3.5:9b", "quick": "ollama/qwen3.5:9b", "env_key": None, "check_url": "http://localhost:11434/api/tags", # Ollama erreichbar? }, }