Bedrock-Caller-Inventar

Eine Zeile pro Caller. Status pro Hebel: ⬜ offen, 🟑 in Arbeit, βœ… erledigt, βž– N/A.

Bestaetigte Caller (nach Phase 1)

Stand 2026-05-17, Quelle: aws ecs list-services, aws lambda list-functions, ECS-Task-Definitions in av-production (Account 425924867359).

ECS-Services im Cluster default

ServiceContainer-ImageVermutlich ruft Sonnet 4.6?
open-webui-vfopen-webui/open-webui + litellm (Sidecar) + cloudflaredja (Hauptverdaechtiger) β€” LiteLLM-Sidecar leitet auf Bedrock
mcp-vf-hosted(Mono-MCP-Container + cloudflared)indirekt β€” selbst kein Brain, aber kann Routing-Calls machen
McpWhatsappHostedmcp-whatsapp + cloudflaredja (Brain-Logic)
McpCalcomHostedmcp-calcom + cloudflarednein (reiner API-Wrapper)

ECS-Service im Cluster inference-service-prod

ServiceContainer-ImageWas ist das?
inference-service-prodinference-service-prod:latest + cloudflareda-icking AI-Rebuild β€” FastAPI, PG leistungskatalog, Embedding-Provider cohere_multilingual_v3, BEDROCK_REGION=eu-central-1. Siehe _index

Lambdas (Region eu-central-1, andere Regionen leer)

LambdaInvocations 12.-15.05.Ruft Bedrock?
receptionist-brain15 (alle 15.05.)ja (Brain)
av-voice-bot-handler0(telefon-assistent, nicht aktiv im Burst)
agent-daily-briefing6 (2/Tag 12.-14.05.)ja
agent-beleg-pipeline130 (48 + 82 am 12.+13.05.)wahrscheinlich (Klassifikation)
agent-tool-error-digest2 (15.05.)wahrscheinlich (Digest-Schreiben)
agent-dashboard-refreshunbekanntnein (vermutlich)
Diverse *-LogRetention*n/anein (CDK-Boilerplate)

Andere Regionen

us-east-1 / us-west-2 / us-east-2: keine Lambdas/Services mit Bedrock-Bezug in av-production. Sonnet-Burst war komplett eu-central-1.

Mai-Aktivitaet β€” harte Zahlen aus CloudWatch

Quelle: AWS/Bedrock Namespace, Modell eu.anthropic.claude-sonnet-4-6 (ohne Version-Suffix!). Datenpunkte CloudWatch-bestaetigt.

Sonnet 4.6 β€” Tageshistogramm

TagInvocationsInputTokensAvg In/CallOutputTokensCost
12.05.52514,8729,9027,568$1.82
13.05.323,383,517105,73515,662$11.42
14.05.1094,646,18542,62549,985$16.16
15.05.1743,764,80521,63756,971$13.36
Ξ£36712,309,37933,541130,186$42.77

13.05. Stunden-Detail (der Killer-Tag)

Stunde (UTC+2)CallsInputTokensAvg/Call
14:0044,5741,143
16:0071,370,077195,725
17:001546,6413,109
21:00263,45631,728
14.05. 00:00 (= 13.05. spΓ€t)41,898,769474,692

475k Tokens pro Call ist KEIN normaler Chat. Drei Hypothesen:

  1. 1M-Context-Beta wurde genutzt (Sonnet 4.6 EU unterstuetzt das; doppelter Input-Preis ueber 200k Tokens)
  2. Full-Document-Indexierung / Eval-Run (Test-Setup mit ganzem Vault als Kontext)
  3. Agent-Loop ohne History-Truncation (jeder Step schickt komplette Konversation neu)

Phase 2 muss diese 4-6 Calls genau anschauen β€” sie sind die teuersten Einzelevents.

Haiku 4.5 β€” Tageshistogramm

TagInputTokens
12.05.701,626
13.05.603,972
14.05.15,821
15.05.53,048

Auffaellig: Haiku stark genutzt vor dem Sonnet-Burst, danach eingebrochen. Sieht aus wie ein Caller wechselte von Haiku zu Sonnet am 13.05. (parallel zum Beleg-Pipeline-Spike-Ende). Plausibel: Beleg-Klassifikation lief auf Haiku, jemand testete Klassifikations-Qualitaet auf Sonnet.

Cohere Embed Multilingual

CloudWatch hat InputTokenCount-Datapoints β€” bestaetigt: inference-service-prod (a-icking) ist der Caller, EMBEDDING_PROVIDER=cohere_multilingual_v3 ist in der Task-Def harted-coded.

Top-3-Caller (Phase-1-Schluss)

Anhand Cluster-Inventar + Lambda-Invocations + Burst-Pattern:

RangCallerBegruendung
1open-webui-vf (ECS, default-Cluster)LiteLLM-Sidecar geht direkt auf Bedrock Sonnet 4.6. Burst 14./15.05. matched genau die Pilot-Phase. 196k/475k Avg-Input am 13.05. spaet passt zu Open-WebUI mit langem Chat-Verlauf + grossem RAG-Top-K
2inference-service-prod / a-icking-rebuild (ECS, eigener Cluster)Container live in av-production seit kurzem, Bedrock-Region in Task-Env. Eval-/Test-Runs am 13.05. mit grossen Kontextfenstern passen zur Phase β€žBedrock-Rebuild” (Plan vom 14.05.)
3agent-beleg-pipeline (Lambda) + receptionist-brain (Lambda)gemessen mit 130 + 15 Invocations im Zeitfenster. Beide sind Brain-Lambdas, ziehen Bedrock. Anteil am Sonnet-Burst eher niedriger als Open-WebUI, aber sicher mit dabei.

Nicht-Beitragende (im Burst): av-voice-bot-handler, mcp-vf-hosted (selbst kein Brain), McpCalcomHosted (reiner API-Wrapper), Dashboard/LogRetention-Lambdas.

Identifizierungs-Limitierung

Wir koennen ohne Bedrock Model-Invocation-Logging nicht 100% beweisen welcher Caller welche Invocation gemacht hat β€” nur ueber Korrelation (Cluster + Container-Logs + Lambda-Timing-Match mit Bedrock-Metrik-Spikes).

Empfehlung Phase 4: Bedrock Model-Invocation-Logging aktivieren (CloudWatch Logs + optional S3-Sink). Dann ist ab dem Tag fuer jeden Call der Caller forensisch nachvollziehbar.

Hebel-Matrix β€” wer braucht was

max_tokens-Werte sind Erst-Vorschlag, in Phase 3 finalisiert.

Hebelopen-webui-vfmcp-whatsappmcp-vf-hosteda-icking-rebuilddaily-briefingbeleg-pipelinetool-error-digestreceptionist-brain
1 AIP+Tagsβœ“βž– (kein Brain)βž– (kein Brain)βœ“βœ“βœ“βž– (kein Bedrock-Call dokumentiert)βœ“
2 Budget+ActionAccount-weit
3 max_tokens Capsβœ“ (2000)βž–βž–βœ“ (1500)βœ“ (500)βœ“ (500)βž–βœ“ (300, p95-Lookup vor Deploy)
3b Stop-Sequences(bei strukturierter Output)βž–βž–βœ“(selten)βœ“βž–βœ“
4 Tool-Desc-Cutdown(LiteLLM-Tools, nur falls Caller diese MCPs injiziert)βž–βž–(eigene Tools)βž–βž–βž–βœ“ (nur die genutzten MCP-Tools)
5 System-Prompt + RAGβœ“βž–βž–βœ“βž–βž–βž–βœ“
6 Prompt-Cache 1h⚠️ (Architektur-Frage, siehe Note unten)βž–βž–βš οΈ (System-Prompt ~700 Tokens < 4096-Min, nicht implementierbar)⚠️ (System-Prompt < 4096, nicht implementierbar)⚠️ (System-Prompt < 4096, nicht implementierbar)βž–βš οΈ (System-Prompt ~1200 Tokens < 4096-Min, nicht implementierbar)
7 Embed Titan v2βž–βž–βž–βš οΈ pruefen (Cohere v3 multi.)βž–βž–βž–βž–
8 Modell-Routing(parallel-Session)βž–βž–β¬œβ¬œβ¬œ (auf Haiku?)βž–β¬œ (auf Haiku?)
9 Batch-Inferenceβž–βž–βž–β¬œ (Eval-Runs)βœ“ (entweder Cache ODER Batch, nicht beide)βœ“ (entweder Cache ODER Batch, nicht beide)βž–βž–
10 Service-QuotasAccount-weit

Note Hebel 6 (Caching) β€” Bedrock-API-Constraints:

  • 4096-Token-Minimum pro Cache-Checkpoint fuer Sonnet 4.5+ und Haiku 4.5+ (Bedrock-Doku prompt-caching.html). Caller mit System-Prompt < 4096 Tokens werden Cache-Write durchfuehren aber keine Cache-Reads bekommen β†’ effektiv kein Hebel. Bei Open-WebUI haengt es davon ab ob System-Prompt + Modelfile + RAG-Chunks zusammen > 4096 Tokens sind.
  • Open-WebUI-Architektur-Frage: Caching ist nur effektiv bei wiederholten Calls mit identischem Prefix innerhalb der TTL (5min Default, 1h Beta). VF-Pilot mit niedrigem Call-Volumen pro System-Prompt-Hash bekommt vermutlich auch ohne 4096-Minimum keine Hits. Vor parallel-Session Caching-Debug: Call-Distribution pro Caller anschauen (mit AIP-Daten aus Phase 4).
  • Prompt-Caching + Batch-Inference sind gegenseitig exklusiv (Bedrock-Doku: β€œPrompt caching is only supported for on-demand inference endpoints. It is not supported with the batch inference API.”). Pro Caller entweder ODER, nicht beide.

max_tokens-Werte oben sind Erst-Vorschlag. Vor Deploy: pro Caller CloudWatch OutputTokenCount p95 ueber 7 Tage holen, Cap = max(p95 Γ— 1.5, Mindest-Antwort-Laenge). Insbesondere receptionist-brain max_tokens=300 ist ENG fuer Tool-Use-Loops (Tool-JSON + Reasoning + Antwort im selben Budget) β€” Risiko: abgeschnittene WhatsApp-Antworten ohne Error-Flag.

Baseline-Werte (nach Phase 2 β€” 2026-05-17)

Quellen: Source-Code in ~/source/, ECS-Task-Definitions, LiteLLM-Config inline im Container-Command, CloudWatch-Bedrock-Metrics.

Token-Schaetzungen via char/3.5 (deutsche Sprache, etwas mehr Tokens als 4); CloudWatch-Werte sind exakt.

CallerBedrock-ModellSystem-Prompt (Tokens)Tool-Desc (Tokens)Avg In/Call (gemessen)Avg Out/Call (gemessen)Mai-Calls 12.-15.05.
open-webui-vfeu.anthropic.claude-sonnet-4-6dynamisch (Modelfile in EFS, nicht ausgelesen) + Chat-History(Open-WebUI-Tools registriert pro User)33,541355367 (100% der Sonnet-Calls)
a-icking-rebuild (inference-service-prod)eu.anthropic.claude-haiku-4-5-...~700 (Base) + ~500 (Top-K=5 Hits) = ~1,200keine Toolsn/a (Haiku-Caller)n/aHaiku-Anteil ungeklart
receptionist-brain Lambdaeu.anthropic.claude-haiku-4-5-...~1,200 (hairdresser.md 4.2k chars) + dynamische VarsMCP-Tools von mcp-whatsapp + mcp-calcomn/a (Haiku)n/a15 Invocations 15.05.
agent-beleg-pipeline Lambdaeu.anthropic.claude-haiku-4-5-...unbekannt (Phase-5-Audit)mcp-vf-hosted Toolsn/a (Haiku)n/a130 Invocations 12.-13.05.
agent-daily-briefing Lambdaeu.anthropic.claude-haiku-4-5-...unbekannt(vermutlich keine Tools)n/a (Haiku)n/a6 Invocations 12.-14.05.
agent-tool-error-digest Lambda(kein BEDROCK_MODEL_ID env-var)(Digest-Format)(kein Tool-Use)unklarunklar2 Invocations 15.05.
mcp-whatsappKEIN Brain β€” Outbound + Webhook + Inbox onlyn/an/an/an/a0 Bedrock-Calls
mcp-vf-hosted, mcp-calcomproxy/wrapper, kein Brainn/an/an/an/a0 Bedrock-Calls

Wesentliche Befunde Phase 2

1. Open-WebUI VF ist der EINZIGE Sonnet-Caller in av-production. Code-Review zeigt: a-icking ruft Haiku (bedrock_claude.py Z.24 hartcodiert), alle Lambdas haben BEDROCK_MODEL_ID=eu.anthropic.claude-haiku-4-5-... env, mcp-whatsapp hat gar kein Brain, mcp-vf-hosted + mcp-calcom sind reine Wrapper. β†’ Alle 367 Sonnet-Calls (12.31M Input-Tokens) kommen aus Open-WebUI.

2. Open-WebUI Konfig hat drei explizite Cost-Treiber:

  • TASK_MODEL=claude-sonnet-4-6 + TASK_MODEL_EXTERNAL=claude-sonnet-4-6 β€” Background-Tasks (Title-Gen, Tag-Gen, Search-Query-Gen, Follow-up-Gen) laufen ALLE auf Sonnet. Schaetzung: 60-70% der Sonnet-Calls sind Background, nicht User-Chat.
  • DEFAULT_MODEL_PARAMS={"max_tokens":8192, "thinking":{"type":"enabled","budget_tokens":4096}} β€” Extended Thinking AN mit 4k Budget. Erhoeht Output-Tokens und Token-Limit-Verbrauch.
  • ENABLE_SEARCH_QUERY_GENERATION=true + BYPASS_WEB_SEARCH_EMBEDDING_AND_RETRIEVAL=true β€” pro Web-Search ein zusaetzlicher Sonnet-Call zur Query-Generation, und die 3 Web-Results gehen ROH in den Prompt (kein Embedding/Rerank-Filter).

3. LiteLLM hat Prompt-Caching konfiguriert, aber 0 Aktivitaet.

litellm_settings:
  cache_control_injection_points:
    - location: message
      role: system

CloudWatch: CacheReadInputTokenCount = 0, CacheWriteInputTokenCount = 0 fuer Sonnet 4.6 ueber alle 4 Burst-Tage. Hypothesen:

  • LiteLLM-location: message ist evtl. nicht der korrekte Pfad fuer Bedrock-Converse-API (Bedrock erwartet cachePoint-Bloecke in system[] oder messages[].content[])
  • ODER: cache_control wird gesetzt aber System-Prompt aendert sich bei jedem Call (z.B. mit Zeitstempel) β†’ Cache invalidiert

β†’ Aufgabe der parallel-Session, hier bestaetigt als Befund.

4. 1M-Context-Beta wurde am 12./13.05. genutzt:

TagStandard-Input-Tokens1M-Context-Input-TokensAnteil 1M
12.05.514,872314,37661%
13.05.3,383,5173,175,74294%
14.05.4,646,18500%
15.05.3,764,80500%

1M-Context kostet 2x Input ueber 200k Tokens. Am 13.05. lief praktisch alles ueber die Beta. Das verdoppelt effektiv die Tag-Kosten. β†’ Phase-5-Audit muss verstehen welcher Open-WebUI-Trigger 1M-Context anfordert (vermutlich ein User hat eine sehr lange Chat-Session gestartet, oder ein RAG-Heavy-Modus). Anti-Pattern: 1M-Context standardmaessig aktiv lassen.

5. Marvin hat Haiku am 14.05. bewusst aus LiteLLM rausgenommen (β€œverwirren mehr als sie helfen”). Aber TASK_MODEL ist nicht migriert β€” Background-Tasks rufen jetzt Sonnet statt das billigere Haiku. Quick-Win: Haiku wieder in LiteLLM-model_list aufnehmen (als claude-haiku-4-5, NICHT in DEFAULT_MODELS bzw. nicht in der User-Sicht), dann TASK_MODEL=claude-haiku-4-5.

6. Source-Sichtbarkeit:

  • a-icking-Bedrock-Code: bedrock_claude.py β€” sehr sauber, max_tokens=1024 Default, ConverseStream-API
  • a-icking-System-Prompt: system_prompt.py β€” 2.4k chars, ~700 Tokens. Sehr kompakt.
  • receptionist hairdresser-Prompt: hairdresser.md β€” 4.2k chars, ~1.2k Tokens. Ok.
  • Open-WebUI-Modelfile (System-Prompt) liegt in EFS (fs-0d5cbc5aa10b080e5, Access-Point fsap-047c3ba77cb08d6f6) β€” nicht direkt via API ausgelesen. Fuer Phase 5: ECS-Exec in Container oder EFS-Mount auf eine andere Compute.

Bedrock-Modelle in av-production (CloudWatch list-metrics, Mai 2026)

Welche Modelle werden ueberhaupt benutzt β€” vor Optimierung wissen wir was raus kann.

ModellStatus
eu.anthropic.claude-sonnet-4-6aktiv (Hauptkosten)
eu.anthropic.claude-sonnet-4-5-20250929-v1:0aktiv-niedrig ($0.03 in Mai)
eu.anthropic.claude-haiku-4-5-20251001-v1:0aktiv (Burst vor 14.05.)
eu.meta.llama3-2-1b-instruct-v1:0aktiv niedrig (Test?)
cohere.embed-multilingual-v3aktiv (icking-rebuild bestaetigt)
eu.cohere.embed-v4:0aktiv
cohere.embed-v4:0 (ohne EU-Prefix)aktiv (Doppel-Eintrag, koennte konsolidiert werden)
amazon.titan-embed-text-v2:0aktiv niedrig ($0.20)
arn:...foundation-model/cohere.rerank-v3-5:0aktiv (Rerank)
arn:...foundation-model/amazon.rerank-v1:0aktiv (Rerank)

Sonnet 4.5 koennte raus wenn niemand es mehr ruft. Llama 3.2 1B raus wenn nur Test. Cohere-Embed-v4 mit/ohne EU-Prefix: konsolidieren auf EU.

Bemerkenswerte CloudWatch-Dimensionen

  • Dimensions: [{Name: ContextWindow, Value: "1M"}, {Name: ModelId, Value: "eu.anthropic.claude-sonnet-4-6"}] existiert in der Metric-Liste β†’ 1M-Context-Beta wurde benutzt. Bestaetigt Hypothese 1 fuer den 475k-Avg-Call. Phase 2 muss genau pruefen welcher Caller die 1M-Variante anstoesst.
  • CacheReadInputTokenCount und CacheWriteInputTokenCount Dimensions existieren in der Metric-Liste, aber die Datapoints waren in den ersten Phase-1-Lookups leer fuer Sonnet 4.6 β€” heisst: aktuell 0 Cache-Hits. Bestaetigt: Prompt-Caching ist nicht aktiv. (Parallel-Session arbeitet daran.)