Some checks are pending
Check Python Version Consistency / Check Python Version (push) Waiting to run
358 lines
13 KiB
Markdown
358 lines
13 KiB
Markdown
# 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-22 03:55 CEST
|
||
|
||
### ✅ FASE 0–5 — FERDIG
|
||
### ✅ FASE 6 – CPU-optimalisering — FERDIG
|
||
### ✅ FASE 6-TILLEGG – Boot-warming — FERDIG
|
||
### ✅ DNS – NS-bytte utført — FERDIG 2026-07-21 23:44 CEST
|
||
### ✅ OPAX-MCP – GITEA_URL permanent + deploy — FERDIG 2026-07-21 23:53 CEST
|
||
### ✅ SMOKE-TEST – Alle 37 tools — FERDIG 2026-07-22 00:25 CEST
|
||
### ✅ FASE 6.5 – VM-oppgradering + modellarkitektur — VERIFISERT 2026-07-22
|
||
### 🟡 FASE 7 – 14B-validering utført, arkitektur justeres — PÅGÅR
|
||
### ⏳ GPG-SIGNERING – Commits verified — PÅGÅR
|
||
### ⏳ FASE 8 – Backup / snapshot-strategi — PLANLAGT
|
||
|
||
---
|
||
|
||
## FASE 6.5 — OPPDATERT LOKAL LLM-STACK (2026-07-22)
|
||
|
||
### Bekreftet drift
|
||
- `gitea-cpu-vm` er oppe i `us-central1-b`
|
||
- VM kjører nå på `e2-highmem-4` (4 vCPU / 32 GB RAM)
|
||
- Statisk IP beholdt: `34.170.51.84`
|
||
- Gitea svarer på port `3000`
|
||
- Ollama svarer på port `11434`
|
||
|
||
### Bekreftet ressursstatus
|
||
- Disk: ca. 99 GB total
|
||
- Ny modellstack etter 14B-nedlasting: ca. 29 GB modeller totalt
|
||
- Systemet har fortsatt god diskmargin, men CPU er nå den reelle begrensningen
|
||
|
||
### Faktisk modeller lokalt per 2026-07-22
|
||
- `gemma3:4b`
|
||
- `gemma3:12b`
|
||
- `qwen2.5:3b`
|
||
- `qwen2.5:14b`
|
||
- `qwen2.5-coder:14b`
|
||
|
||
### Verifisert ytelsesfunn
|
||
- `gemma3:4b` holder ca. `4.9–5.0 tok/s` varm og fungerer interaktivt
|
||
- `qwen2.5:14b` målte ca. `1.4 tok/s` varm på faktisk VM
|
||
- Kort prompt ga ca. `249s` eval-duration på varm modell ved `stream: false`
|
||
- Konklusjon: `qwen2.5:14b` er for treg som standard interaktiv agent på nåværende CPU-VM
|
||
|
||
### Revidert anbefalt modellarkitektur
|
||
- **Frontmodell:** `gemma3:4b`
|
||
- Brukes for raske svar, enkel resonnering og billig default
|
||
- **Lett tool-/agentmodell:** `qwen2.5:3b`
|
||
- Brukes for tool calling som må være responsivt nok i praksis
|
||
- **Neste kandidat for mellomlag:** `qwen2.5:7b`
|
||
- Skal testes som mulig erstatning for `qwen2.5:14b` som standard Qwen-lag
|
||
- **Kode-/repo batch-modell:** `qwen2.5-coder:14b`
|
||
- Beholdes for repo-forståelse, patching, refaktorering og tyngre asynkrone kodeoppgaver
|
||
- **Ikke anbefalt nå:** `qwen2.5:14b` som interaktiv standardmodell
|
||
- For treg på CPU til primær bruk
|
||
- **Ikke anbefalt nå:** `gemma3:27b`
|
||
- Uaktuell før videre CPU-/ytelsesløft; forventes tregere enn 14B-laget
|
||
|
||
### Operativ ruting
|
||
1. Start med `gemma3:4b`
|
||
2. Eskaler til `qwen2.5:3b` når oppgaven trenger tools og respons fortsatt må være praktisk
|
||
3. Bruk `qwen2.5-coder:14b` kun når oppgaven er tydelig kode-/repo-orientert og kan tåle høy latency
|
||
4. Test `qwen2.5:7b` som mulig nytt mellomlag før eventuell fjerning av `qwen2.5:14b`
|
||
5. Ikke last ned `gemma3:27b` nå
|
||
|
||
### Viktige vurderinger
|
||
- CPU, ikke RAM eller disk, er nå flaskehalsen
|
||
- `qwen2.5:14b` ga svak praktisk interaktiv ytelse til tross for vellykket installasjon
|
||
- `qwen2.5-coder:14b` beholdes foreløpig fordi use casen er batch/dev-assistanse, ikke chat-latency
|
||
- `qwen2.5:7b` er neste rasjonelle kandidat for bedre balanse mellom kvalitet og fart
|
||
- `qwen2.5-coder:32b` og `gemma3:27b` utsettes
|
||
|
||
### Neste konkrete steg
|
||
- Test / vurder:
|
||
- `ollama rm qwen2.5:14b`
|
||
- `ollama pull qwen2.5:7b`
|
||
- Test deretter:
|
||
- enkel chat-latency
|
||
- tool calling
|
||
- RAM- og diskpåvirkning
|
||
- om `qwen2.5:7b` kan overta rollen som standard Qwen-lag
|
||
|
||
```bash
|
||
# Foreslått neste endring
|
||
ollama rm qwen2.5:14b
|
||
ollama pull qwen2.5:7b
|
||
|
||
# Bekreft etterpå
|
||
curl http://localhost:11434/api/tags
|
||
free -h
|
||
du -sh /usr/share/ollama/.ollama/models
|
||
```
|
||
|
||
---
|
||
|
||
## LÅST SYSTEMKONFIGURASJON – GITEA-CPU-VM (komplett)
|
||
|
||
### VM-spesifikasjon (oppdatert 2026-07-22)
|
||
- **Maskintype:** `e2-highmem-4` (4 vCPU / 32 GB RAM)
|
||
- **Zone:** `us-central1-b`
|
||
- **Statisk IP:** `34.170.51.84`
|
||
|
||
### Systemd-dropins
|
||
```
|
||
override.conf — OLLAMA_HOST=0.0.0.0:11434
|
||
max-models.conf — MAX_LOADED_MODELS=2 + KEEP_ALIVE=-1
|
||
warmup.conf — ExecStartPost=/usr/local/bin/ollama-warmup.sh
|
||
```
|
||
|
||
### Operative parametere for Emma-kall
|
||
```
|
||
num_ctx = 2048
|
||
num_batch = 256
|
||
OLLAMA_NUM_THREADS = ikke satt (autodetect)
|
||
```
|
||
|
||
### Ytelsesbudsjett per Emma-turn (varm)
|
||
```
|
||
3-kall turn: ~23.5s
|
||
5-kall turn: ~42.5s
|
||
Boot-penalty: ~0s (warmup-skript)
|
||
Tok/s: 4.9–5.0 (gemma3:4b)
|
||
```
|
||
|
||
### Gitea-dataplassering
|
||
```
|
||
/opt/gitea/data/repositories/chris/OSVauco.git/ ← Bare repo
|
||
/opt/gitea/data/gitea.db ← SQLite metadata
|
||
/opt/gitea/data/custom/conf/app.ini ← Konfig
|
||
```
|
||
|
||
---
|
||
|
||
## OPAX-MCP KONFIGURASJON – LÅST
|
||
|
||
| Variabel | Verdi |
|
||
|---|---|
|
||
| `GITEA_URL` | `http://34.67.252.59:3000` |
|
||
| `OLLAMA_BASE_URL` | `http://34.67.252.59:11434` |
|
||
| `EMMA_MODEL` | `gemma3:4b` |
|
||
| `EMMA_FAST_MODEL` | `gemma3:4b` |
|
||
| `EMMA_LIGHT_MODEL` | `qwen2.5:3b` |
|
||
| `OSVAUCO_AGENT_URL` | `https://osvauco-agent-357036551735.us-central1.run.app` |
|
||
|
||
Deploy verifisert: `get_connector_status` → `live`, `gitea: online`, `tool_count: 37`
|
||
|
||
---
|
||
|
||
## DNS – FULLFØRT 2026-07-21
|
||
|
||
NS-bytte: Proisp → Google Cloud DNS **23:44 CEST**
|
||
|
||
| Record | Type | Verdi |
|
||
|---|---|---|
|
||
| `vauco.no.` | A | `34.98.77.173` (LB) |
|
||
| `www.vauco.no.` | A | `34.98.77.173` (LB) |
|
||
| `opax.vauco.no.` | A | `34.98.77.173` (LB) |
|
||
| `git.vauco.no.` | A | `34.67.252.59` |
|
||
| MX / SPF / DKIM / DMARC | TXT/MX | Google Workspace komplett |
|
||
|
||
---
|
||
|
||
## SMOKE-TEST – FULLFØRT 2026-07-22 00:25 CEST
|
||
|
||
| Kategori | Status | Merknad |
|
||
|---|---|---|
|
||
| ✅ Ollama / Emma | Grønn | gemma3:4b varm, 14s respons |
|
||
| ✅ Connector | Grønn | live, 37 tools |
|
||
| ✅ Gitea read + write | Grønn | Commits og push OK |
|
||
| ✅ GCP / Cloud Run | Grønn | osvauco-agent Ready, rev 00695 |
|
||
| ✅ Workspace / Gmail | Grønn | 3 brukere, kalender, e-post OK |
|
||
| ✅ Terminal / Billing | Grønn | Billing dramatisk ned fra 5. juli |
|
||
| 🟡 Jason | Grønn m/merknad | Kjører gemini-2.5-flash (ikke Pro) |
|
||
|
||
### Smoke-test observasjoner
|
||
- `qwen2.5:3b` har tool-calling capabilities — `gemma3:4b` har det ikke
|
||
- GCE `list_instances` tom — ikke kritisk, Cloud Console på mobil
|
||
- Jason `mode`-parameter gir 400 — bruk kun `prompt`
|
||
- GPG-signering pågår — commits fortsatt unverified
|
||
|
||
---
|
||
|
||
## FASE 7 – LOKAL HJERNE / DERIVAT-MODELL (pågår)
|
||
|
||
### Mål
|
||
Erstatte stor API-modell (Gemini/Claude/Perplexity) med lokal modell som hjerne i OPAX-arkitekturen. Redusere API-avhengighet på sikt.
|
||
|
||
### Arkitektur (nå vs mål)
|
||
```
|
||
NÅ:
|
||
Perplexity/Gemini ← Hjerne (stor API-modell)
|
||
↓ tool calls
|
||
OPAX-MCP
|
||
↓
|
||
Emma gemma3:4b ← Lokal inferens (svak)
|
||
|
||
MÅL:
|
||
Lokal stor modell ← Hjerne (lokal, gratis)
|
||
↓ tool calls
|
||
OPAX-MCP
|
||
↓
|
||
Emma gemma3:4b ← Lokal inferens (rask)
|
||
```
|
||
|
||
### Kandidatmodeller for e2-highmem-4 (32 GB RAM) — oppdatert 2026-07-22 03:55
|
||
|
||
| Modell | RAM | Tok/s CPU | Agentevne | Vurdering |
|
||
|---|---|---|---|---|
|
||
| `gemma3:4b` (nå) | 2.9 GB | ~5 | Svak | Front/hurtig default |
|
||
| `qwen2.5:3b` | ~2.0–2.5 GB | ~3–4 | God | **Beste raske tool-kandidat nå** |
|
||
| `gemma3:12b` | ~8 GB | ~1.5–2 | God | Allsidig, men ikke tool-modell |
|
||
| `qwen2.5:7b` | ~5.5–6 GB | forventet ~2.5–3 | God | **Neste kandidat som mellomlag** |
|
||
| `qwen2.5:14b` | ~9 GB | målt ~1.4 | Sterk | **For treg som interaktiv agent** |
|
||
| `qwen2.5-coder:14b` | ~9 GB | forventet ~1.4 | Kode-sterk | Batch / async kodebruk |
|
||
| `gemma3:27b` | ~17 GB | forventet <1 | Tilnærmet god | Ikke aktuell nå |
|
||
| `qwen2.5-coder:32b` | ~20 GB | <1 | Svært sterk | Utsatt — for tung |
|
||
|
||
### Validerte funn
|
||
- `qwen2.5:14b` installert og verifisert
|
||
- Varm enkel chat-test ga ca. `249.3s` eval-duration og `1.4 tok/s`
|
||
- Resultatet vurderes som for tregt for interaktiv standardbruk
|
||
- Dette flytter `qwen2.5:14b` fra planlagt standardmodell til mulig batch-/asynkronmodell
|
||
- `qwen2.5:7b` er neste kandidat som må testes før modellstack fryses
|
||
|
||
### Exit-kriterier Fase 7
|
||
- [x] `qwen2.5:14b` installert og testet
|
||
- [ ] `qwen2.5:7b` installert og testet
|
||
- [ ] Beslutning tatt: fjern eller behold `qwen2.5:14b`
|
||
- [ ] `qwen2.5-coder:14b` testet på konkret kode-/repo-oppgave
|
||
- [ ] Ytelsesmåling: RAM-bruk, swap=0
|
||
- [ ] Endelig ruting besluttet for fast / light / coder / batch
|
||
- [ ] GEMINI.md-lignende systemd-prompt/konfig for Emma laget
|
||
|
||
### Derivat-strategi
|
||
Emma skal få eget identitetsdokument (tilsvarende GEMINI.md for Jason) med:
|
||
- Personlighet og tone
|
||
- Arbeidsregler og prioriteringer
|
||
- Tool-bruksprinsipper
|
||
- Vauco OS-kontekst
|
||
|
||
---
|
||
|
||
## FASE 8 – BACKUP / SNAPSHOT-STRATEGI (planlagt)
|
||
|
||
### Mål
|
||
Sikre at Gitea-CPU-VM (`34.67.252.59`) aldri er single point of failure for source of truth.
|
||
|
||
### Strategi: Daglig GCP Disk Snapshot
|
||
|
||
```
|
||
Kilde: Gitea-CPU-VM persistent disk
|
||
Frekvens: Daglig (02:00 CEST)
|
||
Bevaring: 7 snapshots (rullerende — siste 7 dager)
|
||
Kostnad: ~$0.026/GB/mnd — 50 GB disk = ~$1.30/mnd
|
||
```
|
||
|
||
### Implementasjon
|
||
|
||
```bash
|
||
# Opprett snapshot-policy
|
||
gcloud compute resource-policies create snapshot-schedule gitea-daily-backup \
|
||
--region=us-central1 \
|
||
--max-retention-days=7 \
|
||
--on-source-disk-delete=keep-auto-snapshots \
|
||
--daily-schedule \
|
||
--start-time=00:00 \
|
||
--storage-location=us-central1
|
||
|
||
# Koble policy til disk
|
||
gcloud compute disks add-resource-policies gitea-cpu-vm \
|
||
--resource-policies=gitea-daily-backup \
|
||
--zone=us-central1-b
|
||
```
|
||
|
||
### Hva snapshots dekker
|
||
- ✅ `/opt/gitea/data/repositories/` — alle git-objekter
|
||
- ✅ `/opt/gitea/data/gitea.db` — brukere, tokens, metadata
|
||
- ✅ `/opt/gitea/data/custom/conf/app.ini` — konfig
|
||
- ✅ Ollama-modeller (`/usr/share/ollama/`)
|
||
- ✅ Systemd-dropins og warmup-skript
|
||
|
||
### Restore-prosedyre (ved VM-tap)
|
||
```bash
|
||
# 1. Opprett ny disk fra snapshot
|
||
gcloud compute disks create gitea-restore \
|
||
--source-snapshot=<snapshot-name> \
|
||
--zone=us-central1-b
|
||
|
||
# 2. Koble til ny VM eller eksisterende
|
||
# 3. Gitea starter automatisk — alt er intakt
|
||
```
|
||
|
||
### Exit-kriterier Fase 8
|
||
- [ ] Snapshot-policy opprettet og koblet til disk
|
||
- [ ] Første snapshot verifisert i GCP Console
|
||
- [ ] Restore-prosedyre testet (restore til tmp-disk)
|
||
- [ ] Kostnad bekreftet (~$1.30/mnd)
|
||
|
||
---
|
||
|
||
## ÅPNE PUNKTER
|
||
1. GPG-signering — få commits verified (pågår)
|
||
2. `git.vauco.no` — verifiser propagering
|
||
3. Test `qwen2.5:7b` som nytt mellomlag
|
||
4. Beslutt om `qwen2.5:14b` skal fjernes etter 7B-test
|
||
5. Test `qwen2.5-coder:14b` på konkret kode-/repo-oppgave
|
||
6. Mål RAM/swap under modell-last
|
||
7. Emma derivat-dokument (tilsvarende GEMINI.md)
|
||
8. Fase 8: Snapshot-policy aktiveres
|
||
9. Gitea passord byttes (eksponert i chat)
|
||
|
||
## FASTE SANNHETER
|
||
- Gitea er source of truth
|
||
- Lokale modeller er hovedretning — mål er å fase ut API-avhengighet
|
||
- Gitea-VM (34.67.252.59) er permanent målmaskin
|
||
- Dev-snap (34.170.51.84) er Jason sin arbeidsstasjon — kan ikke stenges før lokal hjerne er verifisert
|
||
- Denne handoffen overstyrer alt annet
|
||
- CPU er nå primær flaskehals for tyngre lokale modeller på denne VM-en
|
||
|
||
## 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 — GITEA_URL permanent + deployed
|
||
- ✅ Boot-warming verifisert
|
||
- ✅ DNS migrert til Google Cloud DNS
|
||
- ✅ Smoke-test alle 37 tools — FERDIG
|
||
- ✅ VM oppgradert til e2-highmem-4 (32 GB RAM) — FERDIG
|
||
- ✅ `qwen2.5:14b` installert og ytelsestestet — FERDIG
|
||
- ⏳ `git.vauco.no` live — propagering pågår
|
||
- ⏳ GPG-signering verified — pågår
|
||
- ⏳ `qwen2.5:7b` testet og vurdert — planlagt
|
||
- ⏳ Endelig mellomlag valgt (`qwen2.5:7b` vs behold `qwen2.5:14b`) — planlagt
|
||
- ⏳ `qwen2.5-coder:14b` verifisert i konkret kodeflyt — planlagt
|
||
- ⏳ Fase 7: lokal hjerne verifisert — pågår
|
||
- ⏳ Fase 8: daglig snapshot-backup — planlagt
|
||
|
||
## OPPDATERINGSLOGG
|
||
| Dato | Handling |
|
||
|---|---|
|
||
| 2026-07-21 | FASE 4–6: CPU-optimalisering, boot-warming fullført |
|
||
| 2026-07-21 23:44 | DNS: NS-bytte utført hos Proisp |
|
||
| 2026-07-21 23:53 | OPAX-MCP: GITEA_URL + OLLAMA_BASE_URL → 34.67.252.59, deployed |
|
||
| 2026-07-22 00:05 | Smoke-test plan klar, Fase 7 (lokal hjerne) lagt inn |
|
||
| 2026-07-22 00:25 | Smoke-test fullført — alle kategorier grønne |
|
||
| 2026-07-22 00:55 | Fase 8 (backup/snapshot) lagt inn, GPG-signering pågår |
|
||
| 2026-07-22 03:29 | FASE 6.5 lagt inn: e2-highmem-4 verifisert, ny modellarkitektur (Gemma4b → Qwen14b → Qwen-coder-14b → Gemma27b), neste steg: pull qwen2.5:14b + qwen2.5-coder:14b |
|
||
| 2026-07-22 03:55 | Handoff oppdatert etter 14B-validering: qwen2.5:14b målt til ~1.4 tok/s varm og vurdert for treg som interaktiv standardmodell; qwen2.5:7b satt som neste kandidat; gemma3:27b og coder32b utsatt |
|