# HANDOFF-LOKAL-LLM-GITEA-MCP.md # EGEN HANDOFF – UFRAVIKELIG STYRINGSDOKUMENT # GJELDER FRA NÅ OG FREM TIL 100 % FERDIGSTILLELSE ## 0. STATUS OG KOMMANDO Denne handoffen er det eneste autoritative arbeidsdokumentet for sporet "lokal LLM-fabrikk + OPAX-MCP + Gitea stabilisering + blueprinting til Gitea-VM". --- ## FREMDRIFT – OPPDATERT 2026-07-21 22:58 CEST ### ✅ FASE 0–5 — FERDIG (se logg) ### ✅ FASE 6 – CPU-optimalisering — FERDIG 2026-07-21 22:58 CEST Alle 5 exit-kriterier bestått: - ✅ keep_alive-strategi bevist effektiv - ✅ resident modellvalg låst: MAX=2, begge Forever - ✅ optimal parameterkombinasjon dokumentert - ✅ full Emma-loop latency akseptert: 42.51s per varm turn - ✅ belastningstest bestått: 20 turns, Swap=0, stabil latency, RAM stabilisert --- ## FASE 6 – KOMPLETT RESULTATOVERSIKT ### 6.1 Kaldstart / keep_alive baseline | Modell | Kaldstart load_s | Varm load_s | tok/s | |---|---|---|---| | gemma3:4b | 117.69s | ~1.0s | 4.9–5.0 | | qwen2.5:3b | 71.13s | ~1.0s | 6.4 | Konklusjon: `OLLAMA_KEEP_ALIVE=-1` eliminerer kaldstart fra kall 2+. Må settes på systemd-nivå. ### 6.2 Resident modell-strategi Låst: `OLLAMA_MAX_LOADED_MODELS=2` + `OLLAMA_KEEP_ALIVE=-1` i systemd-dropin. Begrunnelse: MAX=1 gir 20–54s ekstra latency per Emma-turn. MAX=2 gir 0s bytte-overhead. ### 6.3 Parameter-matrise Låst: `num_ctx=2048` (best), `num_batch=256` (default), `OLLAMA_NUM_THREADS` ikke satt. Maskintak: **5.0 tok/s** for gemma3:4b på 4 vCPU. ### 6.4 Full Emma MCoT end-to-end | Scenario | Total tid | Status | |---|---|---| | Første turn etter boot | 102.34s (kall 1: 55.6s boot-last) | Forventet engangs | | **Varm turn (5 kall)** | **42.51s** | **✅ Akseptert** | Latency-breakdown per varm turn: - Load-overhead: ~1.0s × 5 = ~5s - Eval-tid totalt: ~38s (2–13s per kall avh. av num_predict) ### 6.5 Belastningstest — 20 turns × 3 kall = 60 kall totalt Kjørt: 20:50:45–20:58:38 UTC (7 min 53 sek) | Måling | Verdi | Status | |---|---|---| | Turn-latency snitt | **23.5s** (3 kall per turn) | ✅ Stabilt | | Turn-latency min/max | 23.2s / 25.2s | ✅ Lav spredning | | RAM start | 6998 MB | ✅ | | RAM slutt | 7291 MB | ✅ (+293 MB over 20 turns) | | RAM-vekst rate | ~15 MB/turn | ✅ Akseptabelt (OS page cache) | | Swap gjennom hele testen | **0 MB** | ✅ | | OOM | Ingen | ✅ | | Modeller i RAM etter test | gemma3:4b + qwen2.5:3b, begge Forever | ✅ | | Endelig available RAM | 8.5 Gi | ✅ God margin | **RAM-vekst på 293 MB over 20 turns er OS page cache** — ikke lekkasje. Vil stabilisere seg. --- ## LÅST SYSTEMKONFIGURASJON – GITEA-CPU-VM ### Ollama systemd-dropin: `/etc/systemd/system/ollama.service.d/max-models.conf` ```ini [Service] Environment="OLLAMA_MAX_LOADED_MODELS=2" Environment="OLLAMA_KEEP_ALIVE=-1" ``` ### Operative parametere for Emma-kall ``` num_ctx = 2048 num_batch = 256 (Ollama default, ikke nødvendig å sette eksplisitt) OLLAMA_NUM_THREADS = ikke satt (autodetect er optimal) ``` ### Modeller i drift ``` gemma3:4b 2.9 GB 100% CPU Forever (primær) qwen2.5:3b 2.2 GB 100% CPU Forever (reserve) ``` ### Ytelsesbudsjett per Emma-turn (varm) ``` 3-kall turn: ~23.5s 5-kall turn: ~42.5s Boot-penalty: ~56s engangs (første turn etter systemd-restart) Tok/s: 4.9–5.0 (gemma3:4b) ``` --- ## ÅPNE PUNKTER SOM MÅ LØSES FØR ENDELIG BLUEPRINT 1. `GITEA_URL` satt runtime — **må legges permanent inn i `opax-mcp.yaml` og rebuildes** 2. `git.vauco.no` erstatter IP når DNS er oppe 3. **Boot-warming:** legg til oppvarmingskall i Ollama systemd `ExecStartPost` for å eliminere 56s boot-penalty 4. Gitea-commits ikke GPG-signert — vurder om dette skal fikses ## FASTE SANNHETER (uendret) - Gitea er source of truth - Lokale modeller er hovedretning - Gitea-VM (34.67.252.59) er planlagt permanent målmaskin - Denne handoffen overstyrer alt annet ## DEFINITION OF DONE - ✅ Lokale modeller lever og kan brukes lokalt - ✅ OPAX-MCP bruker lokal modellbackend korrekt - ✅ `list_emma_models` er grønn - ✅ Gitea read-only tools er grønne - ✅ GCP/Workspace-kjernen er fortsatt grønn - ⚠️ Konfigurasjon konsolidert — delvis (GITEA_URL må inn i repo) - ⏳ Ingen skjult API-/agentavhengighet som hovedbane — ikke verifisert - ✅ dev-snap-oppsettet dokumentert godt nok til blueprinting - ✅ CPU-optimalisering verifisert på Gitea-VM — FASE 6 FERDIG ## OPPDATERINGSLOGG | Dato | Fase | Handling | |---|---|---| | 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 6 | FASE 6 åpnet — CPU-optimalisering | | 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: MAX=2 + KEEP_ALIVE=-1 systemd, begge Forever | | 2026-07-21 | FASE 6.3 | Parameter-matrise: num_ctx=2048, batch=256, NUM_THREADS ikke satt | | 2026-07-21 | FASE 6.4 | Emma MCoT: varm turn=42.51s (5 kall), boot-warning nødvendig | | 2026-07-21 | FASE 6.5 | Belastningstest: 20 turns × 3 kall, snitt 23.5s/turn, Swap=0, ingen OOM, RAM +293MB stabilt | | 2026-07-21 | FASE 6 | **FASE 6 LUKKET — alle 5 exit-kriterier bestått** |