# Pass 0b Kosten-Benchmark (Stand 2026-04-27) Dokumentation aller Versuche die Pass-0b-Generierungskosten zu optimieren. Ergebnis: **v4-Prompt direkt mit Haiku Batch API ist die kosteneffizienteste Strategie.** --- ## Zusammenfassung | Strategie | Kosten/10k | Qualitaet | Empfehlung | |-----------|-----------|-----------|------------| | **v4 direkt (Haiku Batch)** | **~$33** | Alle 18 Felder | **EMPFOHLEN** | | v3 + Haiku Backfill | ~$31.60 | Gleich gut, 2 Schritte | Nicht empfohlen | | v3 + Mac Mini Backfill | ~$25 + 77h Wartezeit | Schwaecher bei applicability | Nicht empfohlen | | v4 direkt (Sonnet) | ~$95 (geschaetzt) | Gleich gut | Zu teuer | --- ## Getestete Strategien ### 1. Haiku Batch API mit v3-Prompt (14 Felder) **Felder:** title, assertion, objective, requirements, test_procedure, evidence, pass_criteria, fail_criteria, severity, category, check_type (5 Typen), merge_key, dependency_hints, lifecycle_phase_order | Batch | Obligations | Controls | Kosten | Kosten/10k | |-------|-----------|----------|--------|-----------| | Batch 1 | 10k | 9.885 | $23.00 | $23.00 | | Batch 3 | 10k | 9.793 | $25.24 | $25.24 | | Batch 4 | 20k | 19.546 | $49.77 | $24.89 | **Durchschnitt: ~$24.40/10k** Token-Verbrauch (Stichprobe): - Avg Input: ~2.800 Tokens/Request - Avg Output: ~4.000 Tokens/Request - 5 Obligations pro Request ### 2. Haiku Batch API mit v4-Prompt (18 Felder) **Zusaetzliche Felder:** applicability, scanner_hint, manual_review_required_if, evidence_type, provides_context | Batch | Obligations | Controls | Kosten | Kosten/10k | |-------|-----------|----------|--------|-----------| | Batch 2 | 10k | 9.855 | $33.00 | $33.00 | | Batch 5 | 20k | 19.469 | $67.50 | $33.75 | | Batch 6 | 20k | 19.529 | $66.42 | $33.21 | | Batch 7 | 20k | 19.569 | $65.96 | $32.98 | **Durchschnitt: ~$33.24/10k** Token-Verbrauch (Stichprobe 20 Requests): - Avg Input: 3.128 Tokens/Request - Avg Output: 6.165 Tokens/Request - 5 Obligations pro Request ### 3. v3 generieren + Haiku Backfill fuer 6 Extra-Felder **Idee:** Nur Basisfelder via Sonnet/Haiku generieren, Extra-Felder nachtraeglich per guenstigem Haiku-Batch ergaenzen. | Schritt | Controls | Kosten | Kosten/10k | |---------|----------|--------|-----------| | v3 Generation (10k) | 9.885 | $24.40 | $24.40 | | Haiku Backfill (28.5k) | 28.570 | $18.91 | $6.62 | | **Gesamt** | — | — | **$31.02** | **Ergebnis:** Nur ~$2 billiger als v4 direkt, aber 2 separate Schritte noetig. **Nicht empfohlen.** ### 4. Mac Mini (qwen3:30b-a3b) fuer Backfill **Idee:** Extra-Felder kostenlos lokal per qwen3 generieren statt Haiku. | Metrik | Wert | |--------|------| | Modell | qwen3:30b-a3b (MoE, 3.3B aktiv) | | Batch Size | 3 (bei 10 → JSON-Parse-Fehler) | | Avg pro Control | 13.9 Sekunden | | Hochrechnung 20k | **77 Stunden (3+ Tage)** | | Erfolgsrate | 100% (bei batch_size=3) | | Kosten | $0 | **Qualitaetsvergleich qwen3 vs. Haiku:** | Feld | Haiku | qwen3 | Bewertung | |------|-------|-------|-----------| | check_type | Korrekt | Korrekt | Gleich | | evidence_type | Korrekt | Korrekt | Gleich | | applicability | Erkennt Bedingungen (z.B. `context.processes_personal_data`) | Meistens `{}` (universell) | **Haiku besser** | | scanner_hint | Deutsch, praezise | Englisch, brauchbar | Haiku besser | | provides_context | Sinnvolle Variablen | Aehnlich, andere Konvention | Gleich | **Ergebnis:** Kostenlos aber 3 Tage Laufzeit und schwaecher bei applicability. **Nicht empfohlen.** --- ## Kostenmodell (Haiku 4.5 Batch API) | Metrik | Preis | |--------|-------| | Input Tokens | $0.40/1M (Batch, 50% off) | | Output Tokens | $2.00/1M (Batch, 50% off) | | Cache Read | $0.04/1M (Batch, 50% off) | | Cache Write | $0.50/1M (Batch, 50% off) | **Hauptkostentreiber: Output-Tokens** (5x teurer als Input). Jedes zusaetzliche Feld im Prompt erhoeht die Output-Laenge. | Prompt-Version | Avg Output/Request | Output-Kosten/Request | |---------------|-------------------|----------------------| | v3 (14 Felder) | ~4.000 Tokens | $0.008 | | v4 (18 Felder) | ~6.165 Tokens | $0.012 | --- ## Warum v4 direkt die beste Strategie ist 1. **Kostendifferenz minimal:** v4 ($33/10k) vs. v3+Backfill ($31/10k) = nur $2 Unterschied 2. **Ein Schritt statt zwei:** Kein separater Backfill-Lauf noetig 3. **Konsistente Daten:** Alle Felder kommen aus dem gleichen LLM-Call, keine Inkonsistenzen 4. **Kein Backfill-Overhead:** Keine zusaetzliche DB-Aktualisierung, kein Monitoring 5. **Qualitaet:** LLM generiert applicability im Kontext der vollen Obligation (besser als nachtraeglich) --- ## Gesamtkosten Pass 0b (180k Obligations) | Posten | Kosten | |--------|--------| | Batch 1 (v3, Test) | $23.00 | | Batch 2 (v4, Test) | $33.00 | | Backfill 1 (9.6k) | ~$1.50 | | Batch 3 (v3) | $25.24 | | Batch 4 (v3, 20k) | $49.77 | | Backfill 2 (28.5k) | $18.91 | | Batch 5 (v4, 20k) | $67.50 | | Batch 6 (v4, 20k) | $66.42 | | Batch 7 (v4, 20k) | $65.96 | | Batch 8+ (v4, ~70k) | ~$231 (geschaetzt) | | **Gesamt** | **~$582** | **Urspruengliche Schaetzung:** $264 (basierend auf Sonnet-Batch mit weniger Feldern) **Tatsaechlich:** ~$582 (Haiku mit 18 Feldern, doppelt so viele Output-Tokens) --- ## Lessons Learned 1. **Output-Tokens dominieren die Kosten** — Nicht Input, nicht Modellwahl 2. **Haiku ist bereits das guenstigste Modell** — Sonnet waere ~3x teurer 3. **Batch API (50% Rabatt) ist Pflicht** — Ohne Batch waere es $1.164 4. **Backfill lohnt sich nicht** — Der Overhead (DB-Updates, Monitoring, Fehlerbehandlung) ueberwiegt die minimale Ersparnis 5. **Mac Mini (qwen3) ist zu langsam** — 77h fuer 20k Controls, und schwaechere Qualitaet bei applicability 6. **v4-Prompt ist der Sweet Spot** — Alle Felder in einem Call, konsistente Qualitaet, akzeptable Kosten --- ## KRITISCH: Duplikat-Batch-Schutz !!! danger "Batch API Duplikat-Fehler (2026-04-27) — $170 Mehrkosten" `curl` meldete einen Timeout/Parse-Error obwohl der Server den Batch bereits an Anthropic gesendet hatte. Durch Retry-Versuche wurden **3 identische Batches** erstellt statt 1. Die Anthropic Batch API ist NICHT idempotent — jeder POST erstellt einen neuen Batch. Auch ein `cancel` stoppt nur unverarbeitete Requests — bereits laufende werden abgerechnet. ### Schutzmassnahmen (implementiert) 1. **Idempotency-Sperre im Submit-Endpoint** — Verweigert Submit wenn letzter Batch <10 Min alt 2. **NIEMALS `curl` fuer Batch-Submits** — Immer `python3 httpx` mit 600s Timeout 3. **Vor jedem Submit** Batch-Liste pruefen: `GET /v1/messages/batches?limit=3` 4. **Anthropic Dashboard** pruefen wenn Kosten unklar ### Korrekte Submit-Methode ```python # RICHTIG — Python httpx mit langem Timeout, kein Retry ssh macmini "/usr/local/bin/docker exec bp-core-control-pipeline python3 -c \" import httpx resp = httpx.post('http://127.0.0.1:8098/v1/canonical/generate/submit-pass0b', json={'limit': 10000, 'batch_size': 5}, timeout=600) print(resp.json()) \"" # FALSCH — curl mit Retry-Risiko # curl -sf -X POST http://127.0.0.1:8098/v1/canonical/generate/submit-pass0b ... # Bei Timeout → NICHT nochmal ausfuehren! ```