Skip to content

Commit a83f260

Browse files
authored
fix(mcp): pass embedding dimension to Ollama
1 parent b56ca04 commit a83f260

3 files changed

Lines changed: 31 additions & 4 deletions

File tree

packages/mcp/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,9 @@ EMBEDDING_MODEL=nomic-embed-text
130130

131131
# Optional: Specify Ollama host (default: http://127.0.0.1:11434)
132132
OLLAMA_HOST=http://127.0.0.1:11434
133+
134+
# Optional: Override embedding dimension to skip runtime dimension detection
135+
EMBEDDING_DIMENSION=768
133136
```
134137

135138
**Setup Instructions:**
@@ -388,6 +391,7 @@ Pasting the following configuration into your Cursor `~/.cursor/mcp.json` file i
388391
"EMBEDDING_PROVIDER": "Ollama",
389392
"EMBEDDING_MODEL": "nomic-embed-text",
390393
"OLLAMA_HOST": "http://127.0.0.1:11434",
394+
"EMBEDDING_DIMENSION": "768",
391395
"MILVUS_TOKEN": "your-zilliz-cloud-api-key"
392396
}
393397
}

packages/mcp/src/config.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export interface ContextMcpConfig {
1717
// Ollama configuration
1818
ollamaModel?: string;
1919
ollamaHost?: string;
20+
ollamaDimension?: number;
2021
// Vector database configuration
2122
milvusAddress?: string; // Optional, can be auto-resolved from token
2223
milvusToken?: string;
@@ -108,11 +109,27 @@ export function getEmbeddingModelForProvider(provider: string): string {
108109
}
109110
}
110111

112+
function getPositiveIntegerFromEnv(name: string): number | undefined {
113+
const rawValue = envManager.get(name);
114+
if (!rawValue) {
115+
return undefined;
116+
}
117+
118+
const parsedValue = Number(rawValue);
119+
if (Number.isInteger(parsedValue) && parsedValue > 0) {
120+
return parsedValue;
121+
}
122+
123+
console.warn(`[DEBUG] ⚠️ Ignoring invalid ${name}: ${rawValue}. Expected a positive integer.`);
124+
return undefined;
125+
}
126+
111127
export function createMcpConfig(): ContextMcpConfig {
112128
// Debug: Print all environment variables related to Context
113129
console.log(`[DEBUG] 🔍 Environment Variables Debug:`);
114130
console.log(`[DEBUG] EMBEDDING_PROVIDER: ${envManager.get('EMBEDDING_PROVIDER') || 'NOT SET'}`);
115131
console.log(`[DEBUG] EMBEDDING_MODEL: ${envManager.get('EMBEDDING_MODEL') || 'NOT SET'}`);
132+
console.log(`[DEBUG] EMBEDDING_DIMENSION: ${envManager.get('EMBEDDING_DIMENSION') || 'NOT SET'}`);
116133
console.log(`[DEBUG] OLLAMA_MODEL: ${envManager.get('OLLAMA_MODEL') || 'NOT SET'}`);
117134
console.log(`[DEBUG] GEMINI_API_KEY: ${envManager.get('GEMINI_API_KEY') ? 'SET (length: ' + envManager.get('GEMINI_API_KEY')!.length + ')' : 'NOT SET'}`);
118135
console.log(`[DEBUG] OPENAI_API_KEY: ${envManager.get('OPENAI_API_KEY') ? 'SET (length: ' + envManager.get('OPENAI_API_KEY')!.length + ')' : 'NOT SET'}`);
@@ -137,6 +154,7 @@ export function createMcpConfig(): ContextMcpConfig {
137154
// Ollama configuration
138155
ollamaModel: envManager.get('OLLAMA_MODEL'),
139156
ollamaHost: envManager.get('OLLAMA_HOST'),
157+
ollamaDimension: getPositiveIntegerFromEnv('EMBEDDING_DIMENSION'),
140158
// Vector database configuration - address can be auto-resolved from token
141159
milvusAddress: envManager.get('MILVUS_ADDRESS'), // Optional, can be resolved from token
142160
milvusToken: envManager.get('MILVUS_TOKEN'),
@@ -181,6 +199,9 @@ export function logConfigurationSummary(config: ContextMcpConfig): void {
181199
case 'Ollama':
182200
console.log(`[MCP] Ollama Host: ${config.ollamaHost || 'http://127.0.0.1:11434'}`);
183201
console.log(`[MCP] Ollama Model: ${config.embeddingModel}`);
202+
if (config.ollamaDimension) {
203+
console.log(`[MCP] Ollama Embedding Dimension: ${config.ollamaDimension}`);
204+
}
184205
break;
185206
}
186207

@@ -203,6 +224,7 @@ Environment Variables:
203224
Embedding Provider Configuration:
204225
EMBEDDING_PROVIDER Embedding provider: OpenAI, VoyageAI, Gemini, Ollama, OpenRouter (default: OpenAI)
205226
EMBEDDING_MODEL Embedding model name (works for all providers)
227+
EMBEDDING_DIMENSION Optional embedding dimension override for Ollama
206228
207229
Provider-specific API Keys:
208230
OPENAI_API_KEY OpenAI API key (required for OpenAI provider)

packages/mcp/src/embedding.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,11 @@ export function createEmbeddingInstance(config: ContextMcpConfig): OpenAIEmbeddi
6464

6565
case 'Ollama':
6666
const ollamaHost = config.ollamaHost || 'http://127.0.0.1:11434';
67-
console.log(`[EMBEDDING] 🔧 Configuring Ollama with model: ${config.embeddingModel}, host: ${ollamaHost}`);
67+
console.log(`[EMBEDDING] 🔧 Configuring Ollama with model: ${config.embeddingModel}, host: ${ollamaHost}${config.ollamaDimension ? `, dimension: ${config.ollamaDimension}` : ''}`);
6868
const ollamaEmbedding = new OllamaEmbedding({
6969
model: config.embeddingModel,
70-
host: ollamaHost
70+
host: ollamaHost,
71+
...(config.ollamaDimension && { dimension: config.ollamaDimension })
7172
});
7273
console.log(`[EMBEDDING] ✅ Ollama embedding instance created successfully`);
7374
return ollamaEmbedding;
@@ -97,7 +98,7 @@ export function logEmbeddingProviderInfo(config: ContextMcpConfig, embedding: Op
9798
console.log(`[EMBEDDING] OpenRouter configuration - API Key: ${config.openrouterApiKey ? '✅ Provided' : '❌ Missing'}`);
9899
break;
99100
case 'Ollama':
100-
console.log(`[EMBEDDING] Ollama configuration - Host: ${config.ollamaHost || 'http://127.0.0.1:11434'}, Model: ${config.embeddingModel}`);
101+
console.log(`[EMBEDDING] Ollama configuration - Host: ${config.ollamaHost || 'http://127.0.0.1:11434'}, Model: ${config.embeddingModel}${config.ollamaDimension ? `, Dimension: ${config.ollamaDimension}` : ''}`);
101102
break;
102103
}
103-
}
104+
}

0 commit comments

Comments
 (0)