ソースを参照

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 });