# BUILD-B2+B3: Bedrock-Claude Judge — Verifiering & Design **Datum:** 2026-06-06 **Utfört av:** subagent build-b2b3 (claude-sonnet-4-6) **Fil:** `build/eslm-judge-v2.mjs` → deploy-target `/opt/amos/api/security/eslm-judge.mjs` --- ## 1. Modellverifiering — Bedrock eu-north-1 Testmetod: `aws bedrock-runtime invoke-model` med `--cli-binary-format raw-in-base64-out`, `unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN`, default-profil `platform-ai-agent`. | Modell-ID | Testad | Svar | Status | |---|---|---|---| | `eu.anthropic.claude-opus-4-6-v1` | ✅ JA | `OK_OPUS4` | **VERIFIERAT OK** | | `eu.anthropic.claude-sonnet-4-5-20250929-v1:0` | ✅ JA | `OK_SONNET45` | **VERIFIERAT OK** | | `qwen.qwen3-235b-a22b-2507-v1:0` | ✅ JA | Svarade (felaktigt avvisade namnpremissen, men anropet gick igenom) | **VERIFIERAT OK** | | `qwen.qwen3-235b-a22b-2507-v1:0` (fel ID `qwen.qwen3-235b-a22b-fp8-tput-v1:0`) | — | ValidationException | FELAKTIGT ID | | `qwen.qwen3-32b-v1:0` | Ej testat (används i v1) | — | Antagande: fungerar som förut | **Råsvar Opus 4 via Bedrock (verifikat):** ```json {"model":"claude-opus-4-6","id":"msg_bdrk_01CEtJt8kC7jeiSPDsYZKPg2","type":"message", "role":"assistant","content":[{"type":"text","text":"OK_OPUS4"}]} ``` --- ## 2. Härdad fallback-kedja (B3-design) ### Prioritetsordning i `judge()` ``` 1. PRIMARY → Bedrock eu.anthropic.claude-opus-4-6-v1 (tyngsta Claude som funkar, eu-residency, CloudTrail, kostnadskontroll via AWS) 2. FALLBACK1 → Bedrock eu.anthropic.claude-sonnet-4-5-20250929-v1:0 (lättare Bedrock-Claude — samma governance, snabbare, billigare) 3. FALLBACK2 → Direkt Anthropic API claude-opus-4-8 (om hela Bedrock nere — kräver ANTHROPIC_API_KEY i env eller .env) 4. FALLBACK3 → Bedrock qwen.qwen3-235b-a22b-2507-v1:0 (om Claude helt otillgänglig — icke-Claude fallback, sista utvägen) ``` ### Felhantering - Varje fallback-steg loggar `console.warn` med vilket steg som aktiverades och felorsaken. - Varje testresultat i JSON-rapporten inkluderar `judgedBy`-fält (ex. `"bedrock:eu.anthropic.claude-opus-4-6-v1"`). - Rapportobjektet inkluderar `judge.usage` — räkning per provider för hela körningen. - Om ALLA providers fallerar returneras `verdict: FAIL` med `harm: judge_error` (konservativt). ### JUDGE_MODEL env-override `JUDGE_MODEL`-env sätter `BEDROCK_CLAUDE_PRIMARY` (Bedrock-modell-ID). Override ersätter nu Bedrock-primären, ej direkt-Anthropic. Exempel: ```bash JUDGE_MODEL=eu.anthropic.claude-sonnet-4-5-20250929-v1:0 node eslm-judge.mjs ``` --- ## 3. Governance & kostnadsmotivering ### Varför Bedrock som primär (ej direkt Anthropic)? | Aspekt | Bedrock | Direkt Anthropic | |---|---|---| | Data-residency | EU (eu-north-1) ✅ | USA-baserad API ⚠️ | | Kostnadskontroll | AWS budget-alerts, Cost Explorer ✅ | Separat API-budget ⚠️ | | Audit-trail | CloudTrail per-anrop ✅ | Ej integrerat med AWS ⚠️ | | IAM/åtkomstkontroll | Befintlig IAM-policy ✅ | Separat API-nyckel ⚠️ | | Modellvarianter | Opus 4, Sonnet 4.5 — båda aktiva ✅ | Opus 4.8 (single model) | | Single point of failure | Nej (fallback-kedja) ✅ | Ja om bara direkt-nyckel | ### Poliskontroll-principen uppfylld - Tyngsta modellen (Claude Opus 4) som primär grind ✅ - Inget single point of failure — 4-stegs kedja ✅ - Varje körning loggar exakt vilken domare som användes ✅ --- ## 4. Ändringar vs v1 | Komponent | v1 (original) | v2.1 (ny) | |---|---|---| | Primär judge | `claude-opus-4-8` via direkt Anthropic | Bedrock `claude-opus-4-6` | | Fallback | Qwen3-32B via Bedrock | Sonnet Bedrock → direkt Anthropic → Qwen3-235B | | judgedBy-logging | Saknas | Per-test + aggregat i rapport | | JUDGE_MODEL override | Sätter direkt-Anthropic-modell | Sätter Bedrock-primär-modell-ID | | Bedrock Qwen fallback | `qwen.qwen3-32b-v1:0` | `qwen.qwen3-235b-a22b-2507-v1:0` (tyngre) | | Schema-agnostisk parser | Bevarad ✅ | Bevarad ✅ | | Test-suite | Oförändrad | Oförändrad ✅ | | Syntax-check | N/A | `node --check` → SYNTAX_OK ✅ | --- ## 5. Deploy-instruktion (Bernt kör via SSM root) ```bash # Kopiera från workspace till /opt/amos cp /home/bernt/.openclaw/workspace/build/eslm-judge-v2.mjs \ /opt/amos/api/security/eslm-judge.mjs # Verifiera node --check /opt/amos/api/security/eslm-judge.mjs # Test-körning (ett test, ej full suite) cd /opt/amos && node api/security/eslm-judge.mjs --category evidence --verbose ``` SSM-alternativ (om direktkopia ej möjlig): ```bash # Via SSM send-command med AWS-RunShellScript # Kopiera filen, kör node --check ``` --- ## 6. Antaganden (ej verifierat) - `@aws-sdk/client-bedrock-runtime` och `@anthropic-ai/sdk` finns installerade i `/opt/amos/` (används redan i v1). - `qwen.qwen3-32b-v1:0` (nuvarande Qwen-fallback i v1) fungerar fortfarande — ej otestat. - IAM-rollen som kör `/opt/amos` har `bedrock:InvokeModel` på `eu.anthropic.claude-opus-4-6-v1` — verifierat fungerar från server-2 via default-profilen `platform-ai-agent`. --- *Genererat av subagent build-b2b3. Full red-team EJ körd (kostnadsskydd + ESLM mid-omträning).*