feat(eu-umbau): Bedrock als zweiter KI-Modellweg (Phase 1)

Zweiter Modellweg ueber AWS Bedrock (EU-Inferenzprofile Frankfurt), umschaltbar
je Lage (incidents.ai_backend) > Organisation (org_setting ai_backend) > global
(ENV AI_BACKEND, Default cli). Neue Datei agents/bedrock_client.py (Converse
API, nur eu.-Profile, Token-zu-USD-Umrechnung ueber BEDROCK_PRICING, gleiche
Fehlerkategorien wie das CLI). Routing zentral in call_claude; Aufrufe mit
WebSearch/WebFetch laufen bis zur staan-Schleife (Phase 2) weiter uebers CLI.
Migration: Spalte incidents.ai_backend. requirements: boto3.
Hinweis Promote: boto3 muss im Live-venv installiert werden.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Dieser Commit ist enthalten in:
claude-dev
2026-07-30 19:48:52 +00:00
Ursprung 59cd97adac
Commit fc33cccd44
7 geänderte Dateien mit 331 neuen und 3 gelöschten Zeilen

Datei anzeigen

@@ -34,6 +34,38 @@ CLAUDE_MODEL_FAST = "claude-haiku-4-5-20251001" # Für einfache Aufgaben (Feed-
CLAUDE_MODEL_MEDIUM = "claude-sonnet-4-6" # Für qualitätskritische Aufgaben (Netzwerkanalyse)
CLAUDE_MODEL_STANDARD = "claude-opus-4-7" # Standard-Opus für Recherche, Analyse, Faktencheck
# --- KI-Backend (EU/DSGVO-Umbau, Phase 1) -------------------------------------
# 'cli' = heutiger Weg über das Claude CLI (Anthropic, Abo-Konto).
# 'bedrock' = AWS Bedrock über EU-Inferenzprofile (Frankfurt). Verarbeitung
# bleibt in Europa. Phase 1 bedient nur werkzeuglose Aufrufe,
# WebSearch-Aufrufe laufen weiter übers CLI, bis die
# staan-Recherche-Schleife (Phase 2) fertig ist.
# Auflösung je Refresh in agents/orchestrator.py. Lage (incidents.ai_backend)
# gewinnt vor Org-Setting 'ai_backend', das vor diesem globalen Default.
AI_BACKEND = os.environ.get("AI_BACKEND", "cli").strip().lower()
BEDROCK_REGION = os.environ.get("BEDROCK_REGION") or os.environ.get("AWS_REGION", "eu-central-1")
# Obergrenze je Bedrock-Antwort. In Phase 1 laufen nur JSON-Aufgaben über
# Bedrock (Feed-Selektion, Topic-Filter, Geoparsing, Übersetzung, QC),
# dafür reichen 16k gut aus. Große Lagebilder bleiben in Phase 1 beim CLI.
BEDROCK_MAX_TOKENS = int(os.environ.get("BEDROCK_MAX_TOKENS", "16000"))
# Abbildung der CLI-Modellnamen auf EU-Inferenzprofile. NUR eu.-Profile
# eintragen, agents/bedrock_client.py verweigert alles andere.
BEDROCK_MODEL_MAP = {
CLAUDE_MODEL_FAST: "eu.anthropic.claude-haiku-4-5-20251001-v1:0",
CLAUDE_MODEL_MEDIUM: "eu.anthropic.claude-sonnet-4-6",
CLAUDE_MODEL_STANDARD: "eu.anthropic.claude-opus-4-7",
}
# Preise in USD je 1 Mio Token (Stand 29.07.2026, Anthropic-Listenpreise,
# Bedrock rechnet für Anthropic-Modelle zu denselben Sätzen ab). Nach der
# ersten AWS-Rechnung gegen die tatsächlichen Beträge verifizieren.
BEDROCK_PRICING = {
CLAUDE_MODEL_FAST: {"input": 1.00, "output": 5.00},
CLAUDE_MODEL_MEDIUM: {"input": 3.00, "output": 15.00},
CLAUDE_MODEL_STANDARD: {"input": 5.00, "output": 25.00},
}
BEDROCK_CACHE_WRITE_FACTOR = 1.25
BEDROCK_CACHE_READ_FACTOR = 0.10
# --- Verbrauchssaetze (Credits je Aktion) -------------------------------------
# Beschlossen 2026-07-23, der Verbrauchsrechner im Verwaltungsportal nutzt
# dieselben Werte: Live-Lauf 45, Recherche je Durchlauf 40 (das Anlegen faehrt