@@ -132,6 +132,68 @@ npm install
132132npm run build
133133```
134134
135+ ## Embedding Providers
136+
137+ Context+ supports two embedding backends controlled by ` CONTEXTPLUS_EMBED_PROVIDER ` :
138+
139+ | Provider | Value | Requires | Best For |
140+ | ----------| -------| ----------| ----------|
141+ | ** Ollama** (default) | ` ollama ` | Local Ollama server | Free, offline, private |
142+ | ** OpenAI-compatible** | ` openai ` | API key | Gemini (free tier), OpenAI, Groq, vLLM |
143+
144+ ### Ollama (Default)
145+
146+ No extra configuration needed. Just run Ollama with an embedding model:
147+
148+ ``` bash
149+ ollama pull nomic-embed-text
150+ ollama serve
151+ ```
152+
153+ ### Google Gemini (Free Tier)
154+
155+ ``` json
156+ {
157+ "env" : {
158+ "CONTEXTPLUS_EMBED_PROVIDER" : " openai" ,
159+ "CONTEXTPLUS_OPENAI_API_KEY" : " YOUR_GEMINI_API_KEY" ,
160+ "CONTEXTPLUS_OPENAI_BASE_URL" : " https://generativelanguage.googleapis.com/v1beta/openai" ,
161+ "CONTEXTPLUS_OPENAI_EMBED_MODEL" : " text-embedding-004"
162+ }
163+ }
164+ ```
165+
166+ Get a free API key at [ Google AI Studio] ( https://aistudio.google.com/apikey ) .
167+
168+ ### OpenAI
169+
170+ ``` json
171+ {
172+ "env" : {
173+ "CONTEXTPLUS_EMBED_PROVIDER" : " openai" ,
174+ "OPENAI_API_KEY" : " sk-..." ,
175+ "OPENAI_EMBED_MODEL" : " text-embedding-3-small"
176+ }
177+ }
178+ ```
179+
180+ ### Other OpenAI-compatible APIs (Groq, vLLM, LiteLLM)
181+
182+ Any endpoint implementing the [ OpenAI Embeddings API] ( https://platform.openai.com/docs/api-reference/embeddings ) works:
183+
184+ ``` json
185+ {
186+ "env" : {
187+ "CONTEXTPLUS_EMBED_PROVIDER" : " openai" ,
188+ "CONTEXTPLUS_OPENAI_API_KEY" : " YOUR_KEY" ,
189+ "CONTEXTPLUS_OPENAI_BASE_URL" : " https://your-proxy.example.com/v1" ,
190+ "CONTEXTPLUS_OPENAI_EMBED_MODEL" : " your-model-name"
191+ }
192+ }
193+ ```
194+
195+ > ** Note:** The ` semantic_navigate ` tool also uses a chat model for cluster labeling. When using the ` openai ` provider, set ` CONTEXTPLUS_OPENAI_CHAT_MODEL ` (default: ` gpt-4o-mini ` ).
196+
135197## Architecture
136198
137199Three layers built with TypeScript over stdio using the Model Context Protocol SDK:
@@ -146,11 +208,16 @@ Three layers built with TypeScript over stdio using the Model Context Protocol S
146208
147209## Config
148210
149- | Variable | Type | Default | Description |
150- | --------------------------------------- | ------------------------- | ------------------ | ------------------------------------------------------------- |
151- | ` OLLAMA_EMBED_MODEL ` | string | ` nomic-embed-text ` | Embedding model |
152- | ` OLLAMA_API_KEY ` | string | - | Ollama Cloud API key |
153- | ` OLLAMA_CHAT_MODEL ` | string | ` llama3.2 ` | Chat model for cluster labeling |
211+ | Variable | Type | Default | Description |
212+ | --------------------------------------- | ------------------------- | -------------------------------------- | ------------------------------------------------------------- |
213+ | ` CONTEXTPLUS_EMBED_PROVIDER ` | string | ` ollama ` | Embedding backend: ` ollama ` or ` openai ` |
214+ | ` OLLAMA_EMBED_MODEL ` | string | ` nomic-embed-text ` | Ollama embedding model |
215+ | ` OLLAMA_API_KEY ` | string | - | Ollama Cloud API key |
216+ | ` OLLAMA_CHAT_MODEL ` | string | ` llama3.2 ` | Ollama chat model for cluster labeling |
217+ | ` CONTEXTPLUS_OPENAI_API_KEY ` | string | - | API key for OpenAI-compatible provider (alias: ` OPENAI_API_KEY ` ) |
218+ | ` CONTEXTPLUS_OPENAI_BASE_URL ` | string | ` https://api.openai.com/v1 ` | OpenAI-compatible endpoint URL (alias: ` OPENAI_BASE_URL ` ) |
219+ | ` CONTEXTPLUS_OPENAI_EMBED_MODEL ` | string | ` text-embedding-3-small ` | OpenAI-compatible embedding model (alias: ` OPENAI_EMBED_MODEL ` ) |
220+ | ` CONTEXTPLUS_OPENAI_CHAT_MODEL ` | string | ` gpt-4o-mini ` | OpenAI-compatible chat model for labeling (alias: ` OPENAI_CHAT_MODEL ` ) |
154221| ` CONTEXTPLUS_EMBED_BATCH_SIZE ` | string (parsed as number) | ` 8 ` | Embedding batch size per GPU call, clamped to 5-10 |
155222| ` CONTEXTPLUS_EMBED_CHUNK_CHARS ` | string (parsed as number) | ` 2000 ` | Per-chunk chars before merge, clamped to 256-8000 |
156223| ` CONTEXTPLUS_MAX_EMBED_FILE_SIZE ` | string (parsed as number) | ` 51200 ` | Skip non-code text files larger than this many bytes |
0 commit comments