diff --git a/backend/src/core/cfg.ts b/backend/src/core/cfg.ts index 57baa63..01c9e7c 100644 --- a/backend/src/core/cfg.ts +++ b/backend/src/core/cfg.ts @@ -47,12 +47,9 @@ export const env = { openai_model: process.env.OM_OPENAI_MODEL, gemini_key: process.env.GEMINI_API_KEY || process.env.OM_GEMINI_API_KEY || "", - aws_model: str( - process.env.AWS_REGION, - process.env.AWS_ACCESS_KEY_ID, - process.env.AWS_SECRET_ACCESS_KEY - ), - + AWS_REGION: process.env.AWS_REGION || "", + AWS_ACCESS_KEY_ID: process.env.AWS_ACCESS_KEY_ID || "", + AWS_SECRET_ACCESS_KEY: process.env.AWS_SECRET_ACCESS_KEY || "", ollama_url: str( process.env.OLLAMA_URL || process.env.OM_OLLAMA_URL, "http://localhost:11434", diff --git a/backend/src/memory/embed.ts b/backend/src/memory/embed.ts index 46440e8..d6d32f2 100644 --- a/backend/src/memory/embed.ts +++ b/backend/src/memory/embed.ts @@ -153,11 +153,11 @@ async function emb_gemini( ): Promise> { if (!env.gemini_key) throw new Error("Gemini key missing"); const prom = gem_q.then(async () => { - const url = `https://generativelanguage.googleapis.com/v1beta/models/embedding-001:batchEmbedContents?key=${env.gemini_key}`; + const url = `https://generativelanguage.googleapis.com/v1beta/models/text-embedding-004:batchEmbedContents?key=${env.gemini_key}`; for (let a = 0; a < 3; a++) { try { const reqs = Object.entries(txts).map(([s, t]) => ({ - model: "models/embedding-001", + model: "models/text-embedding-004", content: { parts: [{ text: t }] }, taskType: task_map[s] || task_map.semantic, })); diff --git a/backend/src/server/index.ts b/backend/src/server/index.ts index 201d5c4..e6c8b79 100644 --- a/backend/src/server/index.ts +++ b/backend/src/server/index.ts @@ -28,6 +28,16 @@ console.log(`[CONFIG] Vector Dimension: ${env.vec_dim}`); console.log(`[CONFIG] Cache Segments: ${env.cache_segments}`); console.log(`[CONFIG] Max Active Queries: ${env.max_active}`); +// Warn about configuration mismatch that causes embedding incompatibility +if (env.emb_kind !== "synthetic" && (tier === "hybrid" || tier === "fast")) { + console.warn( + `[CONFIG] ⚠️ WARNING: Embedding configuration mismatch detected!\n` + + ` OM_EMBEDDINGS=${env.emb_kind} but OM_TIER=${tier}\n` + + ` Storage will use ${env.emb_kind} embeddings, but queries will use synthetic embeddings.\n` + + ` This causes semantic search to fail. Set OM_TIER=deep to fix.` + ); +} + app.use(req_tracker_mw()); app.use((req: any, res: any, next: any) => { diff --git a/models.yml b/models.yml index 70073e6..ed46680 100644 --- a/models.yml +++ b/models.yml @@ -8,35 +8,35 @@ episodic: ollama: nomic-embed-text openai: text-embedding-3-small - gemini: models/embedding-001 + gemini: models/text-embedding-004 aws: amazon.titan-embed-text-v2:0 local: all-MiniLM-L6-v2 semantic: ollama: nomic-embed-text openai: text-embedding-3-small - gemini: models/embedding-001 + gemini: models/text-embedding-004 aws: amazon.titan-embed-text-v2:0 local: all-MiniLM-L6-v2 procedural: ollama: nomic-embed-text openai: text-embedding-3-small - gemini: models/embedding-001 + gemini: models/text-embedding-004 aws: amazon.titan-embed-text-v2:0 local: all-MiniLM-L6-v2 emotional: ollama: nomic-embed-text openai: text-embedding-3-small - gemini: models/embedding-001 + gemini: models/text-embedding-004 aws: amazon.titan-embed-text-v2:0 local: all-MiniLM-L6-v2 reflective: ollama: nomic-embed-text openai: text-embedding-3-large - gemini: models/embedding-001 + gemini: models/text-embedding-004 aws: amazon.titan-embed-text-v2:0 local: all-mpnet-base-v2 # Available Ollama models (pull with: ollama pull ) @@ -50,7 +50,8 @@ reflective: # - text-embedding-3-large (3072d) # Gemini models: -# - models/embedding-001 (768d) +# - models/text-embedding-004 (768d) - latest +# - models/embedding-001 (768d) - deprecated #AWS models: # - amazon.titan-embed-text-v2:0 (1024d, 512d, 256)