Update Vercel AI SDK to support tools call (#2383)

This commit is contained in:
Saket Aryan
2025-03-26 10:30:44 +05:30
committed by GitHub
parent 366d263e0b
commit 9d0300f774
28 changed files with 763 additions and 803 deletions

View File

@@ -1,145 +1,145 @@
import { LanguageModelV1, ProviderV1 } from '@ai-sdk/provider'
import { withoutTrailingSlash } from '@ai-sdk/provider-utils'
import { Mem0ChatLanguageModel } from './mem0-chat-language-model'
import { Mem0ChatModelId, Mem0ChatSettings } from './mem0-chat-settings'
import { OpenAIProviderSettings } from '@ai-sdk/openai'
import { Mem0CompletionModelId, Mem0CompletionSettings } from './mem0-completion-settings'
import { Mem0GenericLanguageModel } from './mem0-generic-language-model'
import { Mem0CompletionLanguageModel } from './mem0-completion-language-model'
import { LanguageModelV1, ProviderV1 } from "@ai-sdk/provider";
import { loadApiKey, withoutTrailingSlash } from "@ai-sdk/provider-utils";
import { Mem0ChatModelId, Mem0ChatSettings, Mem0Config } from "./mem0-types";
import { OpenAIProviderSettings } from "@ai-sdk/openai";
import { Mem0GenericLanguageModel } from "./mem0-generic-language-model";
import { OpenAIChatSettings } from "@ai-sdk/openai/internal";
import { AnthropicMessagesSettings } from "@ai-sdk/anthropic/internal";
import { AnthropicProviderSettings } from "@ai-sdk/anthropic";
export interface Mem0Provider extends ProviderV1 {
(modelId: Mem0ChatModelId, settings?: Mem0ChatSettings): LanguageModelV1
chat(
modelId: Mem0ChatModelId,
settings?: Mem0ChatSettings,
): LanguageModelV1
(modelId: Mem0ChatModelId, settings?: Mem0ChatSettings): LanguageModelV1;
chat(modelId: Mem0ChatModelId, settings?: Mem0ChatSettings): LanguageModelV1;
completion(modelId: Mem0ChatModelId, settings?: Mem0ChatSettings): LanguageModelV1;
languageModel(
modelId: Mem0ChatModelId,
settings?: Mem0ChatSettings,
): LanguageModelV1
completion(
modelId: Mem0CompletionModelId,
settings?: Mem0CompletionSettings,
): LanguageModelV1
settings?: Mem0ChatSettings
): LanguageModelV1;
}
export interface Mem0ProviderSettings extends OpenAIProviderSettings {
baseURL?: string
export interface Mem0ProviderSettings
extends OpenAIChatSettings,
AnthropicMessagesSettings {
baseURL?: string;
/**
* Custom fetch implementation. You can use it as a middleware to intercept
* requests or to provide a custom fetch implementation for e.g. testing
*/
fetch?: typeof fetch
fetch?: typeof fetch;
/**
* @internal
*/
generateId?: () => string
generateId?: () => string;
/**
* Custom headers to include in the requests.
*/
headers?: Record<string, string>
organization?: string;
project?: string;
headers?: Record<string, string>;
name?: string;
mem0ApiKey?: string;
apiKey?: string;
provider?: string;
config?: OpenAIProviderSettings;
modelType?: "completion" | "chat";
mem0Config?: Mem0Config;
/**
* The configuration for the provider.
*/
config?: OpenAIProviderSettings | AnthropicProviderSettings;
}
export function createMem0(
options: Mem0ProviderSettings = {
provider: "openai",
},
}
): Mem0Provider {
const baseURL =
withoutTrailingSlash(options.baseURL) ?? 'http://127.0.0.1:11434/api'
withoutTrailingSlash(options.baseURL) ?? "http://api.openai.com";
const getHeaders = () => ({
...options.headers,
})
});
const createGenericModel = (
modelId: Mem0ChatModelId,
settings: Mem0ChatSettings = {},
settings: Mem0ChatSettings = {}
) =>
new Mem0GenericLanguageModel(modelId, settings, {
baseURL,
fetch: options.fetch,
headers: getHeaders,
provider: options.provider || "openai",
organization: options.organization,
project: options.project,
name: options.name,
mem0_api_key: options.mem0ApiKey,
apiKey: options.apiKey,
}, options.config)
new Mem0GenericLanguageModel(
modelId,
settings,
{
baseURL,
fetch: options.fetch,
headers: getHeaders(),
provider: options.provider || "openai",
name: options.name,
mem0ApiKey: options.mem0ApiKey,
apiKey: options.apiKey,
mem0Config: options.mem0Config,
},
options.config
);
const createCompletionModel = (
modelId: Mem0ChatModelId,
settings: Mem0ChatSettings = {}
) =>
new Mem0GenericLanguageModel(
modelId,
settings,
{
baseURL,
fetch: options.fetch,
headers: getHeaders(),
provider: options.provider || "openai",
name: options.name,
mem0ApiKey: options.mem0ApiKey,
apiKey: options.apiKey,
mem0Config: options.mem0Config,
modelType: "completion",
},
options.config
);
const createChatModel = (
modelId: Mem0ChatModelId,
settings: Mem0ChatSettings = {},
settings: Mem0ChatSettings = {}
) =>
new Mem0ChatLanguageModel(modelId, settings, {
baseURL,
fetch: options.fetch,
headers: getHeaders,
provider: options.provider || "openai",
organization: options.organization,
project: options.project,
name: options.name,
mem0_api_key: options.mem0ApiKey,
apiKey: options.apiKey,
}, options.config)
const createCompletionModel = (
modelId: Mem0CompletionModelId,
settings: Mem0CompletionSettings = {}
) =>
new Mem0CompletionLanguageModel(
modelId,
settings,
{
baseURL,
fetch: options.fetch,
headers: getHeaders,
provider: options.provider || "openai",
organization: options.organization,
project: options.project,
name: options.name,
mem0_api_key: options.mem0ApiKey,
apiKey: options.apiKey
},
options.config
);
new Mem0GenericLanguageModel(
modelId,
settings,
{
baseURL,
fetch: options.fetch,
headers: getHeaders(),
provider: options.provider || "openai",
name: options.name,
mem0ApiKey: options.mem0ApiKey,
apiKey: options.apiKey,
mem0Config: options.mem0Config,
modelType: "completion",
},
options.config
);
const provider = function (
modelId: Mem0ChatModelId,
settings?: Mem0ChatSettings,
settings: Mem0ChatSettings = {}
) {
if (new.target) {
throw new Error(
'The Mem0 model function cannot be called with the new keyword.',
)
"The Mem0 model function cannot be called with the new keyword."
);
}
return createGenericModel(modelId, settings)
}
return createGenericModel(modelId, settings);
};
provider.languageModel = createGenericModel;
provider.completion = createCompletionModel;
provider.chat = createChatModel;
provider.chat = createChatModel
provider.completion = createCompletionModel
provider.languageModel = createChatModel
return provider as unknown as Mem0Provider
return provider as unknown as Mem0Provider;
}
export const mem0 = createMem0()
export const mem0 = createMem0();