openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
54 lines (53 loc) • 2.15 kB
JavaScript
import { a as normalizeEmbeddingModelWithPrefixes, n as createRemoteEmbeddingProvider, r as resolveRemoteEmbeddingClient } from "../../memory-core-host-engine-embeddings-Ce3QNZrE.mjs";
import { r as OPENAI_DEFAULT_EMBEDDING_MODEL } from "../../default-models-DJR8R_ck.mjs";
//#region extensions/openai/embedding-provider.ts
const DEFAULT_OPENAI_BASE_URL = "https://api.openai.com/v1";
const OPENAI_MAX_INPUT_TOKENS = {
"text-embedding-3-small": 8192,
"text-embedding-3-large": 8192,
"text-embedding-ada-002": 8191
};
function normalizeOpenAiModel(model) {
return normalizeEmbeddingModelWithPrefixes({
model,
defaultModel: OPENAI_DEFAULT_EMBEDDING_MODEL,
prefixes: ["openai/"]
});
}
async function createOpenAiEmbeddingProvider(options) {
const originalModel = options.model;
const resolvedClient = await resolveRemoteEmbeddingClient({
provider: options.provider ?? "openai",
capability: "embedding",
options,
defaultBaseUrl: DEFAULT_OPENAI_BASE_URL,
normalizeModel: normalizeOpenAiModel
});
if (URL.parse(resolvedClient.baseUrl)?.hostname.toLowerCase().replace(/\.+$/, "") !== "api.openai.com" && originalModel.startsWith("openai/")) resolvedClient.model = `openai/${normalizeOpenAiModel(originalModel)}`;
const client = {
...resolvedClient,
inputType: options.inputType,
queryInputType: options.queryInputType,
documentInputType: options.documentInputType,
outputDimensionality: options.dimensions
};
return {
provider: createRemoteEmbeddingProvider({
id: "openai",
client,
errorPrefix: "openai embeddings failed",
maxInputTokens: OPENAI_MAX_INPUT_TOKENS[normalizeOpenAiModel(client.model)],
buildRequestFields: (kind) => {
const value = (kind === "query" ? client.queryInputType : client.documentInputType) ?? client.inputType;
const inputType = typeof value === "string" && value.trim().length > 0 ? value.trim() : void 0;
return {
...typeof client.outputDimensionality === "number" ? { dimensions: client.outputDimensionality } : {},
...inputType ? { input_type: inputType } : {}
};
}
}),
client
};
}
//#endregion
export { createOpenAiEmbeddingProvider };