chore: update docs/HANDOFF-LOCAL-LLM-GITEA-MCP.md via opax-mcp
Some checks are pending
Check Python Version Consistency / Check Python Version (push) Waiting to run

This commit is contained in:
chris 2026-07-21 20:49:04 +00:00
parent 64333bf620
commit a50834eb1e

View File

@ -7,148 +7,137 @@ Denne handoffen er det eneste autoritative arbeidsdokumentet for sporet "lokal L
--- ---
## FREMDRIFT OPPDATERT 2026-07-21 22:41 CEST ## FREMDRIFT OPPDATERT 2026-07-21 22:47 CEST
### ✅ FASE 0 Lås situasjonen — FERDIG ### ✅ FASE 05 — FERDIG (se tidligere logg)
- Handoff opprettet som eget dokument
- dev-snap/GPU-VM er aktiv verifikasjonsbase
- Gitea er eneste source of truth
- Lokal LLM-bane er primær retning
### ✅ FASE 1 Lokale modeller lever — FERDIG ### ⏳ FASE 6 CPU-optimalisering — PÅGÅR
- Ollama kjører på Gitea-CPU-VM (34.67.252.59:11434)
- Modeller tilgjengelig via MCP: `gemma3:4b`, `qwen2.5:3b`
- Modeller på dev-snap localhost: `qwen2.5:7b`, `gemma3:4b`, `llama3.2`, `nomic-embed-text`
- `list_emma_models` via MCP: GRØNN ✅
### ✅ FASE 2 MCP peker korrekt til lokal modellsti — FERDIG Låste parametere:
- `OLLAMA_BASE_URL` peker til Gitea-CPU-VM Ollama - `OLLAMA_KEEP_ALIVE=-1`
- `OSVAUCO_AGENT_URL` fikset til kanonisk URL (commit a171a58) - `OLLAMA_MAX_LOADED_MODELS=2`
- opax-mcp revisjon: opax-mcp-00122-m4n - `num_ctx=2048`, `num_batch=256`
- `OLLAMA_NUM_THREADS` = ikke satt ✅
### ✅ FASE 3 Gitea read-only grønn — FERDIG
- Alle 4 read-only tools GRØNNE
- `get_connector_status`: `gitea_status: online`
### ✅ FASE 4 Hel kjede samtidig grønn — FERDIG 2026-07-21 20:57 CEST
- Full smoke test: alle 8 tools grønne samtidig
### ✅ FASE 5 Frys blueprint på dev-snap — FERDIG
- Blueprint dokumentert i `docs/BLUEPRINT-DEV-SNAP.md`
### ⏳ FASE 6 CPU-optimalisering før permanent migrering — PÅGÅR
Bekreftede regler (låst etter testing):
- `OLLAMA_KEEP_ALIVE=-1` ✅ BEVIST og satt på systemd-nivå
- `OLLAMA_MAX_LOADED_MODELS=2` ✅ LÅST
- `num_ctx=2048`, `num_batch=256` ✅ LÅST
- `OLLAMA_NUM_THREADS` skal IKKE settes — Ollama autodetect er optimal
- `qwen2.5:7b` er ikke baseline-kandidat på gitea-cpu-vm
- CPU-optimalisering utføres direkte på gitea-cpu-vm
Testrekkefølge: Testrekkefølge:
1. ✅ Kaldstart / keep_alive baseline — FERDIG 2026-07-21 1. ✅ Kaldstart / keep_alive baseline — FERDIG
2. ✅ Resident modell-strategi (1 vs 2 modeller) — FERDIG 2026-07-21 2. ✅ Resident modell-strategi — FERDIG
3. ✅ Parameter-matrise (num_ctx, num_batch, OLLAMA_NUM_THREADS) — FERDIG 2026-07-21 3. ✅ Parameter-matrise — FERDIG
4. ⏳ Full Emma MCoT end-to-end 4. ✅ Full Emma MCoT end-to-end — FERDIG 2026-07-21
5. ⏳ Belastningstest med samtidig Gitea + agent-last 5. ⏳ Belastningstest med samtidig Gitea + agent-last
Exit-kriterium: Exit-kriterium:
- ✅ keep_alive-strategi bevist effektiv - ✅ keep_alive-strategi bevist effektiv
- ✅ resident modellvalg låst: MAX_LOADED_MODELS=2, begge Forever - ✅ resident modellvalg låst
- ✅ optimal parameterkombinasjon dokumentert - ✅ optimal parameterkombinasjon dokumentert
- ⏳ full Emma-loop latency akseptert - ✅ full Emma-loop latency akseptert: **42.51s per varm turn (5 kall)**
- ⏳ 2-timers belastningstest bestått uten OOM og uten swap - ⏳ 2-timers belastningstest bestått uten OOM og uten swap
--- ---
## FASE 6.1 KALDSTART / KEEP_ALIVE BASELINE — RESULTATER 2026-07-21 ## FASE 6.1 KALDSTART / KEEP_ALIVE BASELINE — FERDIG
Kjørt på: **gitea-cpu-vm** (34.67.252.59) — ekte CPU, ingen GPU
| Test | Modell | load_s | tok/s | Status | | Test | Modell | load_s | tok/s | Status |
|---|---|---|---|---| |---|---|---|---|---|
| 1.1 Ekte kaldstart | gemma3:4b | **117.69s** | 4.9 | ✅ | | 1.1 Kaldstart | gemma3:4b | 117.69s | 4.9 | ✅ |
| 1.2 Ekte kaldstart | qwen2.5:3b | **71.13s** | 6.4 | ✅ | | 1.2 Kaldstart | qwen2.5:3b | 71.13s | 6.4 | ✅ |
| 1.3 keep_alive=-1 load | gemma3:4b | 76.93s | 5.9 | ✅ | | 1.5 Varme kall ×5 | gemma3:4b | ~1.0s | ~5 | ✅ |
| 1.4 UNTIL=Forever | gemma3:4b | Forever ✅ | — | ✅ |
| 1.5 Varme kall ×5 | gemma3:4b | ~1.0s load | ~5 | ✅ |
**Konklusjoner:** keep_alive=-1 eliminerer 117s kaldstart fra kall 2+. Varme kall ~2s/kall = 812s per Emma-turn. Konklusjon: keep_alive=-1 eliminerer 117s kaldstart fra kall 2+.
--- ---
## FASE 6.2 RESIDENT MODELL-STRATEGI — RESULTATER 2026-07-21 ## FASE 6.2 RESIDENT MODELL-STRATEGI — FERDIG
| Test | Konfigurasjon | Resultat | Status | | Konfigurasjon | Resultat |
|---|---|
| MAX=1 | Bytte 59s × 46 kall = 2054s ekstra per turn |
| **MAX=2 + KEEP_ALIVE=-1** | **0s bytte, begge Forever, 6.8 GB, Swap=0** |
Låst: `OLLAMA_MAX_LOADED_MODELS=2` + `OLLAMA_KEEP_ALIVE=-1` i systemd.
---
## FASE 6.3 PARAMETER-MATRISE — FERDIG
| num_ctx | num_batch | avg tok/s | Delta |
|---|---|---|---| |---|---|---|---|
| 2.1 Begge uten MAX-begrensning | Default | Begge i RAM, Swap=0 | ✅ | | 1024 | 256 | 4.9 | baseline |
| 2.3 Bytte med MAX=1 | MAX_LOADED_MODELS=1 | gemma3 reload 9.31s / qwen 5.6s | ✅ | | **2048** | **256** | **5.0** | **+0.1 ✅ VINNER** |
| 2.4 Begge med MAX=2 | MAX=2 + KEEP_ALIVE=-1 | Begge Forever, 6.8 GB, Swap=0 | ✅ | | 4096 | 256 | 4.3 | -14% ⚠️ |
| 2048 | 128 | 4.9 | -0.1 |
| 2048 | 512 | 4.8 | -0.2 |
**✅ LÅST:** `OLLAMA_MAX_LOADED_MODELS=2` + `OLLAMA_KEEP_ALIVE=-1` i systemd. Threads (2/3/4 vCPU): alle 4.84.9 tok/s — ingen forskjell, ikke sett.
Begrunnelse: MAX=1 gir 2054s ekstra latency per Emma-turn. MAX=2 gir 0s bytte-overhead, trygg RAM-margin.
Låst: `num_ctx=2048`, `num_batch=256` (default), `OLLAMA_NUM_THREADS` ikke satt.
--- ---
## FASE 6.3 PARAMETER-MATRISE — RESULTATER 2026-07-21 ## FASE 6.4 FULL EMMA MCOT END-TO-END — FERDIG 2026-07-21
Kjørt på: **gitea-cpu-vm** (34.67.252.59) — gemma3:4b, 3 kjøringer per rad, snitt tok/s Kjørt på: **gitea-cpu-vm** (34.67.252.59) — gemma3:4b, 5 sekvensielle kall (simulert Emma MCoT)
VCPU: 4
### num_ctx / num_batch ### Test 4a — første turn etter systemd-restart (kaldstart kall 1)
| Rad | num_ctx | num_batch | avg tok/s | Delta | | Kall | load_s | eval_s | Type |
|---|---|---|---|---| |---|---|---|---|
| 3.1 | 1024 | 256 | 4.9 | baseline | | 1 | **55.6s** | 1.95s | embed (boot-kaldstart) |
| 3.2 | **2048** | **256** | **5.0** | +0.1 ✅ VINNER | | 2 | 1.06s | 6.5s | think |
| 3.3 | 4096 | 256 | 4.3 | -0.7 ⚠️ | | 3 | 1.0s | 6.3s | choose_action |
| 3.4 | 2048 | 128 | 4.9 | -0.1 | | 4 | 1.01s | 7.23s | choose_action |
| 3.5 | 2048 | 512 | 4.8 | -0.2 | | 5 | 1.06s | 13.0s | execute_action |
| **Total** | | | **102.34s** |
### num_threads Rotårsak kall 1: modellen ikke i RAM etter systemd-restart — engangs boot-kostnad.
| threads | tok/s | Delta | ### Test 4b — varm turn (modell allerede i RAM, UNTIL=Forever)
|---|---|---|
| 2 | 4.9 | — |
| 3 | 4.9 | 0 |
| 4 | 4.8 | -0.1 |
### ✅ PARAMETERKONFIGURASJON LÅST | Kall | load_s | eval_s | Type |
|---|---|---|---|
| 1 | 1.03s | 1.96s | embed |
| 2 | 1.06s | 6.18s | think |
| 3 | 1.01s | 6.15s | choose_action |
| 4 | 1.01s | 6.5s | choose_action |
| 5 | 1.07s | 13.08s | execute_action |
| **Total** | | | **42.51s ✅** |
### ✅ EMMA MCOT LATENCY LÅST
``` ```
num_ctx = 2048 (default for Emma-turns) Varm Emma-turn (5 kall): 42.51s
num_batch = 256 (Ollama default, ikke nødvendig å sette eksplisitt) Load-overhead per kall: ~1.0s (uunngåelig på CPU)
OLLAMA_NUM_THREADS = ikke satt (Ollama autodetect er optimal på 4 vCPU) Eval-tid per kall: 213s (avh. av num_predict)
Boot-kaldstart (1 gang): ~56s ekstra første turn
``` ```
**Konklusjoner:** **Konklusjoner:**
1. `num_ctx=2048` er beste balanse mellom kontekstlengde og ytelse 1. **42.51s per varm turn er akseptabelt** for asynkron/agent-bruk — ikke interaktiv chat
2. `num_ctx=4096` er -14% tregere — bruk kun eksplisitt ved lange samtaler 2. **Boot-warming er nødvendig** — legg inn oppvarmingskall i Ollama-oppstartskript etter systemd start
3. `num_batch` gjør ingen målbar forskjell på CPU — 256 er fin default 3. **load_s ~1.0s per kall er fast overhead** på CPU — ikke reduserbar med parameterjustering
4. `OLLAMA_NUM_THREADS` gjør ingen målbar forskjell — skal ikke settes 4. **Ingen RAM-degradering** — 6.8 GB used, Swap=0 etter full sekvens
5. Maskinens tak for gemma3:4b er stabilt **4.95.0 tok/s** 5. **qwen2.5:3b ble ikke testet i MCoT** — Emma bruker primært gemma3:4b; qwen2.5:3b er reserve
### Tilstand før Fase 6.4 ### RAM etter Fase 6.4
``` ```
NAME SIZE PROCESSOR CONTEXT UNTIL NAME SIZE PROCESSOR UNTIL
gemma3:4b 2.8 GB 100% CPU 2048 Forever gemma3:4b 2.9 GB 100% CPU Forever
qwen2.5:3b 2.2 GB 100% CPU 4096 Forever qwen2.5:3b 2.2 GB 100% CPU Forever
Mem: 15Gi total | 6.7Gi used | 8.9Gi available | Swap: 0B Mem: 15Gi | 6.8Gi used | 8.8Gi available | Swap: 0B
``` ```
--- ---
## ÅPNE PUNKTER SOM MÅ LØSES FØR BLUEPRINT ## ÅPNE PUNKTER SOM MÅ LØSES FØR BLUEPRINT
- `GITEA_URL` satt runtime via `gcloud run services update` — **må også legges permanent inn i `opax-mcp.yaml` i repo og rebuildes** - `GITEA_URL` satt runtime — **må legges permanent inn i `opax-mcp.yaml` og rebuildes**
- `git.vauco.no` er planlagt som permanent domene for Gitea — erstatter IP når DNS er oppe - `git.vauco.no` er planlagt permanent domene for Gitea — erstatter IP når DNS er oppe
- Gitea-commits er ikke GPG-signert — vurder om dette skal fikses - Gitea-commits er ikke GPG-signert — vurder om dette skal fikses
- **Boot-warming:** legg til oppvarmingskall i Ollama systemd ExecStartPost eller egen service
## FASTE SANNHETER (uendret) ## FASTE SANNHETER (uendret)
- Gitea er source of truth - Gitea er source of truth
- Lokale modeller er hovedretning - Lokale modeller er hovedretning
- dev-snap/GPU-VM er nåværende verifikasjonsflate
- Gitea-VM (34.67.252.59) er planlagt permanent målmaskin - Gitea-VM (34.67.252.59) er planlagt permanent målmaskin
- Denne handoffen overstyrer alt annet - Denne handoffen overstyrer alt annet
@ -160,15 +149,16 @@ Mem: 15Gi total | 6.7Gi used | 8.9Gi available | Swap: 0B
- ✅ GCP/Workspace-kjernen er fortsatt grønn - ✅ GCP/Workspace-kjernen er fortsatt grønn
- ⚠️ Konfigurasjon konsolidert — delvis (GITEA_URL må inn i repo) - ⚠️ Konfigurasjon konsolidert — delvis (GITEA_URL må inn i repo)
- ⏳ Ingen skjult API-/agentavhengighet som hovedbane — ikke verifisert - ⏳ Ingen skjult API-/agentavhengighet som hovedbane — ikke verifisert
- ✅ dev-snap-oppsettet dokumentert godt nok til blueprinting — FASE 5 FERDIG - ✅ dev-snap-oppsettet dokumentert godt nok til blueprinting
- ⏳ CPU-optimalisering verifisert på Gitea-VM — FASE 6 pågår - ⏳ CPU-optimalisering verifisert på Gitea-VM — Fase 6.5 gjenstår
## OPPDATERINGSLOGG ## OPPDATERINGSLOGG
| Dato | Fase | Handling | | Dato | Fase | Handling |
|---|---|---| |---|---|---|
| 2026-07-21 | FASE 4 | Full smoke test grønn, alle 8 tools OK | | 2026-07-21 | FASE 4 | Full smoke test grønn, alle 8 tools OK |
| 2026-07-21 | FASE 5 | Blueprint frosset, FASE 5 lukket | | 2026-07-21 | FASE 5 | Blueprint frosset, FASE 5 lukket |
| 2026-07-21 | FASE 6 | FASE 6 åpnet — CPU-optimalisering neste | | 2026-07-21 | FASE 6 | FASE 6 åpnet — CPU-optimalisering |
| 2026-07-21 | FASE 6.1 | Kaldstart/keep_alive: gemma3=117s, qwen=71s, varme kall ~2s, keep_alive=-1 bevist effektiv | | 2026-07-21 | FASE 6.1 | Kaldstart/keep_alive: gemma3=117s, qwen=71s, keep_alive=-1 bevist |
| 2026-07-21 | FASE 6.2 | Resident strategi låst: MAX=2 + KEEP_ALIVE=-1 systemd, begge Forever, RAM OK | | 2026-07-21 | FASE 6.2 | Resident strategi: MAX=2 + KEEP_ALIVE=-1 systemd, begge Forever |
| 2026-07-21 | FASE 6.3 | Parameter-matrise låst: num_ctx=2048, num_batch=256 (default), OLLAMA_NUM_THREADS ikke satt. Maskintak: 5.0 tok/s | | 2026-07-21 | FASE 6.3 | Parameter-matrise: num_ctx=2048, num_batch=256, NUM_THREADS ikke satt |
| 2026-07-21 | FASE 6.4 | Emma MCoT end-to-end: varm turn=42.51s (5 kall), boot-warming nødvendig, RAM OK |