Files
9router/open-sse/handlers/embeddingProviders/openai.js
2026-05-04 11:29:02 +07:00

40 lines
1.5 KiB
JavaScript

// OpenAI-compatible embeddings adapter (most providers)
import { bearerAuth } from "./_base.js";
const ENDPOINTS = {
openai: "https://api.openai.com/v1/embeddings",
openrouter: "https://openrouter.ai/api/v1/embeddings",
mistral: "https://api.mistral.ai/v1/embeddings",
"voyage-ai": "https://api.voyageai.com/v1/embeddings",
fireworks: "https://api.fireworks.ai/inference/v1/embeddings",
together: "https://api.together.xyz/v1/embeddings",
nebius: "https://api.tokenfactory.nebius.com/v1/embeddings",
github: "https://models.github.ai/inference/embeddings",
nvidia: "https://integrate.api.nvidia.com/v1/embeddings",
"jina-ai": "https://api.jina.ai/v1/embeddings",
};
export default function createOpenAIEmbeddingAdapter(providerId) {
return {
buildUrl: () => ENDPOINTS[providerId],
buildHeaders: (creds) => {
const headers = { "Content-Type": "application/json", ...bearerAuth(creds) };
if (providerId === "openrouter") {
headers["HTTP-Referer"] = "https://endpoint-proxy.local";
headers["X-Title"] = "Endpoint Proxy";
}
return headers;
},
buildBody: (model, { input, encoding_format, dimensions }) => {
const body = { model, input };
if (encoding_format) body.encoding_format = encoding_format;
if (dimensions != null && dimensions !== "") {
const dim = Number(dimensions);
if (Number.isFinite(dim) && dim > 0) body.dimensions = dim;
}
return body;
},
normalize: (responseBody) => responseBody,
};
}