vantedge-ai-sdk
Version:
VantEdge AI SDK provider for AI SDK
81 lines (79 loc) • 2.86 kB
JavaScript
import { OpenAICompatibleChatLanguageModel, OpenAICompatibleCompletionLanguageModel, OpenAICompatibleEmbeddingModel, OpenAICompatibleImageModel } from '@ai-sdk/openai-compatible';
import { withoutTrailingSlash, loadApiKey } from '@ai-sdk/provider-utils';
// src/provider.ts
var globalThreadId = null;
function setGlobalThreadId(threadId) {
globalThreadId = threadId;
}
function createVantEdgeAI(options = {}) {
const baseURL = withoutTrailingSlash(
options.baseURL ?? `${process.env.NEXT_PUBLIC_API_URL}`
);
const getHeaders = () => ({
Authorization: `Bearer ${loadApiKey({
apiKey: options.apiKey ?? "1234567890",
environmentVariableName: "VANTEDGEAI_API_KEY",
description: "VantEdgeAI API key"
})}`,
...options.headers
});
const getCommonModelConfig = (modelType) => ({
provider: `vantedgeai.${modelType}`,
url: ({ path }) => {
const url = new URL(`${baseURL}${path}`);
if (options.queryParams) {
url.search = new URLSearchParams(options.queryParams).toString();
}
return url.toString();
},
headers: getHeaders,
fetch: options.fetch
});
const createChatModel = (modelId, settings = {}) => {
const customFetch = async (url, options2) => {
if (options2?.body && (settings.threadId || globalThreadId)) {
try {
const body = JSON.parse(options2.body);
body.threadId = settings.threadId || globalThreadId;
options2.body = JSON.stringify(body);
} catch (error) {
console.warn(
"Failed to parse request body for threadId injection:",
error
);
}
}
return globalThis.fetch(url, options2);
};
return new OpenAICompatibleChatLanguageModel(modelId, settings, {
...getCommonModelConfig("chat"),
defaultObjectGenerationMode: "tool",
fetch: customFetch
});
};
const createCompletionModel = (modelId, settings = {}) => new OpenAICompatibleCompletionLanguageModel(
modelId,
settings,
getCommonModelConfig("completion")
);
const createTextEmbeddingModel = (modelId, settings = {}) => new OpenAICompatibleEmbeddingModel(
modelId,
settings,
getCommonModelConfig("embedding")
);
const createImageModel = (modelId, settings = {}) => new OpenAICompatibleImageModel(
modelId,
settings,
getCommonModelConfig("image")
);
const provider = (modelId, settings) => createChatModel(modelId, settings);
provider.completionModel = createCompletionModel;
provider.chatModel = createChatModel;
provider.textEmbeddingModel = createTextEmbeddingModel;
provider.imageModel = createImageModel;
return provider;
}
var vantedgeai = createVantEdgeAI();
export { createVantEdgeAI, setGlobalThreadId, vantedgeai };
//# sourceMappingURL=index.mjs.map
//# sourceMappingURL=index.mjs.map