fix(memory): preserve embedding proxy provider prefixes (#66452)

* fix(memory): preserve embedding proxy provider prefixes

* docs(changelog): fix embeddings entry

* Update CHANGELOG.md
This commit is contained in:
Vincent Koc
2026-04-14 11:05:07 +01:00
committed by GitHub
parent e9f5619716
commit 8820a43818
3 changed files with 33 additions and 6 deletions

View File

@@ -0,0 +1,25 @@
import { describe, expect, it } from "vitest";
import { DEFAULT_OPENAI_EMBEDDING_MODEL, normalizeOpenAiModel } from "./embeddings-openai.js";
describe("normalizeOpenAiModel", () => {
it("returns the default model when input is blank", () => {
expect(normalizeOpenAiModel("")).toBe(DEFAULT_OPENAI_EMBEDDING_MODEL);
expect(normalizeOpenAiModel(" ")).toBe(DEFAULT_OPENAI_EMBEDDING_MODEL);
});
it("strips the openai/ prefix", () => {
expect(normalizeOpenAiModel("openai/text-embedding-3-small")).toBe("text-embedding-3-small");
expect(normalizeOpenAiModel("openai/text-embedding-ada-002")).toBe("text-embedding-ada-002");
});
it("preserves explicit third-party provider prefixes", () => {
expect(normalizeOpenAiModel("spark/text-embedding-3-small")).toBe(
"spark/text-embedding-3-small",
);
expect(normalizeOpenAiModel("litellm/azure/ada-002")).toBe("litellm/azure/ada-002");
});
it("preserves unprefixed model ids", () => {
expect(normalizeOpenAiModel("text-embedding-3-large")).toBe("text-embedding-3-large");
});
});

View File

@@ -1,6 +1,6 @@
import { parseStaticModelRef } from "../../agents/model-ref-shared.js";
import type { SsrFPolicy } from "../../infra/net/ssrf.js";
import { OPENAI_DEFAULT_EMBEDDING_MODEL } from "../../plugins/provider-model-defaults.js";
import { normalizeEmbeddingModelWithPrefixes } from "./embeddings-model-normalize.js";
import {
createRemoteEmbeddingProvider,
resolveRemoteEmbeddingClient,
@@ -24,11 +24,12 @@ const OPENAI_MAX_INPUT_TOKENS: Record<string, number> = {
};
export function normalizeOpenAiModel(model: string): string {
return normalizeEmbeddingModelWithPrefixes({
model,
defaultModel: DEFAULT_OPENAI_EMBEDDING_MODEL,
prefixes: ["openai/"],
});
const trimmed = model.trim();
if (!trimmed) {
return DEFAULT_OPENAI_EMBEDDING_MODEL;
}
const parsed = parseStaticModelRef(trimmed, "openai");
return parsed && parsed.provider === "openai" ? parsed.model : trimmed;
}
export async function createOpenAiEmbeddingProvider(