Skip to content

Commit 5042915

Browse files
committed
fix(embeddings): preserve provider alias cache identity
1 parent bb65e79 commit 5042915

2 files changed

Lines changed: 18 additions & 6 deletions

File tree

src/plugins/openai-compatible-embedding-provider.test.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,9 +330,18 @@ describe("openai-compatible generic embedding provider", () => {
330330
};
331331
options.acquireLocalService = acquireLocalService;
332332

333-
const { provider } = await createOpenAICompatibleEmbeddingProvider(options);
333+
const result = await openAICompatibleEmbeddingProviderAdapter.create(options);
334+
const provider = result.provider;
335+
if (!provider) {
336+
throw new Error("expected openai-compatible provider");
337+
}
334338
await expect(provider.embed("hello")).resolves.toEqual([0.1, 0.2, 0.3]);
335339

340+
expect(result.runtime?.cacheKeyData).toMatchObject({
341+
provider: "gpu-spark",
342+
baseUrl: server.baseUrl,
343+
model: "nomic-embed-text",
344+
});
336345
expect(acquireLocalService).toHaveBeenCalledWith(
337346
{
338347
providerId: "gpu-spark",

src/plugins/openai-compatible-embedding-provider.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ const EMBEDDING_ERROR_TRUNCATED_SUFFIX = "... [truncated]";
2929

3030
/** Normalized OpenAI-compatible embedding client configuration. */
3131
export type OpenAICompatibleEmbeddingClient = {
32+
providerId: string;
3233
baseUrl: string;
3334
headers: Record<string, string>;
3435
ssrfPolicy?: SsrFPolicy;
@@ -392,6 +393,10 @@ async function createOpenAICompatibleEmbeddingClient(
392393
): Promise<OpenAICompatibleEmbeddingClient> {
393394
const resolvedProvider = resolveConfiguredProvider(options);
394395
const configuredProvider = resolvedProvider?.config;
396+
const providerId =
397+
resolvedProvider?.providerId ??
398+
options.provider?.trim() ??
399+
OPENAI_COMPATIBLE_EMBEDDING_PROVIDER_ID;
395400
const remoteBaseUrl = normalizeOptionalString(options.remote?.baseUrl);
396401
const baseUrl = normalizeBaseUrl(remoteBaseUrl ?? configuredProvider?.baseUrl);
397402
const model = normalizeModel(options.model, options.provider);
@@ -412,17 +417,15 @@ async function createOpenAICompatibleEmbeddingClient(
412417
});
413418
const localServiceOptions = options as LocalServiceAwareEmbeddingOptions;
414419
return {
420+
providerId,
415421
baseUrl,
416422
headers,
417423
ssrfPolicy: ssrfPolicyFromHttpBaseUrlAllowedHostname(baseUrl),
418424
model,
419425
...(configuredProvider?.localService && !remoteBaseUrl
420426
? {
421427
localServiceTarget: {
422-
providerId:
423-
resolvedProvider?.providerId ??
424-
options.provider?.trim() ??
425-
OPENAI_COMPATIBLE_EMBEDDING_PROVIDER_ID,
428+
providerId,
426429
baseUrl,
427430
headers,
428431
},
@@ -488,7 +491,7 @@ export const openAICompatibleEmbeddingProviderAdapter: EmbeddingProviderAdapter
488491
id: OPENAI_COMPATIBLE_EMBEDDING_PROVIDER_ID,
489492
inlineBatchTimeoutMs: 10 * 60_000,
490493
cacheKeyData: {
491-
provider: OPENAI_COMPATIBLE_EMBEDDING_PROVIDER_ID,
494+
provider: client.providerId,
492495
baseUrl: client.baseUrl,
493496
model: client.model,
494497
...(typeof client.dimensions === "number" ? { dimensions: client.dimensions } : {}),

0 commit comments

Comments
 (0)