浏览代码

fix(embedding): don't pass llama-cpp session.signal to remote OpenAI provider

When node-llama-cpp Vulkan build fails and falls back to CPU, the session
signal can be in an aborted state. Passing this aborted signal to
OpenAIEmbeddingsProvider.embed() caused it to return null immediately
without making any HTTP request (short-circuit at line 446 openai.ts).

Fix: only pass session.signal when provider.kind === 'local'. Remote
providers have their own timeout mechanism (DEFAULT_TIMEOUT_MS=30000).

Generated with [Claude Code](https://claude.ai/code)
via [Oivo](https://oivo.com)

Co-Authored-By: Claude <noreply@anthropic.com>
root 3 周之前
父节点
当前提交
4384081070
共有 1 个文件被更改,包括 4 次插入2 次删除
  1. 4 2
      src/store.ts

+ 4 - 2
src/store.ts

@@ -1492,7 +1492,8 @@ export async function generateEmbeddings(
       modelArg: string,
     ): Promise<{ embedding: number[]; model: string } | null> => {
       if (provider) {
-        const r = await provider.embed(text, { model: modelArg, signal: session.signal });
+        const sig = provider.kind === 'local' ? session.signal : undefined;
+        const r = await provider.embed(text, { model: modelArg, signal: sig });
         return r ? { embedding: r.embedding, model: r.model } : null;
       }
       return session.embed(text, { model: modelArg });
@@ -1502,7 +1503,8 @@ export async function generateEmbeddings(
       modelArg: string,
     ): Promise<({ embedding: number[]; model: string } | null)[]> => {
       if (provider) {
-        const r = await provider.embedBatch(texts, { model: modelArg, signal: session.signal });
+        const sig = provider.kind === 'local' ? session.signal : undefined;
+        const r = await provider.embedBatch(texts, { model: modelArg, signal: sig });
         return r.map((x) => (x ? { embedding: x.embedding, model: x.model } : null));
       }
       return session.embedBatch(texts, { model: modelArg });