Skip to content

Embeddings & Search

When configured, q15 can build and search embedding collections over your own content. This is powered by Qdrant for vector storage and Gemini for embeddings.

  1. Define sources — declare typed embedding sources under /workspace/.q15/embed/sources.json. Each source specifies a collection, source_type, and path.
  2. Syncembed_sync indexes the source content into Qdrant, storing both dense Gemini vectors and Qdrant-generated BM25 sparse vectors.
  3. Searchembed_search runs hybrid dense + sparse search by default, combining semantic recall with lexical precision.
Collection Purpose
library Books, articles, and documents from your personal library
zettelkasten Atomic knowledge notes from the zettelkasten
semantic Extracted semantic memory content
core Core identity and reference material
  • markdown_tree — scans a directory tree of markdown files
  • markdown_file — ingests a single markdown file
  • chunked_markdown_tree — for pre-chunked markdown corpora (e.g., /workspace/library/<author>/<work>/chunks). Each markdown file is one embedding unit, and sibling meta.yml files provide metadata.

Scanner behavior comes from source_type, never from the collection name.

Embeddings are optional. To enable them, add to the agent config:

agent:
tools:
embeddings:
qdrant_url_env: Q15_QDRANT_URL
gemini_api_key_env: Q15_GEMINI_API_KEY
model: gemini-embedding-2
dimensions: 768

Omit the embeddings block entirely to disable all embedding tools.

  • Hybrid (default) — dense Gemini vectors + Qdrant BM25 sparse vectors
  • Dense — Gemini-only semantic search
  • Sparse — BM25 lexical search only (no embedding call needed)