129 lines
5.1 KiB
Markdown
129 lines
5.1 KiB
Markdown
|
|
# 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).*
|