# kb-query secrets + host-local binds — copy to .env (gitignored) next to # docker-compose.yml and fill in real values. Never commit .env. # LAN IP of PIHA. The published port (8230) binds ONLY to this interface — # never 0.0.0.0. Verify after host rebuilds: ip -4 addr. LAN_BIND_IP=192.168.31.5 # asyncpg DSN for kb-postgres@PIHA. kb-query runs in its own Docker network # (separate compose project from kb-postgres), so it reaches kb-postgres's # published port over the host's LAN interface, not "localhost" — same # reasoning as paperless-worker@SOLARIA reaching paperless@PIHA over LAN. KB_DSN=postgresql://kb:CHANGE-ME@192.168.31.5:5433/kb # Primary embed backend: Ollama @ SOLARIA (GPU, over Tailscale MagicDNS — # same trick as llm-gateway's OLLAMA_URL). Optional: defaults to this value. # EMBED_PRIMARY_URL=http://solaria:11434 # Fallback embed backend: ollama-piha on this host (services/ollama-piha/), # reached over PIHA's LAN interface (same pattern as KB_DSN above). SOLARIA is # powered off ~16 h/day — without this, /search is dead the whole time. Leave # unset/empty to disable the fallback leg entirely. EMBED_FALLBACK_URL=http://192.168.31.5:11434 # Backend labels used in logs and the /search "embed_backend" response field. # Optional: defaults solaria / piha. # EMBED_PRIMARY_NAME=solaria # EMBED_FALLBACK_NAME=piha # Fallback state machine tuning (plan §2 D2). Optional; defaults shown. # EMBED_HEALTH_TTL_S=30 # how long an up/down verdict on SOLARIA is cached # EMBED_HEALTH_TIMEOUT_S=1.5 # /api/tags probe timeout # EMBED_PRIMARY_TIMEOUT_S=3 # hard timeout for a primary embed call # Embedding model kb-query enforces as a startup invariant (plan §2 decision # 2) against document_chunk.model / document_summary.embedding_model. # Optional: defaults to bge-m3. # EMBED_MODEL=bge-m3 # document_summary.model kb-query's cascade path pre-filters on (the # compilation track, plan §2 D3). Optional: defaults to claude-haiku-4-5. # SUMMARY_MODEL=claude-haiku-4-5