v0.3.0
What's New
Page-Level Reranking
The reranker now receives assembled page documents — all matching chunks concatenated in document order — instead of individual chunk snippets. This gives the reranker a holistic view of each page's relevance, significantly improving result quality. Full chunk markdown (up to 4000 chars) is stored at index time to support this.
Jina AI Embeddings & Reranking
Replaced OpenAI with Jina AI as the default (and only) embedding provider. Uses jina-embeddings-v3 with task-specific LoRA adapters (retrieval.passage for indexing, retrieval.query for search). The reranker (jina-reranker-v2-base-multilingual) shares the same API key — one key powers everything.
Link-Discovery Crawling for Build Mode
Enable source.build.discover: true to automatically find pages by crawling internal links from seed URLs. Useful when dynamic routes have many parameter values that are impractical to enumerate. Respects maxPages and maxDepth limits.
Minimum Score Filtering
New ranking.minScore option filters out low-relevance results before they reach the client. Set to a value like 0.3 to remove noise. Default is 0 (disabled).
Direct Credential Passing
New config options embeddings.apiKey, vector.turso.url, and vector.turso.authToken allow passing credentials directly instead of through environment variables.
Dimension Mismatch Auto-Recovery
Automatically detects and recreates the chunks table when switching to an embedding model with a different vector dimension.
Breaking Changes
- OpenAI embedding provider has been removed. Use Jina AI (
jina-embeddings-v3) instead. Existing indexes must be re-indexed with--force.