Skip to content

v0.4.5 — Cold-Start-Fix

Choose a tag to compare

@dibi73 dibi73 released this 04 May 20:30
· 13 commits to main since this release
df70bd2

Cold-Start-Fix: Add-on wirkt nicht mehr "tot" beim Container-Start

Auf einer frisch gestarteten HA-Instanz wirkte das Add-on nach Container-Restart bis zu ~30 s wie eingefroren — der Ingress-Tab lieferte 502, obwohl der Container "running" war. Ursache: das sentence-transformers-Modell (~10–30 s auf aarch64) und das Anlegen der Qdrant-Collection liefen synchron im FastAPI-Lifespan, blockierten damit uvicorn vom Port-Bind, und HA-Ingress proxied auf einen nicht-gebundenen Port.

Behoben

  • app/main.py trennt Initialisierung in zwei Phasen: leichte Services (LLM-Client, SQLite-Conversation-Store) bleiben im Lifespan-Critical-Path; Embedder, Qdrant-Collection, Watcher und der Initial-Reconcile wandern in einen einzelnen Background-Task. Ein neues StartupState(phase, error)-Objekt auf app.state.startup trackt den Fortschritt: loading_embedder → creating_collection → indexing → ready. Lifespan yieldet jetzt in <1 s, uvicorn bindet Port 8000 sofort, die SPA lädt direkt.
  • app/api.py — /api/status returnt während des Background-Tasks {status: "initializing", phase: ...}, bei einem Crash {status: "error", error: ...}, und in fully-ready-State weiterhin das gewohnte {status: "ok"}-Schema (Test-Apps ohne StartupState sind unverändert). 503er auf /api/query und /api/reindex liefern jetzt einen Retry-After: 5-Header.
  • app/ui/app.js pollt /api/status alle 1.5 s solange die Phase initialisierend ist, surface den jeweiligen Phasentext im Index-Pill ("Lädt Modell …" / "Bereitet Index vor …" / "Indiziert (N) …"), und sperrt den Composer mit erklärendem Placeholder bis zur Phase indexing. Ab indexing ist die Eingabe wieder offen — Queries laufen gegen den teilweise befüllten Index, gleiche Semantik wie der Background-Reconcile in v0.4.4.

Hinweise

  • 95 Tests grün (vorher 91). Vier neue Tests decken die initializing / failed / ready-Branches und den Retry-After-Header ab.
  • Nicht via echtem docker run validiert: das CI baut weiterhin nur das Image, startet keinen Container — gleiche Lücke wie bei den v0.4.1–v0.4.3-Hotfix-Cycles. Falls der Cold-Start auf realer HA-Supervisor-Instanz regrediert, kommt ein v0.4.6-Hotfix hinterher.