server/embeddings/base.py:7 already defines an EmbeddingProvider Protocol, but only
JinaEmbeddingProvider is wired up (server/embeddings/jina.py). claude-context supports OpenAI /
VoyageAI / Gemini / Ollama and lets users pick. Notably, Voyage voyage-code-3 outperforms
jinaai/jina-embeddings-v2-base-code on most code retrieval benchmarks, so this is also a quality
lever, not just a flexibility one.
Scope
- Add VoyageEmbeddingProvider (POST https://api.voyageai.com/v1/embeddings, model default
voyage-code-3, input_type="document" for indexing and "query" for search). Honour batching
(Voyage caps batch size at 128).
- Add OpenAIEmbeddingProvider (default text-embedding-3-large).
- Add OllamaEmbeddingProvider (default nomic-embed-text, host from env).
- Provider selection in server/config.py via EMBEDDINGS_PROVIDER=jina|voyage|openai|ollama
(default jina, preserving current behaviour).
- Each provider exposes its native dimensions; EMBEDDINGS_DIMENSIONS becomes optional /
provider-derived. Make sure the dimension mismatch with an existing Qdrant collection produces a
clear error, not a silent failure.
- Update README.md env table.
- Tests: mock-based unit tests for each provider's request shape and batching behaviour (respx is
already in dev deps).
Acceptance
- Setting EMBEDDINGS_PROVIDER=voyage + VOYAGE_API_KEY lets the server index and search without
running the local TEI container.
- Default behaviour (Jina via TEI) is unchanged when env is unset.
- docker-compose.yaml keeps Jina TEI as the default but documents how to disable it for hosted
providers.
server/embeddings/base.py:7 already defines an EmbeddingProvider Protocol, but only
JinaEmbeddingProvider is wired up (server/embeddings/jina.py). claude-context supports OpenAI /
VoyageAI / Gemini / Ollama and lets users pick. Notably, Voyage voyage-code-3 outperforms
jinaai/jina-embeddings-v2-base-code on most code retrieval benchmarks, so this is also a quality
lever, not just a flexibility one.
Scope
voyage-code-3, input_type="document" for indexing and "query" for search). Honour batching
(Voyage caps batch size at 128).
(default jina, preserving current behaviour).
provider-derived. Make sure the dimension mismatch with an existing Qdrant collection produces a
clear error, not a silent failure.
already in dev deps).
Acceptance
running the local TEI container.
providers.