Search & embeddings stack

Search & embeddings stack An architecture diagram generated by Archify. findata/ vault · Architecture component · 1,227 docs findata/ vault 1,227 docs entities rows · Architecture component · ~1,075 companies entities rows ~1,075 companies doc/ corpus · Architecture component · 51 files doc/ corpus 51 files helpers · tests · Architecture component · script cohort helpers · tests script cohort local_embedder.py · Architecture component · bge-small · 384-dim local_embedder.py bge-small · 384-dim memory/embed_store.db · Architecture component · sha256-keyed cache memory/embed_store.db sha256-keyed cache note_search · Architecture component · FTS5 + vec0 note_search FTS5 + vec0 company_embeddings · Architecture component · entity vectors company_embeddings entity vectors doc_search · Architecture component · FTS5 + embeds doc_search FTS5 + embeds script_search · Architecture component · FTS5 + embeds script_search FTS5 + embeds hybrid query seam · Architecture component · vec0 → FlatKNN → cosine hybrid query seam vec0 → FlatKNN → cosine search UI · tickers · Architecture component · /api/search search UI · tickers /api/search pooled cache · vec0 mirror rebuild_note_search --maint / populate rebuild_doc_search rebuild_script_search hybrid RRF answers Legend Frontend Backend Database

One embedder

  • • bge-small-en-v1.5, 384-dim, llama.cpp, fully offline
  • • BGE prefix rule lives only in local_embedder.py
  • • 4-worker pinned pool (unpinned collapses ~24x)

Pooled cache economics

  • • embed_store.db keyed (sha256, model, source)
  • • warm refresh: ~0.8 s notes, ≈0 embeds companies
  • • cache excluded from snapshots; zstd twins recover

Query paths

  • • /api/search hybrid = BM25 + cosine, fused RRF
  • • vss_match switches on the table's model label
  • • purity guard: no mixed-model writes, ever
  • • doc/script search answer their own CLIs