{"record":{"id":"b1b71e4618c29fe5","repo":"rohitg00/agentmemory","slug":"openrouter-embedding-failed-response-status","errorCode":null,"errorMessage":"OpenRouter embedding failed (${response.status}): ${err}","messagePattern":"OpenRouter embedding failed \\((.+?)\\): (.+?)","errorType":"http","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"src/providers/embedding/openrouter.ts","lineNumber":47,"sourceCode":"    return result;\n  }\n\n  async embedBatch(texts: string[]): Promise<Float32Array[]> {\n    const response = await fetchWithTimeout(API_URL, {\n      method: \"POST\",\n      headers: {\n        Authorization: `Bearer ${this.apiKey}`,\n        \"Content-Type\": \"application/json\",\n      },\n      body: JSON.stringify({\n        model: this.model,\n        input: texts,\n      }),\n    });\n\n    if (!response.ok) {\n      const err = await response.text();\n      throw new Error(\n        `OpenRouter embedding failed (${response.status}): ${err}`,\n      );\n    }\n\n    const data = (await response.json()) as {\n      data: Array<{ embedding: number[] }>;\n    };\n\n    return data.data.map((d) => new Float32Array(d.embedding));\n  }\n}\n","sourceCodeStart":29,"sourceCodeEnd":59,"githubUrl":"https://github.com/rohitg00/agentmemory/blob/e04ba88819c365c9acf9d6661ea802143e728bd6/src/providers/embedding/openrouter.ts#L29-L59","documentation":"The OpenRouter embeddings endpoint responded with a non-2xx status. embedBatch reads the response text and throws it prefixed with the HTTP status, so provider-side failures (auth, model availability, credits, rate limits) reach the caller verbatim.","triggerScenarios":"Calling embed()/embedBatch() when OpenRouter rejects the request: 401 invalid OPENROUTER_API_KEY, 404 model not available for embeddings on OpenRouter, 402 insufficient credits, 429 rate limit, 5xx upstream outage.","commonSituations":"Chat-only model ids used as embedding models (many OpenRouter models don't support the embeddings route); free-tier credit exhaustion; key revoked; OPENROUTER_EMBEDDING_MODEL set to an id OpenRouter cannot serve; regional blocks.","solutions":["Inspect status in the message: 401 -> fix key; 402 -> add credits; 429 -> backoff/reduce batch size","Confirm the configured OPENROUTER_EMBEDDING_MODEL id actually supports the embeddings endpoint on OpenRouter","Test the same request with curl to isolate agentmemory from network/proxy issues","Add retry with exponential backoff for transient 429/5xx","Fall back to another embedding provider via createFallbackProvider if OpenRouter is chronically unavailable"],"exampleFix":"// before\nconst provider = new OpenRouterEmbeddingProvider(key);\nawait provider.embed(text); // 404: model lacks embeddings route\n// after: use an embeddings-capable model\n// export OPENROUTER_EMBEDDING_MODEL=openai/text-embedding-3-small","handlingStrategy":"fallback","validationCode":"const key = process.env.OPENROUTER_API_KEY;\nif (!key) throw new Error('OPENROUTER_API_KEY not set');\nconst model = process.env.OPENROUTER_EMBEDDING_MODEL;\nconst EMBED_CAPABLE = [/^openai\\/text-embedding/, /^google\\/text-embedding/];\nif (model && !EMBED_CAPABLE.some(re => re.test(model))) console.warn(`Model ${model} may not support OpenRouter embeddings`);","typeGuard":"const isRateLimit = (err: unknown): boolean => /OpenRouter embedding failed \\((429|5\\d\\d)\\)/.test(String((err as Error)?.message));","tryCatchPattern":"try {\n  return await openrouterProvider.embedBatch(texts);\n} catch (err) {\n  if (isRateLimit(err)) {\n    await sleep(expoBackoff(attempt++));\n    return openrouterProvider.embedBatch(texts);\n  }\n  if (/embedding failed \\(40[124]\\)/.test(String((err as Error).message))) {\n    return fallbackProvider.embedBatch(texts); // switch to openai/voyage\n  }\n  throw err;\n}","preventionTips":["Use only model ids confirmed to support the OpenRouter embeddings route","Keep account credits topped up (402 fails fast)","Wire createFallbackProvider with a second embedding vendor","Back off exponentially on 429 and batch conservatively"],"tags":["openrouter","http-error","network","embedding"],"backgroundTag":"upstream-http-error","analyzedSha":"e04ba88819c365c9acf9d6661ea802143e728bd6","analyzedAt":"2026-08-30T01:07:40.754Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}