Procházet zdrojové kódy

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 před 3 týdny
rodič
revize
4384081070
1 změnil soubory, kde provedl 4 přidání a 2 odebrání
  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 });