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.
How it works
Section titled “How it works”- Define sources — declare typed embedding sources under
/workspace/.q15/embed/sources.json. Each source specifies acollection,source_type, andpath. - Sync —
embed_syncindexes the source content into Qdrant, storing both dense Gemini vectors and Qdrant-generated BM25 sparse vectors. - Search —
embed_searchruns hybrid dense + sparse search by default, combining semantic recall with lexical precision.
Collections
Section titled “Collections”| 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 |
Source types
Section titled “Source types”markdown_tree— scans a directory tree of markdown filesmarkdown_file— ingests a single markdown filechunked_markdown_tree— for pre-chunked markdown corpora (e.g.,/workspace/library/<author>/<work>/chunks). Each markdown file is one embedding unit, and siblingmeta.ymlfiles provide metadata.
Scanner behavior comes from source_type, never from the collection name.
Configuration
Section titled “Configuration”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: 768Omit the embeddings block entirely to disable all embedding tools.
Search modes
Section titled “Search modes”- Hybrid (default) — dense Gemini vectors + Qdrant BM25 sparse vectors
- Dense — Gemini-only semantic search
- Sparse — BM25 lexical search only (no embedding call needed)