docs(masterplan): Fase A komplett — A5 ferdig, modeller oppdatert til gemini-2.5-flash/pro, LOCATION=global, smoke 10/10

This commit is contained in:
chrischristiansen-glitch 2026-05-26 01:52:39 +02:00
parent 7585a485e0
commit f83337e070

View File

@ -1,7 +1,7 @@
# VAUCO MASTERPLAN — Chris Christiansen # VAUCO MASTERPLAN — Chris Christiansen
**Sist oppdatert: 2026-05-26 CEST** **Sist oppdatert: 2026-05-26 CEST**
**Status: Cloud Run live (light/heavy) | A5 Memory Bank gjenstår | ML-1 implementert | B-fasen neste** **Status: ✅ FASE A KOMPLETT | ML-1 live | Røyktest 10/10 | B-fasen neste**
--- ---
@ -51,38 +51,40 @@ cd ~/OSVauco
cp .env.example .env cp .env.example .env
nano .env nano .env
# Fyll ut: BILLING_ACCOUNT_ID, ALERT_EMAIL, GITHUB_APP_INSTALLATION_ID # Fyll ut: BILLING_ACCOUNT_ID, ALERT_EMAIL, GITHUB_APP_INSTALLATION_ID
# Alle andre verdier er ferdig-forhåndsutfylt
# Steg 3: Installer Python-avhengigheter # Steg 3: Installer Python-avhengigheter
pip install google-adk google-cloud-aiplatform>=1.111.0 --quiet pip install google-adk google-cloud-aiplatform>=1.111.0 --quiet
# Steg 4: Kjør i rekkefølge (kilde .env først) # Steg 4: Kjør i rekkefølge
source .env source .env
bash infrastructure/00-authcheck.sh bash infrastructure/00-authcheck.sh
bash infrastructure/01-setupenv.sh bash infrastructure/01-setupenv.sh
bash infrastructure/07-rag-setup.sh bash infrastructure/07-rag-setup.sh
# *** Kopier RAG_CORPUS_NAME fra output inn i .env *** # *** Kopier RAG_CORPUS_NAME fra output inn i .env ***
nano .env nano .env && source .env
source .env
bash infrastructure/08-memorybank-setup.sh bash infrastructure/08-memorybank-setup.sh
# *** Kopier MEMORY_ENGINE_NAME fra output inn i .env *** # *** Kopier MEMORY_ENGINE_NAME fra output inn i .env ***
nano .env nano .env && source .env
source .env
gcloud run deploy osvauco-agent \
--source . --region europe-west1 \
--project propane-will-491900-m5 \
--set-secrets RAG_CORPUS=rag-corpus-name:latest \
--set-env-vars GOOGLE_GENAI_USE_VERTEXAI=1,GOOGLE_CLOUD_PROJECT=propane-will-491900-m5,GOOGLE_CLOUD_LOCATION=global,MEMORY_ENGINE_NAME=$MEMORY_ENGINE_NAME \
--no-allow-unauthenticated
bash infrastructure/05-cloudrun-deploy.sh
bash infrastructure/04-observability-setup.sh bash infrastructure/04-observability-setup.sh
bash infrastructure/11-billing-iam-hardening.sh bash infrastructure/11-billing-iam-hardening.sh
bash scripts/smoke-test.sh
# Om kvelden (OBLIGATORISK — unngå 24/7-fakturering): # Om kvelden (OBLIGATORISK):
bash infrastructure/03-teardown.sh bash infrastructure/03-teardown.sh
``` ```
--- ---
## FASE A — Ferdigstill kjernen (GCP oppe) ## FASE A — Ferdigstill kjernen ✅ KOMPLETT
**Mål: Agenten din er live på Google Cloud | Tid: Ca. 2 timer**
``` ```
[x] A1 — cp .env.example .env og fyll inn verdier [x] A1 — cp .env.example .env og fyll inn verdier
@ -90,95 +92,78 @@ bash infrastructure/03-teardown.sh
[x] A3 — bash infrastructure/01-setupenv.sh [x] A3 — bash infrastructure/01-setupenv.sh
[x] A4 — bash infrastructure/07-rag-setup.sh [x] A4 — bash infrastructure/07-rag-setup.sh
RAG corpus: projects/357036551735/locations/europe-west1/ragCorpora/6917529027641081856 RAG corpus: projects/357036551735/locations/europe-west1/ragCorpora/6917529027641081856
[ ] A5 — bash infrastructure/08-memorybank-setup.sh [x] A5 — bash infrastructure/08-memorybank-setup.sh
OQ-01: Python SDK only (auto-installert av script) Memory Engine: projects/357036551735/locations/us-central1/reasoningEngines/2260229219579592704
ACTION: Kopier MEMORY_ENGINE_NAME til .env export MEMORY_ENGINE_NAME="projects/357036551735/locations/us-central1/reasoningEngines/2260229219579592704"
[x] A6 — Cloud Run live: osvauco-agent (europe-west1) [x] A6 — Cloud Run live: osvauco-agent (europe-west1) revision 00006-282
URL: https://osvauco-agent-357036551735.europe-west1.run.app URL: https://osvauco-agent-357036551735.europe-west1.run.app
Modes: light (gemini-2.0-flash) | heavy (gemini-2.5-pro) Modes: light (gemini-2.5-flash) | heavy (gemini-2.5-pro)
Env: GOOGLE_CLOUD_LOCATION=us-central1 for modellkall Env: GOOGLE_CLOUD_LOCATION=global (krav for gemini-2.5-*)
[x] A7 — bash infrastructure/04-observability-setup.sh [x] A7 — bash infrastructure/04-observability-setup.sh
TELEMETRI-KOORDINERING: A7 (Cloud Monitoring/Logging) og ml/telemetry.py er komplementære: TELEMETRI-KOORDINERING:
- ml/telemetry.py: JSONL til /tmp/vauco_telemetry/ — agent-nivå (latens, mode, suksess) - ml/telemetry.py: JSONL /tmp/vauco_telemetry/ — agent-nivå
- A7 Cloud Monitoring: GCP-nivå (CPU, minne, request-rate, feil-rate) - A7 Cloud Monitoring: GCP-nivå (CPU, request-rate, feil-rate)
- I prod: GCS sink fra /tmp/ → gs://propane-will-491900-m5-telemetry/ (se 10-cost-guard.sh) - Prod: GCS sink via 10-cost-guard.sh (B5)
Ingen konflikt — to lag, ulik granularitet. Begge beholdes.
[x] A8 — bash infrastructure/03-teardown.sh (kjør hver kveld) [x] A8 — bash infrastructure/03-teardown.sh (kjør hver kveld)
[x] A9 — bash infrastructure/11-billing-iam-hardening.sh [x] A9 — bash infrastructure/11-billing-iam-hardening.sh
[x] SMOKE — scripts/smoke-test.sh: 10/10 ✅ (2026-05-26 01:45 CEST)
``` ```
--- ---
## FASE A2 — Dialogflow CX FAQ-agent (parallelt med A4A9) ## FASE A2 — Dialogflow CX FAQ-agent
**Mål: Generativ FAQ-agent live på OSVauco | Tid: Ca. 35 timer** **Kreditt: kr 5 822 + $1 000 Playbooks-trial**
**Kreditt: kr 5 822 (dialogflow_cx_credit_v2-0171F6-057E6B-A260BA) + $1 000 Playbooks-trial**
**Detaljer: se `docs/dialogflow-cx-budget-plan.md`**
``` ```
[ ] DX1 — Opprett Playbook-agent i Conversational Agents Console [ ] DX1 — Opprett Playbook-agent i Conversational Agents Console
[ ] DX2 — Last opp FAQ-innhold som Data Store [ ] DX2 — Last opp FAQ-innhold som Data Store
[ ] DX3 — Konfigurer Playbook med norsk systemprompt [ ] DX3 — Konfigurer Playbook med norsk systemprompt
[ ] DX4 — Koble webhook mot OSVauco Cloud Run (etter A6) [ ] DX4 — Koble webhook mot OSVauco Cloud Run
[ ] DX5 — Publiser via Dialogflow Messenger (web-widget) [ ] DX5 — Publiser via Dialogflow Messenger
[ ] DX6 — Sett budsjett-alert for Dialogflow CX [ ] DX6 — Sett budsjett-alert for Dialogflow CX
``` ```
--- ---
## FASE ML — ML-lag for OPAX (parallelt med B/C) ## FASE ML — ML-lag for OPAX
**Mål: Agentene kjører parallelt, lærer fra bruk, gir strategisk innsikt**
**Filer: `ml/`, `AGENTS.md`, `docs/ml-integration.md`**
``` ```
[x] ML-1 — Grunnlag (implementert 2026-05-25) [x] ML-1 — Grunnlag (2026-05-25)
Komponenter: ml/task_graph.py — Dask DAG parallell agent-kjøring
ml/task_graph.py — Dask DAG for parallell agent-kjøring ml/state_store.py — Parameter Server state
ml/state_store.py — Parameter Server state (in-memory) ml/telemetry.py — JSONL per agent-kall og DAG
ml/telemetry.py — JSONL-logging per agent-kall og DAG-kjøring POST /run | POST /run/dag | GET /state | GET /telemetry/history
Endepunkter i main.py: Røyktest: DAG 2 meldinger parallelt ✅ 4.6s
POST /run — enkelt kall med telemetri + state push
POST /run/dag — parallell DAG over liste av meldinger
GET /state — live Parameter Server snapshot
GET /telemetry/history — siste N state-operasjoner
Telemetri-koordinering: se A7-notat over
[ ] ML-2 — Adaptiv intelligens (planlagt) [ ] ML-2 — Adaptiv intelligens
ml/feedback_loop.py — inkrementell feedback-loop (vauco-gemini-tui-bridge) Trigger: > 500 telemetri-kall fra ML-1
ml/hypertuner.py — ASHA hyperparametertuning (vauco-bootstrap) ml/feedback_loop.py, ml/hypertuner.py, ml/heavy_predictor.py
ml/heavy_predictor.py — heavy-mode prediksjon basert på historikk (OSVauco)
Krav: dask-ml>=2024.4.0, ray[tune]>=2.10.0 Krav: dask-ml>=2024.4.0, ray[tune]>=2.10.0
Trigger: nok telemetri-data fra ML-1 (> 500 kall)
[ ] ML-3 — Strategisk innsikt (planlagt) [ ] ML-3 — Strategisk innsikt
ml/agent_importance.py — XGBoost feature importance (OSVauco)
experiments/pbt.py — Population-Based Training (deep-dream)
Krav: xgboost>=2.0.0
Trigger: ML-2 ferdig + Fase C første kunde Trigger: ML-2 ferdig + Fase C første kunde
ml/agent_importance.py (XGBoost), experiments/pbt.py
Krav: xgboost>=2.0.0
``` ```
**Telemetri-ruting (ML-lag):** | Miljø | Telemetri-lokasjon | Arkivering |
| Miljø | Lokasjon | Arkivering |
|---|---|---| |---|---|---|
| Lokal dev | `/tmp/vauco_telemetry/` | Manuell | | Lokal dev | `/tmp/vauco_telemetry/` | Manuell |
| Cloud Run | `/tmp/vauco_telemetry/` | `10-cost-guard.sh` cron → GCS | | Cloud Run | `/tmp/vauco_telemetry/` | B5: GCS sink |
| Prod skala | `gs://propane-will-491900-m5-telemetry/` | Auto via GCS sink | | Prod | `gs://propane-will-491900-m5-telemetry/` | Auto |
--- ---
## FASE B — Sikring og CI/CD ## FASE B — Sikring og CI/CD
**Mål: Begrenset tilgang og aktiv CI/CD | Tid: 1 time**
``` ```
[ ] B1 — bash infrastructure/02-deploy.sh (IAP på opax.vauco.no) [ ] B1 — bash infrastructure/02-deploy.sh (IAP på opax.vauco.no)
[ ] B2 — Opprett GitHub PAT og legg i Secret Manager [ ] B2 — Opprett GitHub PAT og legg i Secret Manager
[ ] B3 — bash infrastructure/06-cicd-setup.sh [ ] B3 — bash infrastructure/06-cicd-setup.sh
[ ] B4 — Legg til webhook URL i Secret Manager [ ] B4 — Legg til webhook URL i Secret Manager
[ ] B5 — bash infrastructure/10-cost-guard.sh [ ] B5 — bash infrastructure/10-cost-guard.sh
Aktiverer auto-teardown Cloud Function + chat-varsling Auto-teardown Cloud Function + GCS sink for ML-telemetri
OBS: 10-cost-guard.sh skal også sette opp GCS sink for ML-telemetri
[ ] B6 — Eksporter Dialogflow CX agent til versjonskontroll [ ] B6 — Eksporter Dialogflow CX agent til versjonskontroll
``` ```
@ -186,8 +171,6 @@ bash infrastructure/03-teardown.sh
## FASE C — Første salgsmodul ## FASE C — Første salgsmodul
**Mål: Ny kunde onboardet på 30 minutter | Tid: Ukentlig arbeid**
``` ```
[ ] C1 — Pakk vauco-bootstrap som Terraform-modul [ ] C1 — Pakk vauco-bootstrap som Terraform-modul
[ ] C2 — Pakk vauco-os som kundeflate [ ] C2 — Pakk vauco-os som kundeflate
@ -205,7 +188,7 @@ bash infrastructure/03-teardown.sh
| `01-setupenv.sh` | Aktiver APIs, SA, IAM, budsjetter, Pub/Sub | Klar | | `01-setupenv.sh` | Aktiver APIs, SA, IAM, budsjetter, Pub/Sub | Klar |
| `02-deploy.sh` | IAP-deploy på eget domene | Klar | | `02-deploy.sh` | IAP-deploy på eget domene | Klar |
| `03-teardown.sh` | Riv ned Cloud Run | Klar | | `03-teardown.sh` | Riv ned Cloud Run | Klar |
| `04-observability-setup.sh` | Cloud Monitoring + alerting (GCP-nivå) | Klar | | `04-observability-setup.sh` | Cloud Monitoring + alerting | Klar |
| `05-cloudrun-deploy.sh` | ADK-agent til Cloud Run | Klar | | `05-cloudrun-deploy.sh` | ADK-agent til Cloud Run | Klar |
| `06-cicd-setup.sh` | GitHub → Cloud Build 2nd gen | Oppdatert | | `06-cicd-setup.sh` | GitHub → Cloud Build 2nd gen | Oppdatert |
| `07-rag-setup.sh` | RAG Engine corpus + fallback | Oppdatert | | `07-rag-setup.sh` | RAG Engine corpus + fallback | Oppdatert |
@ -213,26 +196,27 @@ bash infrastructure/03-teardown.sh
| `09-cost-check.sh` | Kostnadsoversikt + Artifact Registry | Klar | | `09-cost-check.sh` | Kostnadsoversikt + Artifact Registry | Klar |
| `10-cost-guard.sh` | Cloud Function auto-teardown + GCS ML-telemetri sink | **Ny** | | `10-cost-guard.sh` | Cloud Function auto-teardown + GCS ML-telemetri sink | **Ny** |
| `11-billing-iam-hardening.sh` | Billing IAM: viewer-roller + fjern domain Creator | **Ny** | | `11-billing-iam-hardening.sh` | Billing IAM: viewer-roller + fjern domain Creator | **Ny** |
| `scripts/smoke-test.sh` | 10-case røyktest: health/light/heavy/legacy/400/403/DAG/state/telemetri | **Ny** |
--- ---
## KJENTE HULL ## KJENTE HULL
| ID | Hva | Workaround / Status | | ID | Hva | Status |
|---|---|---| |---|---|---|
| OQ-01 | Memory Bank — ingen gcloud CLI | Python SDK only | | OQ-01 | Memory Bank — ingen gcloud CLI | Python SDK only |
| OQ-02 | RAG Engine regional availability | Auto-fallback til us-east1 | | OQ-02 | RAG Engine regional availability | Auto-fallback til us-east1 |
| OQ-03 | CMEK ikke for RAG Engine | VPC-SC only | | OQ-03 | CMEK ikke for RAG Engine | VPC-SC only |
| OQ-04 | Cloud Build GitHub OAuth | **LØST** — 2nd gen programmatisk connection | | OQ-04 | Cloud Build GitHub OAuth | **LØST** — 2nd gen |
| OQ-05 | gcloud alpha monitoring ustabil | Fallback til true | | OQ-05 | gcloud alpha monitoring ustabil | Fallback til true |
| OQ-06 | Memory Bank auto-discovery | Eksplisitt env var | | OQ-06 | Memory Bank auto-discovery | Eksplisitt env var |
| OQ-07 | Monitoring email flag-format | Teste i dev | | OQ-07 | Monitoring email flag-format | Teste i dev |
| OQ-08 | VPC connector e2-micro regional | Default us-central1 | | OQ-08 | VPC connector e2-micro regional | Default us-central1 |
| OQ-09 | GCP billing: 0 viewers | **LØST** `11-billing-iam-hardening.sh` | | OQ-09 | GCP billing: 0 viewers | **LØST** |
| OQ-10 | GCP billing: Creator på domenet | **LØST** — fjernes når ORG_DOMAIN er satt | | OQ-10 | GCP billing: Creator på domenet | **LØST** |
| OQ-11 | Dialogflow CX Data Store norsk indeksering | Teste med nb-NO locale i DX2 | | OQ-11 | Dialogflow CX Data Store norsk indeksering | Teste nb-NO i DX2 |
| OQ-12 | gemini-2.0-flash ikke tilgjengelig europe-west1 | **LØST** — GOOGLE_CLOUD_LOCATION=us-central1 for modellkall | | OQ-12 | gemini-2.0-flash/gemini-2.0-flash-001 ikke tilgjengelig nye prosjekter | **LØST** — gemini-2.5-flash/pro + LOCATION=global |
| OQ-13 | ML-telemetri /tmp/ flyktig i Cloud Run | B5: GCS sink via 10-cost-guard.sh | | OQ-13 | ML-telemetri /tmp/ flyktig i Cloud Run | B5: GCS sink |
--- ---
@ -240,14 +224,15 @@ bash infrastructure/03-teardown.sh
| API | Status | | API | Status |
|-----|--------| |-----|--------|
| `google.adk.Agent` (ikke LlmAgent) | Bekreftet GA-API | | `google.adk.Agent` | Bekreftet GA |
| `load_memory_tool` | Bekreftet fra adk-python samples | | `load_memory_tool` | Bekreftet |
| Cloud Build 2nd gen (`cloudbuildv2`) | Bekreftet GA | | Cloud Build 2nd gen | Bekreftet GA |
| CMEK ikke for RAG Engine | Ikke støttet (OQ-03) | | CMEK ikke for RAG Engine | Ikke støttet |
| Idempotente scripts | Trygt å kjøre flere ganger | | Idempotente scripts | Trygt å kjøre flere ganger |
| `03-teardown.sh` hver kveld | Agent Runtimes koster 24/7 | | `03-teardown.sh` hver kveld | Agent Runtimes koster 24/7 |
| Conversational Agents (Dialogflow CX) | Playbooks GA | | Dialogflow CX Playbooks | GA |
| Dask `scheduler="threads"` i Cloud Run | Bekreftet — ingen worker-prosesser nødvendig | | Dask `scheduler="threads"` i Cloud Run | Bekreftet |
| `gemini-2.5-flash` / `gemini-2.5-pro` via `LOCATION=global` | **Bekreftet 2026-05-26** |
--- ---
@ -268,47 +253,22 @@ Breakeven: 1 kunde til $300-500/mnd dekker alle kostnader.
**Prinsipp:** Lett modell i front (light), tung modell ved behov (heavy). **Prinsipp:** Lett modell i front (light), tung modell ved behov (heavy).
| Modell | Pris input/output (per 1M) | EU-tilgang | Bruksområde | | Modell | Pris (per 1M) | Tilgang | Bruksområde |
|---|---|---|---| |---|---|---|---|
| `gemini-2.0-flash` | $0.10 / $0.40 | Ja (europe-west4) | light — alle enkle kall | | `gemini-2.5-flash` | $0.30 / $2.50 | global | light — alle enkle kall |
| `gemini-2.5-pro` | $1.25 / $10.00 | Ja (europe-west4) | heavy — kompleks reasoning, compliance | | `gemini-2.5-pro` | $1.25 / $10.00 | global | heavy — reasoning, compliance |
| `gemini-3.5-flash` | $1.50 / $9.00 | Nei (kun US/global) | heavy reasoning, Fase C |
**Rutetabell per modul:**
| Modul / Agent | light | heavy | Trigger |
|---|---|---|---|
| OPAX billing-agent | `gemini-2.0-flash` | `gemini-2.5-pro` / `gemini-3.5-flash` | `mode: heavy` |
| RAG retrieval | `gemini-2.0-flash` | `gemini-2.5-pro` | Komplekse flertrinns-spørsmål |
| Memory Bank oppslag | `gemini-2.0-flash` | — | Aldri |
| TUI-cockpit | `gemini-2.0-flash` | `gemini-3.5-flash` | Dyp analyse |
| vauco-os (kundeflate) | `gemini-2.0-flash` | `gemini-2.5-pro` | Compliance |
| Dialogflow CX Playbooks | Gemini (managed) | — | Native |
| Fase C: Terraform-gen | `gemini-3.5-flash` | — | Standard for modulen |
| ML-2 heavy predictor | `gemini-2.0-flash` | — | Predikerer heavy-behov |
**Request-format:**
```json
{
"message": "...",
"user_id": "opax",
"session_id": "opax-proj-001",
"mode": "heavy"
}
```
**Modellfordeling:**
| Parameter | light | heavy | | Parameter | light | heavy |
|---|---|---| |---|---|---|
| Orchestrator | `gemini-2.0-flash` | `gemini-2.5-pro` | | Orchestrator | `gemini-2.5-flash` | `gemini-2.5-pro` |
| Sub-agenter | `gemini-2.0-flash` | `gemini-2.5-pro` | | Sub-agenter | `gemini-2.5-flash` | `gemini-2.5-pro` |
| Reasoning | `gemini-2.0-flash` | `gemini-3.5-flash` | | Reasoning | `gemini-2.5-flash` | `gemini-2.5-flash` |
| Multi-agent pipeline | Nei | Ja | | Multi-agent | Nei | Ja |
| Budsjettgrense | $1/task | $3/task | | Budsjettgrense | $1/task | $3/task |
| `LOCATION` | `global` | `global` |
**Autoriserte brukere for heavy mode:** `opax`, `admin` **Autoriserte brukere for heavy:** `opax`, `admin`
Legacy-verdier `A` og `A+` aksepteres og normaliseres automatisk. Legacy `A` / `A+` normaliseres automatisk til `light` / `heavy`.
--- ---
@ -318,10 +278,10 @@ Legacy-verdier `A` og `A+` aksepteres og normaliseres automatisk.
|---|---| |---|---|
| Fase C: Medioteq | `vauco-bootstrap` → Terraform-modul | | Fase C: Medioteq | `vauco-bootstrap` → Terraform-modul |
| Per kunde | `terraform apply -var="customer_id=X"` | | Per kunde | `terraform apply -var="customer_id=X"` |
| Ressurser per modul | Cloud Run, Cloud Build 2nd gen, IAP, budsjett, SA, Dialogflow CX agent, ML state store | | Ressurser | Cloud Run, Cloud Build, IAP, budsjett, SA, Dialogflow CX, ML state store |
| State-backend | GCS bucket (`TF_STATE_BUCKET`) | | State-backend | GCS (`TF_STATE_BUCKET`) |
| Fase D | Terraform Cloud for sentralisert state | | Fase D | Terraform Cloud |
--- ---
*OSVauco-NMTMD-GCOS | propane-will-491900-m5 | us-central1 (modell) / europe-west1 (infra)* *OSVauco-NMTMD-GCOS | propane-will-491900-m5 | global (modell) / europe-west1 (infra)*