Adds a private http() helper that wraps Http::timeout() with
conditional withoutVerifying() for self-signed .lan certs behind
Traefik. Boot singleton auto-detects .lan URLs at construction.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Make embedding model swappable via BRAIN_EMBEDDING_MODEL env var.
Switch default from nomic-embed-text to embeddinggemma (Gemma 3
based, 2x better cluster separation in benchmarks).
Default Ollama URL now points to ollama.lan (Linux homelab GPU).
Co-Authored-By: Virgil <virgil@lethean.io>
- Move BrainMemory::create() inside BrainService::remember() for
full atomicity (DB + Qdrant in single transaction)
- Add forWorkspace() scope to recall() MariaDB query (tenant isolation)
- Wrap forget() in DB::transaction (MariaDB first, then Qdrant)
- Check qdrantDelete() response and log warnings on failure
- Validate embed() response is a non-empty array
Co-Authored-By: Virgil <virgil@lethean.io>