328 lines
12 KiB
Markdown
328 lines
12 KiB
Markdown
# VAUCO MASTERPLAN — Chris Christiansen
|
||
|
||
**Sist oppdatert: 2026-05-26 CEST**
|
||
**Status: Cloud Run live (light/heavy) | A5 Memory Bank gjenstår | ML-1 implementert | B-fasen neste**
|
||
|
||
---
|
||
|
||
## KONTEKST — Hva vi bygger
|
||
|
||
Ett AI-drevet operativsystem (OPAX) som kjører på Google Cloud.
|
||
Du er første kunde. Når det virker for deg → selg det til andre.
|
||
|
||
**Repo-oversikt:**
|
||
| Repo | Hva det er |
|
||
|---|---|
|
||
| `OSVauco` | Regler, GCP-scripts, agenter, docs — KJERNEN |
|
||
| `vauco-gemini-tui-bridge` | Din TUI-cockpit |
|
||
| `vauco-os` | Det kundene bruker |
|
||
| `vauco-bootstrap` | Onboarding av nye kunder (→ Terraform-modul i Fase C) |
|
||
| `deep-dream` | Strategisk visjon — aldri deploy herfra |
|
||
|
||
---
|
||
|
||
## AGENT-IDENTITET
|
||
|
||
| Identitet | E-post | Rolle | Formål |
|
||
|---|---|---|---|
|
||
| Eier / admin | `chris.christiansen@vauco.no` | `billing.admin` + `billing.viewer` | Full kontroll |
|
||
| Agent (OPAX) | `jason.vauger@vauco.no` | `billing.viewer` | Hente og rapportere kostnadsdata autonomt |
|
||
| Fremtidig gruppe | `billing@vauco.no` | `billing.viewer` (Fase C) | Delt innboks for team og kunder |
|
||
|
||
**Agent-kapabiliteter med `billing.viewer`:**
|
||
- Svare på «Hva koster dette prosjektet denne måneden?»
|
||
- Sende ukentlig kostnadsrapport til chat-appen
|
||
- Reagere på Pub/Sub budget-alerts (via `10-cost-guard.sh`)
|
||
- **Ikke:** endre IAM, budsjetter eller koble prosjekter
|
||
|
||
---
|
||
|
||
## CLOUD SHELL QUICK-START (kopi-klipp)
|
||
|
||
> Bruk Cloud Shell: https://shell.cloud.google.com
|
||
|
||
```bash
|
||
# Steg 1: Klon og sett opp miljø
|
||
gcloud config set project propane-will-491900-m5
|
||
git clone https://github.com/chrischristiansen-glitch/OSVauco.git ~/OSVauco
|
||
cd ~/OSVauco
|
||
|
||
# Steg 2: Kopier og rediger .env
|
||
cp .env.example .env
|
||
nano .env
|
||
# Fyll ut: BILLING_ACCOUNT_ID, ALERT_EMAIL, GITHUB_APP_INSTALLATION_ID
|
||
# Alle andre verdier er ferdig-forhåndsutfylt
|
||
|
||
# Steg 3: Installer Python-avhengigheter
|
||
pip install google-adk google-cloud-aiplatform>=1.111.0 --quiet
|
||
|
||
# Steg 4: Kjør i rekkefølge (kilde .env først)
|
||
source .env
|
||
bash infrastructure/00-authcheck.sh
|
||
bash infrastructure/01-setupenv.sh
|
||
bash infrastructure/07-rag-setup.sh
|
||
# *** Kopier RAG_CORPUS_NAME fra output inn i .env ***
|
||
nano .env
|
||
source .env
|
||
|
||
bash infrastructure/08-memorybank-setup.sh
|
||
# *** Kopier MEMORY_ENGINE_NAME fra output inn i .env ***
|
||
nano .env
|
||
source .env
|
||
|
||
bash infrastructure/05-cloudrun-deploy.sh
|
||
bash infrastructure/04-observability-setup.sh
|
||
bash infrastructure/11-billing-iam-hardening.sh
|
||
|
||
# Om kvelden (OBLIGATORISK — unngå 24/7-fakturering):
|
||
bash infrastructure/03-teardown.sh
|
||
```
|
||
|
||
---
|
||
|
||
## FASE A — Ferdigstill kjernen (GCP oppe)
|
||
|
||
**Mål: Agenten din er live på Google Cloud | Tid: Ca. 2 timer**
|
||
|
||
```
|
||
[x] A1 — cp .env.example .env og fyll inn verdier
|
||
[x] A2 — bash infrastructure/00-authcheck.sh
|
||
[x] A3 — bash infrastructure/01-setupenv.sh
|
||
[x] A4 — bash infrastructure/07-rag-setup.sh
|
||
RAG corpus: projects/357036551735/locations/europe-west1/ragCorpora/6917529027641081856
|
||
[ ] A5 — bash infrastructure/08-memorybank-setup.sh
|
||
OQ-01: Python SDK only (auto-installert av script)
|
||
ACTION: Kopier MEMORY_ENGINE_NAME til .env
|
||
[x] A6 — Cloud Run live: osvauco-agent (europe-west1)
|
||
URL: https://osvauco-agent-357036551735.europe-west1.run.app
|
||
Modes: light (gemini-2.0-flash) | heavy (gemini-2.5-pro)
|
||
Env: GOOGLE_CLOUD_LOCATION=us-central1 for modellkall
|
||
[x] A7 — bash infrastructure/04-observability-setup.sh
|
||
TELEMETRI-KOORDINERING: A7 (Cloud Monitoring/Logging) og ml/telemetry.py er komplementære:
|
||
- ml/telemetry.py: JSONL til /tmp/vauco_telemetry/ — agent-nivå (latens, mode, suksess)
|
||
- A7 Cloud Monitoring: GCP-nivå (CPU, minne, request-rate, feil-rate)
|
||
- I prod: GCS sink fra /tmp/ → gs://propane-will-491900-m5-telemetry/ (se 10-cost-guard.sh)
|
||
Ingen konflikt — to lag, ulik granularitet. Begge beholdes.
|
||
[x] A8 — bash infrastructure/03-teardown.sh (kjør hver kveld)
|
||
[x] A9 — bash infrastructure/11-billing-iam-hardening.sh
|
||
```
|
||
|
||
---
|
||
|
||
## FASE A2 — Dialogflow CX FAQ-agent (parallelt med A4–A9)
|
||
|
||
**Mål: Generativ FAQ-agent live på OSVauco | Tid: Ca. 3–5 timer**
|
||
**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
|
||
[ ] DX2 — Last opp FAQ-innhold som Data Store
|
||
[ ] DX3 — Konfigurer Playbook med norsk systemprompt
|
||
[ ] DX4 — Koble webhook mot OSVauco Cloud Run (etter A6)
|
||
[ ] DX5 — Publiser via Dialogflow Messenger (web-widget)
|
||
[ ] DX6 — Sett budsjett-alert for Dialogflow CX
|
||
```
|
||
|
||
---
|
||
|
||
## FASE ML — ML-lag for OPAX (parallelt med B/C)
|
||
|
||
**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)
|
||
Komponenter:
|
||
ml/task_graph.py — Dask DAG for parallell agent-kjøring
|
||
ml/state_store.py — Parameter Server state (in-memory)
|
||
ml/telemetry.py — JSONL-logging per agent-kall og DAG-kjøring
|
||
Endepunkter i main.py:
|
||
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/feedback_loop.py — inkrementell feedback-loop (vauco-gemini-tui-bridge)
|
||
ml/hypertuner.py — ASHA hyperparametertuning (vauco-bootstrap)
|
||
ml/heavy_predictor.py — heavy-mode prediksjon basert på historikk (OSVauco)
|
||
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/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
|
||
```
|
||
|
||
**Telemetri-ruting (ML-lag):**
|
||
| Miljø | Lokasjon | Arkivering |
|
||
|---|---|---|
|
||
| Lokal dev | `/tmp/vauco_telemetry/` | Manuell |
|
||
| Cloud Run | `/tmp/vauco_telemetry/` | `10-cost-guard.sh` cron → GCS |
|
||
| Prod skala | `gs://propane-will-491900-m5-telemetry/` | Auto via GCS sink |
|
||
|
||
---
|
||
|
||
## 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)
|
||
[ ] B2 — Opprett GitHub PAT og legg i Secret Manager
|
||
[ ] B3 — bash infrastructure/06-cicd-setup.sh
|
||
[ ] B4 — Legg til webhook URL i Secret Manager
|
||
[ ] B5 — bash infrastructure/10-cost-guard.sh
|
||
Aktiverer auto-teardown Cloud Function + chat-varsling
|
||
OBS: 10-cost-guard.sh skal også sette opp GCS sink for ML-telemetri
|
||
[ ] B6 — Eksporter Dialogflow CX agent til versjonskontroll
|
||
```
|
||
|
||
---
|
||
|
||
## FASE C — Første salgsmodul
|
||
|
||
**Mål: Ny kunde onboardet på 30 minutter | Tid: Ukentlig arbeid**
|
||
|
||
```
|
||
[ ] C1 — Pakk vauco-bootstrap som Terraform-modul
|
||
[ ] C2 — Pakk vauco-os som kundeflate
|
||
[ ] C3 — Opprett billing@vauco.no som Google Group
|
||
[ ] C4 — Første kunde: Medioteq
|
||
```
|
||
|
||
---
|
||
|
||
## INFRASTRUKTUR
|
||
|
||
| Script | Rolle | Status |
|
||
|--------|-------|--------|
|
||
| `00-authcheck.sh` | Verifiser gcloud-innlogging | Klar |
|
||
| `01-setupenv.sh` | Aktiver APIs, SA, IAM, budsjetter, Pub/Sub | Klar |
|
||
| `02-deploy.sh` | IAP-deploy på eget domene | Klar |
|
||
| `03-teardown.sh` | Riv ned Cloud Run | Klar |
|
||
| `04-observability-setup.sh` | Cloud Monitoring + alerting (GCP-nivå) | Klar |
|
||
| `05-cloudrun-deploy.sh` | ADK-agent til Cloud Run | Klar |
|
||
| `06-cicd-setup.sh` | GitHub → Cloud Build 2nd gen | Oppdatert |
|
||
| `07-rag-setup.sh` | RAG Engine corpus + fallback | Oppdatert |
|
||
| `08-memorybank-setup.sh` | Memory Bank + auto-install | Oppdatert |
|
||
| `09-cost-check.sh` | Kostnadsoversikt + Artifact Registry | Klar |
|
||
| `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** |
|
||
|
||
---
|
||
|
||
## KJENTE HULL
|
||
|
||
| ID | Hva | Workaround / Status |
|
||
|---|---|---|
|
||
| OQ-01 | Memory Bank — ingen gcloud CLI | Python SDK only |
|
||
| OQ-02 | RAG Engine regional availability | Auto-fallback til us-east1 |
|
||
| OQ-03 | CMEK ikke for RAG Engine | VPC-SC only |
|
||
| OQ-04 | Cloud Build GitHub OAuth | **LØST** — 2nd gen programmatisk connection |
|
||
| OQ-05 | gcloud alpha monitoring ustabil | Fallback til true |
|
||
| OQ-06 | Memory Bank auto-discovery | Eksplisitt env var |
|
||
| OQ-07 | Monitoring email flag-format | Teste i dev |
|
||
| OQ-08 | VPC connector e2-micro regional | Default us-central1 |
|
||
| OQ-09 | GCP billing: 0 viewers | **LØST** — `11-billing-iam-hardening.sh` |
|
||
| OQ-10 | GCP billing: Creator på domenet | **LØST** — fjernes når ORG_DOMAIN er satt |
|
||
| OQ-11 | Dialogflow CX Data Store norsk indeksering | Teste med nb-NO locale i DX2 |
|
||
| OQ-12 | gemini-2.0-flash ikke tilgjengelig europe-west1 | **LØST** — GOOGLE_CLOUD_LOCATION=us-central1 for modellkall |
|
||
| OQ-13 | ML-telemetri /tmp/ flyktig i Cloud Run | B5: GCS sink via 10-cost-guard.sh |
|
||
|
||
---
|
||
|
||
## BEKREFTET GA-API
|
||
|
||
| API | Status |
|
||
|-----|--------|
|
||
| `google.adk.Agent` (ikke LlmAgent) | Bekreftet GA-API |
|
||
| `load_memory_tool` | Bekreftet fra adk-python samples |
|
||
| Cloud Build 2nd gen (`cloudbuildv2`) | Bekreftet GA |
|
||
| CMEK ikke for RAG Engine | Ikke støttet (OQ-03) |
|
||
| Idempotente scripts | Trygt å kjøre flere ganger |
|
||
| `03-teardown.sh` hver kveld | Agent Runtimes koster 24/7 |
|
||
| Conversational Agents (Dialogflow CX) | Playbooks GA |
|
||
| Dask `scheduler="threads"` i Cloud Run | Bekreftet — ingen worker-prosesser nødvendig |
|
||
|
||
---
|
||
|
||
## DRIFTSKOSTNADER
|
||
|
||
| Scenario | Kostnad/mnd |
|
||
|---|---|
|
||
| Bare deg (dev, teardown daglig) | ~$25-75 |
|
||
| Dev + Dialogflow CX FAQ (10k req) | ~$145-195 |
|
||
| 1 betalende kunde (lett prod) | ~$115-280 |
|
||
| Medioteq-type (klinisk, compliance) | ~$220-350 |
|
||
|
||
Breakeven: 1 kunde til $300-500/mnd dekker alle kostnader.
|
||
|
||
---
|
||
|
||
## LLM-RUTINGSSTRATEGI
|
||
|
||
**Prinsipp:** Lett modell i front (light), tung modell ved behov (heavy).
|
||
|
||
| Modell | Pris input/output (per 1M) | EU-tilgang | Bruksområde |
|
||
|---|---|---|---|
|
||
| `gemini-2.0-flash` | $0.10 / $0.40 | Ja (europe-west4) | light — alle enkle kall |
|
||
| `gemini-2.5-pro` | $1.25 / $10.00 | Ja (europe-west4) | heavy — kompleks 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 |
|
||
|---|---|---|
|
||
| Orchestrator | `gemini-2.0-flash` | `gemini-2.5-pro` |
|
||
| Sub-agenter | `gemini-2.0-flash` | `gemini-2.5-pro` |
|
||
| Reasoning | `gemini-2.0-flash` | `gemini-3.5-flash` |
|
||
| Multi-agent pipeline | Nei | Ja |
|
||
| Budsjettgrense | $1/task | $3/task |
|
||
|
||
**Autoriserte brukere for heavy mode:** `opax`, `admin`
|
||
Legacy-verdier `A` og `A+` aksepteres og normaliseres automatisk.
|
||
|
||
---
|
||
|
||
## TERRAFORM-VEIKART (Fase C)
|
||
|
||
| Når | Hva |
|
||
|---|---|
|
||
| Fase C: Medioteq | `vauco-bootstrap` → Terraform-modul |
|
||
| 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 |
|
||
| State-backend | GCS bucket (`TF_STATE_BUCKET`) |
|
||
| Fase D | Terraform Cloud for sentralisert state |
|
||
|
||
---
|
||
|
||
*OSVauco-NMTMD-GCOS | propane-will-491900-m5 | us-central1 (modell) / europe-west1 (infra)*
|