UNPKG

@mem0/vercel-ai-provider

Version:

Vercel AI Provider for providing memory to LLMs

1 lines 47 kB
{"version":3,"sources":["../src/mem0-facade.ts","../src/provider-response-provider.ts","../src/mem0-provider-selector.ts","../src/mem0-utils.ts","../src/mem0-generic-language-model.ts","../src/mem0-provider.ts"],"sourcesContent":["import { withoutTrailingSlash } from '@ai-sdk/provider-utils'\n\nimport { Mem0GenericLanguageModel } from './mem0-generic-language-model'\nimport { Mem0ChatModelId, Mem0ChatSettings } from './mem0-types'\nimport { Mem0ProviderSettings } from './mem0-provider'\n\nexport class Mem0 {\n readonly baseURL: string\n readonly headers?: any\n\n constructor(options: Mem0ProviderSettings = {\n provider: 'openai',\n }) {\n this.baseURL =\n withoutTrailingSlash(options.baseURL) ?? 'https://api.openai.com'\n\n this.headers = options.headers\n }\n\n private get baseConfig() {\n return {\n baseURL: this.baseURL,\n headers: this.headers,\n }\n }\n\n chat(modelId: Mem0ChatModelId, settings: Mem0ChatSettings = {}) {\n return new Mem0GenericLanguageModel(modelId, settings, {\n provider: 'openai',\n modelType: 'chat',\n ...this.baseConfig,\n })\n }\n\n completion(modelId: Mem0ChatModelId, settings: Mem0ChatSettings = {}) {\n return new Mem0GenericLanguageModel(modelId, settings, {\n provider: 'openai',\n modelType: 'completion',\n ...this.baseConfig,\n })\n }\n}","import { LanguageModelV3, LanguageModelV3CallOptions, LanguageModelV3GenerateResult, LanguageModelV3StreamResult } from \"@ai-sdk/provider\";\nimport { Mem0ProviderSettings } from \"./mem0-provider\";\nimport { createOpenAI, OpenAIProviderSettings } from \"@ai-sdk/openai\";\nimport { CohereProviderSettings, createCohere } from \"@ai-sdk/cohere\";\nimport { AnthropicProviderSettings, createAnthropic } from \"@ai-sdk/anthropic\";\nimport { createGoogleGenerativeAI, GoogleGenerativeAIProviderSettings } from \"@ai-sdk/google\";\nimport { createGroq, GroqProviderSettings } from \"@ai-sdk/groq\";\n\n// Define a private provider field\nclass Mem0AITextGenerator implements LanguageModelV3 {\n readonly specificationVersion = \"v3\";\n readonly modelId: string;\n readonly provider = \"mem0\";\n readonly supportedUrls: Record<string, RegExp[]> = {\n '*': [/.*/]\n };\n private languageModel: any; // Use any type to avoid version conflicts\n\n constructor(modelId: string, config: Mem0ProviderSettings, provider_config: ProviderSettings) {\n this.modelId = modelId;\n\n switch (config.provider) {\n case \"openai\":\n if(config?.modelType === \"completion\"){\n this.languageModel = createOpenAI({\n apiKey: config?.apiKey,\n ...provider_config as OpenAIProviderSettings,\n }).completion(modelId);\n } else if(config?.modelType === \"chat\"){\n this.languageModel = createOpenAI({\n apiKey: config?.apiKey,\n ...provider_config as OpenAIProviderSettings,\n }).chat(modelId);\n } else {\n this.languageModel = createOpenAI({\n apiKey: config?.apiKey,\n ...provider_config as OpenAIProviderSettings,\n }).languageModel(modelId);\n }\n break;\n case \"cohere\":\n this.languageModel = createCohere({\n apiKey: config?.apiKey,\n ...provider_config as CohereProviderSettings,\n })(modelId);\n break;\n case \"anthropic\":\n this.languageModel = createAnthropic({\n apiKey: config?.apiKey,\n ...provider_config as AnthropicProviderSettings,\n }).languageModel(modelId);\n break;\n case \"groq\":\n this.languageModel = createGroq({\n apiKey: config?.apiKey,\n ...provider_config as GroqProviderSettings,\n })(modelId);\n break;\n case \"google\":\n case \"gemini\":\n this.languageModel = createGoogleGenerativeAI({\n apiKey: config?.apiKey,\n ...provider_config as GoogleGenerativeAIProviderSettings,\n })(modelId);\n break;\n default:\n throw new Error(\"Invalid provider\");\n }\n }\n\n async doGenerate(options: LanguageModelV3CallOptions): Promise<LanguageModelV3GenerateResult> {\n const result = await this.languageModel.doGenerate(options);\n return result as LanguageModelV3GenerateResult;\n }\n\n async doStream(options: LanguageModelV3CallOptions): Promise<LanguageModelV3StreamResult> {\n const result = await this.languageModel.doStream(options);\n return result as LanguageModelV3StreamResult;\n }\n}\n\nexport type ProviderSettings = OpenAIProviderSettings | CohereProviderSettings | AnthropicProviderSettings | GroqProviderSettings | GoogleGenerativeAIProviderSettings;\nexport default Mem0AITextGenerator;\n","import { Mem0ProviderSettings } from \"./mem0-provider\";\nimport Mem0AITextGenerator, { ProviderSettings } from \"./provider-response-provider\";\nimport { LanguageModelV3 } from '@ai-sdk/provider';\n\nclass Mem0ClassSelector {\n modelId: string;\n provider_wrapper: string;\n config: Mem0ProviderSettings;\n provider_config?: ProviderSettings;\n static supportedProviders = [\"openai\", \"anthropic\", \"cohere\", \"groq\", \"google\", \"gemini\"];\n\n constructor(modelId: string, config: Mem0ProviderSettings, provider_config?: ProviderSettings) {\n this.modelId = modelId;\n this.provider_wrapper = config.provider || \"openai\";\n this.provider_config = provider_config;\n if(config) this.config = config;\n else this.config = {\n provider: this.provider_wrapper,\n };\n\n // Check if provider_wrapper is supported\n if (!Mem0ClassSelector.supportedProviders.includes(this.provider_wrapper)) {\n throw new Error(`Model not supported: ${this.provider_wrapper}`);\n }\n }\n\n createProvider(): LanguageModelV3 {\n return new Mem0AITextGenerator(this.modelId, this.config , this.provider_config || {});\n }\n}\n\nexport { Mem0ClassSelector };\n","import { LanguageModelV3Prompt } from '@ai-sdk/provider';\nimport { Mem0ConfigSettings } from './mem0-types';\nimport { loadApiKey } from '@ai-sdk/provider-utils';\ninterface MultimodalContent {\n type: 'text' | 'image_url' | 'mdx_url' | 'pdf_url';\n text?: string;\n image_url?: {\n url: string;\n };\n mdx_url?: {\n url: string;\n };\n pdf_url?: {\n url: string;\n };\n}\n\ninterface FileContent {\n type: 'file';\n data: string; // fileDataUrl\n mediaType: string; // e.g., 'application/pdf', 'text/markdown', 'image/jpeg'\n}\n\ninterface Message {\n role: string;\n content: string | MultimodalContent | Array<MultimodalContent>;\n}\n\nconst flattenPrompt = (prompt: LanguageModelV3Prompt) => {\n try {\n return prompt.map((part) => {\n if (part.role === \"user\") {\n if (typeof part.content === 'string') {\n return part.content;\n } else if (Array.isArray(part.content)) {\n return part.content\n .filter((obj) => obj.type === 'text')\n .map((obj) => obj.text)\n .join(\" \");\n } else if (part.content && typeof part.content === 'object' && 'type' in part.content) {\n const content = part.content as any;\n if (content.type === 'text' && content.text) {\n return content.text;\n } else if (content.type === 'file') {\n if (content.mediaType === 'application/pdf') {\n return '[PDF document]';\n } else if (content.mediaType === 'text/markdown' || content.mediaType === 'application/mdx') {\n return '[Markdown document]';\n } else if (content.mediaType && content.mediaType.startsWith('image/')) {\n return '[Image]';\n } else {\n return '[File attachment]';\n }\n }\n }\n return \"[multimodal content]\";\n }\n return \"\";\n }).join(\" \");\n } catch (error) {\n console.error(\"Error in flattenPrompt:\", error);\n return \"\";\n }\n}\n\nconst convertToMem0Format = (messages: LanguageModelV3Prompt) => {\n try {\n return messages.flatMap((message: any) => {\n try {\n if (typeof message.content === 'string') {\n return {\n role: message.role,\n content: message.content,\n };\n }\n else if (Array.isArray(message.content)) {\n return message.content.map((obj: any) => {\n try {\n if (obj.type === \"text\") {\n return {\n role: message.role,\n content: obj.text,\n };\n } else if (obj.type === \"file\") {\n if (obj.mediaType === \"application/pdf\") {\n return {\n role: message.role,\n content: {\n type: \"pdf_url\",\n pdf_url: {\n url: obj.data\n }\n }\n };\n } else if (obj.mediaType === \"text/markdown\" || obj.mediaType === \"application/mdx\") {\n return {\n role: message.role,\n content: {\n type: \"mdx_url\",\n mdx_url: {\n url: obj.data\n }\n }\n };\n } else if (obj.mediaType && obj.mediaType.startsWith(\"image/\")) {\n return {\n role: message.role,\n content: {\n type: \"image_url\",\n image_url: {\n url: obj.data\n }\n }\n };\n }\n } else if (obj.type === \"image_url\" || obj.type === \"image\") {\n return {\n role: message.role,\n content: {\n type: \"image_url\",\n image_url: {\n url: obj.image_url?.url || obj.image?.url || obj.url\n }\n }\n };\n } else if (obj.type === \"mdx_url\" || obj.type === \"mdx\") {\n return {\n role: message.role,\n content: {\n type: \"mdx_url\",\n mdx_url: {\n url: obj.mdx_url?.url || obj.mdx?.url || obj.url\n }\n }\n };\n } else if (obj.type === \"pdf_url\" || obj.type === \"pdf\") {\n return {\n role: message.role,\n content: {\n type: \"pdf_url\",\n pdf_url: {\n url: obj.pdf_url?.url || obj.pdf?.url || obj.url\n }\n }\n };\n }\n return null;\n } catch (error) {\n console.error(\"Error processing content object:\", error);\n return null;\n }\n }).filter((item: null) => item !== null);\n } else {\n const obj = message.content;\n if (obj.type === \"text\") {\n return {\n role: message.role,\n content: obj.text,\n };\n } else if (obj.type === \"file\") {\n if (obj.mediaType === \"application/pdf\") {\n return {\n role: message.role,\n content: {\n type: \"pdf_url\",\n pdf_url: {\n url: obj.data\n }\n }\n };\n } else if (obj.mediaType === \"text/markdown\" || obj.mediaType === \"application/mdx\") {\n return {\n role: message.role,\n content: {\n type: \"mdx_url\",\n mdx_url: {\n url: obj.data\n }\n }\n };\n } else if (obj.mediaType && obj.mediaType.startsWith(\"image/\")) {\n return {\n role: message.role,\n content: {\n type: \"image_url\",\n image_url: {\n url: obj.data\n }\n }\n };\n }\n } else if (obj.type === \"image_url\" || obj.type === \"image\") {\n return {\n role: message.role,\n content: {\n type: \"image_url\",\n image_url: {\n url: obj.image_url?.url || obj.image?.url || obj.url\n }\n }\n };\n } else if (obj.type === \"mdx_url\" || obj.type === \"mdx\") {\n return {\n role: message.role,\n content: {\n type: \"mdx_url\",\n mdx_url: {\n url: obj.mdx_url?.url || obj.mdx?.url || obj.url\n }\n }\n };\n } else if (obj.type === \"pdf_url\" || obj.type === \"pdf\") {\n return {\n role: message.role,\n content: {\n type: \"pdf_url\",\n pdf_url: {\n url: obj.pdf_url?.url || obj.pdf?.url || obj.url\n }\n }\n };\n }\n return null;\n }\n } catch (error) {\n console.error(\"Error processing message:\", error);\n return [];\n }\n });\n } catch (error) {\n console.error(\"Error in convertToMem0Format:\", error);\n return [];\n }\n}\n\nconst searchInternalMemories = async (query: string, config?: Mem0ConfigSettings, top_k: number = 10) => {\n try {\n // v3: entity IDs go inside the filters object, not as top-level params\n const filters: Record<string, any> = {\n ...(config?.filters ?? {}),\n };\n if (config?.user_id) {\n filters.user_id = config.user_id;\n }\n if (config?.app_id) {\n filters.app_id = config.app_id;\n }\n if (config?.agent_id) {\n filters.agent_id = config.agent_id;\n }\n if (config?.run_id) {\n filters.run_id = config.run_id;\n }\n\n const apiKey = loadApiKey({\n apiKey: config?.mem0ApiKey,\n environmentVariableName: \"MEM0_API_KEY\",\n description: \"Mem0\",\n });\n\n const body: Record<string, any> = {\n query,\n filters,\n top_k: config?.top_k ?? top_k,\n };\n if (config?.threshold != null) {\n body.threshold = config.threshold;\n }\n if (config?.rerank != null) {\n body.rerank = config.rerank;\n }\n if (config?.metadata) {\n body.metadata = config.metadata;\n }\n\n const options = {\n method: 'POST',\n headers: {\n Authorization: `Token ${apiKey}`,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body),\n };\n\n const baseUrl = config?.host || 'https://api.mem0.ai';\n const response = await fetch(`${baseUrl}/v3/memories/search/`, options);\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n const data = await response.json();\n return data;\n } catch (error) {\n console.error(\"Error in searchInternalMemories:\", error);\n throw error;\n }\n}\n\nconst addMemories = async (messages: LanguageModelV3Prompt, config?: Mem0ConfigSettings) => {\n try {\n let finalMessages: Array<Message> = [];\n if (typeof messages === \"string\") {\n finalMessages = [{ role: \"user\", content: messages }];\n } else {\n finalMessages = convertToMem0Format(messages);\n }\n const response = await updateMemories(finalMessages, config);\n return response;\n } catch (error) {\n console.error(\"Error in addMemories:\", error);\n throw error;\n }\n}\n\nconst updateMemories = async (messages: Array<Message>, config?: Mem0ConfigSettings) => {\n try {\n const apiKey = loadApiKey({\n apiKey: config?.mem0ApiKey,\n environmentVariableName: \"MEM0_API_KEY\",\n description: \"Mem0\",\n });\n\n const body: Record<string, any> = { messages };\n if (config?.user_id) body.user_id = config.user_id;\n if (config?.app_id) body.app_id = config.app_id;\n if (config?.agent_id) body.agent_id = config.agent_id;\n if (config?.run_id) body.run_id = config.run_id;\n if (config?.metadata) body.metadata = config.metadata;\n if (config?.infer != null) body.infer = config.infer;\n\n const options = {\n method: 'POST',\n headers: {\n Authorization: `Token ${apiKey}`,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body),\n };\n\n const baseUrl = config?.host || 'https://api.mem0.ai';\n const response = await fetch(`${baseUrl}/v3/memories/add/`, options);\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n const data = await response.json();\n return data;\n } catch (error) {\n console.error(\"Error in updateMemories:\", error);\n throw error;\n }\n}\n\nconst retrieveMemories = async (prompt: LanguageModelV3Prompt | string, config?: Mem0ConfigSettings) => {\n try {\n const message = typeof prompt === 'string' ? prompt : flattenPrompt(prompt);\n const systemPrompt = \"These are the memories I have stored. Give more weightage to the question by users and try to answer that first. You have to modify your answer based on the memories I have provided. If the memories are irrelevant you can ignore them. Also don't reply to this section of the prompt, or the memories, they are only for your reference. The System prompt starts after text System Message: \\n\\n\";\n\n const data = await searchInternalMemories(message, config);\n // The API response may be a flat array or an object with a results key\n const memories: any[] = Array.isArray(data) ? data : (data?.results ?? []);\n\n if (memories.length === 0) {\n return \"\";\n }\n\n const memoriesText = memories\n .map((memory: any) => `Memory: ${memory.memory}\\n\\n`)\n .join(\"\\n\\n\");\n\n return `System Message: ${systemPrompt} ${memoriesText}`;\n } catch (error) {\n console.error(\"Error in retrieveMemories:\", error);\n throw error;\n }\n}\n\nconst getMemories = async (prompt: LanguageModelV3Prompt | string, config?: Mem0ConfigSettings) => {\n try {\n const message = typeof prompt === 'string' ? prompt : flattenPrompt(prompt);\n const data = await searchInternalMemories(message, config);\n // Normalize: always return a flat array regardless of API response shape\n return Array.isArray(data) ? data : (data?.results ?? []);\n } catch (error) {\n console.error(\"Error in getMemories:\", error);\n throw error;\n }\n}\n\nconst searchMemories = async (prompt: LanguageModelV3Prompt | string, config?: Mem0ConfigSettings) => {\n try {\n const message = typeof prompt === 'string' ? prompt : flattenPrompt(prompt);\n const memories = await searchInternalMemories(message, config);\n return memories;\n } catch (error) {\n console.error(\"Error in searchMemories:\", error);\n return [];\n }\n}\n\nexport {addMemories, updateMemories, retrieveMemories, flattenPrompt, searchMemories, getMemories};\n","/* eslint-disable camelcase */\nimport {\n LanguageModelV3,\n LanguageModelV3CallOptions,\n LanguageModelV3GenerateResult,\n LanguageModelV3Message,\n LanguageModelV3Source,\n LanguageModelV3StreamResult,\n} from '@ai-sdk/provider';\n\nimport { Mem0ChatConfig, Mem0ChatModelId, Mem0ChatSettings, Mem0ConfigSettings } from \"./mem0-types\";\nimport { Mem0ClassSelector } from \"./mem0-provider-selector\";\nimport { Mem0ProviderSettings } from \"./mem0-provider\";\nimport { addMemories, getMemories } from \"./mem0-utils\";\n\nconst generateRandomId = () => {\n return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n}\n\nexport class Mem0GenericLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = \"v3\";\n readonly supportedUrls: Record<string, RegExp[]> = {\n '*': [/.*/]\n };\n\n constructor(\n public readonly modelId: Mem0ChatModelId,\n public readonly settings: Mem0ChatSettings,\n public readonly config: Mem0ChatConfig,\n public readonly provider_config?: Mem0ProviderSettings\n ) {\n this.provider = config.provider ?? \"openai\";\n }\n\n provider: string;\n\n private async processMemories(messagesPrompts: LanguageModelV3Message[], mem0Config: Mem0ConfigSettings) {\n try {\n // Add new memories — await to ensure writes complete before returning\n try {\n await addMemories(messagesPrompts, mem0Config);\n } catch (e) {\n console.error(\"Error while adding memories\");\n }\n\n // Get memories (always returns an array since graph support is removed)\n const memories: any[] = await getMemories(messagesPrompts, mem0Config) ?? [];\n\n const mySystemPrompt = \"These are the memories I have stored. Give more weightage to the question by users and try to answer that first. You have to modify your answer based on the memories I have provided. If the memories are irrelevant you can ignore them. Also don't reply to this section of the prompt, or the memories, they are only for your reference. The System prompt starts after text System Message: \\n\\n\";\n\n let memoriesText = \"\";\n try {\n memoriesText = memories\n ?.map((memory: any) => `Memory: ${memory?.memory}\\n\\n`)\n .join(\"\\n\\n\");\n } catch (e) {\n console.error(\"Error while parsing memories\");\n }\n\n const memoriesPrompt = `System Message: ${mySystemPrompt} ${memoriesText} `;\n\n // Clone the prompt array to avoid mutating the caller's reference on retries\n const updatedPrompts = [...messagesPrompts];\n\n if (memories?.length > 0) {\n const systemPrompt: LanguageModelV3Message = {\n role: \"system\",\n content: memoriesPrompt\n };\n updatedPrompts.unshift(systemPrompt);\n }\n\n return { memories, messagesPrompts: updatedPrompts };\n } catch (e) {\n console.error(\"Error while processing memories\");\n return { memories: [], messagesPrompts: [...messagesPrompts] };\n }\n }\n\n async doGenerate(options: LanguageModelV3CallOptions): Promise<LanguageModelV3GenerateResult> {\n const provider = this.config.provider;\n const mem0_api_key = this.config.mem0ApiKey;\n\n const settings: Mem0ProviderSettings = {\n provider: provider,\n mem0ApiKey: mem0_api_key,\n apiKey: this.config.apiKey,\n modelType: this.config.modelType,\n }\n\n const mem0Config: Mem0ConfigSettings = {\n mem0ApiKey: mem0_api_key,\n ...this.config.mem0Config,\n ...this.settings,\n }\n\n const selector = new Mem0ClassSelector(this.modelId, settings, this.provider_config);\n\n const { memories, messagesPrompts: updatedPrompts } = await this.processMemories(options.prompt, mem0Config);\n\n const model = selector.createProvider();\n\n const ans = await model.doGenerate({\n ...options,\n prompt: updatedPrompts,\n });\n\n if (!memories || memories?.length === 0) {\n return ans;\n }\n\n const mem0Source: LanguageModelV3Source = {\n type: \"source\",\n sourceType: \"url\",\n id: \"mem0-\" + generateRandomId(),\n url: \"https://app.mem0.ai?utm_source=oss&utm_medium=vercel-ai-sdk-src\",\n title: \"Mem0 Memories\",\n providerMetadata: {\n mem0: {\n memories: memories,\n memoriesText: memories\n ?.map((memory: any) => memory?.memory)\n .join(\"\\n\\n\"),\n },\n },\n };\n\n return {\n ...ans,\n content: [...(ans.content ?? []), mem0Source],\n };\n }\n\n async doStream(options: LanguageModelV3CallOptions): Promise<LanguageModelV3StreamResult> {\n try {\n const provider = this.config.provider;\n const mem0_api_key = this.config.mem0ApiKey;\n\n const settings: Mem0ProviderSettings = {\n provider: provider,\n mem0ApiKey: mem0_api_key,\n apiKey: this.config.apiKey,\n modelType: this.config.modelType,\n }\n\n const mem0Config: Mem0ConfigSettings = {\n mem0ApiKey: mem0_api_key,\n ...this.config.mem0Config,\n ...this.settings,\n }\n\n const selector = new Mem0ClassSelector(this.modelId, settings, this.provider_config);\n\n const { messagesPrompts: updatedPrompts } = await this.processMemories(options.prompt, mem0Config);\n\n const baseModel = selector.createProvider();\n\n const streamResponse = await baseModel.doStream({\n ...options,\n prompt: updatedPrompts,\n });\n\n // Return the full stream response, preserving all V3 fields (warnings, etc.)\n return streamResponse;\n } catch (error) {\n console.error(\"Error in doStream:\", error);\n throw new Error(\"Streaming failed or method not implemented.\");\n }\n }\n}\n","import { ProviderV3 } from '@ai-sdk/provider';\nimport { LanguageModelV3 } from '@ai-sdk/provider';\nimport { withoutTrailingSlash } from \"@ai-sdk/provider-utils\";\nimport { Mem0ChatModelId, Mem0ChatSettings, Mem0Config } from \"./mem0-types\";\nimport { Mem0GenericLanguageModel } from \"./mem0-generic-language-model\";\nimport { LLMProviderSettings } from \"./mem0-types\";\n\nexport interface Mem0Provider extends ProviderV3 {\n (modelId: Mem0ChatModelId, settings?: Mem0ChatSettings): LanguageModelV3;\n\n chat(modelId: Mem0ChatModelId, settings?: Mem0ChatSettings): LanguageModelV3;\n completion(modelId: Mem0ChatModelId, settings?: Mem0ChatSettings): LanguageModelV3;\n\n languageModel(\n modelId: Mem0ChatModelId,\n settings?: Mem0ChatSettings\n ): LanguageModelV3;\n}\n\nexport interface Mem0ProviderSettings {\n baseURL?: string;\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept\n * requests or to provide a custom fetch implementation for e.g. testing\n */\n fetch?: typeof fetch;\n /**\n * @internal\n */\n generateId?: () => string;\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string | undefined>;\n name?: string;\n mem0ApiKey?: string;\n apiKey?: string;\n provider?: string;\n modelType?: \"completion\" | \"chat\";\n mem0Config?: Mem0Config;\n\n /**\n * The configuration for the provider.\n */\n config?: LLMProviderSettings ;\n}\n\nexport function createMem0(\n options: Mem0ProviderSettings = {\n provider: \"openai\",\n }\n): Mem0Provider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ?? \"https://api.openai.com\";\n const getHeaders = () => ({\n ...options.headers,\n });\n\n const createGenericModel = (\n modelId: Mem0ChatModelId,\n settings: Mem0ChatSettings = {}\n ) =>\n new Mem0GenericLanguageModel(\n modelId,\n settings,\n {\n baseURL,\n fetch: options.fetch,\n headers: getHeaders(),\n provider: options.provider || \"openai\",\n name: options.name,\n mem0ApiKey: options.mem0ApiKey,\n apiKey: options.apiKey,\n mem0Config: options.mem0Config,\n },\n options.config\n );\n\n const createCompletionModel = (\n modelId: Mem0ChatModelId,\n settings: Mem0ChatSettings = {}\n ) =>\n new Mem0GenericLanguageModel(\n modelId,\n settings,\n {\n baseURL,\n fetch: options.fetch,\n headers: getHeaders(),\n provider: options.provider || \"openai\",\n name: options.name,\n mem0ApiKey: options.mem0ApiKey,\n apiKey: options.apiKey,\n mem0Config: options.mem0Config,\n modelType: \"completion\",\n },\n options.config\n );\n\n const createChatModel = (\n modelId: Mem0ChatModelId,\n settings: Mem0ChatSettings = {}\n ) =>\n new Mem0GenericLanguageModel(\n modelId,\n settings,\n {\n baseURL,\n fetch: options.fetch,\n headers: getHeaders(),\n provider: options.provider || \"openai\",\n name: options.name,\n mem0ApiKey: options.mem0ApiKey,\n apiKey: options.apiKey,\n mem0Config: options.mem0Config,\n modelType: \"chat\",\n },\n options.config\n );\n\n const provider = function (\n modelId: Mem0ChatModelId,\n settings: Mem0ChatSettings = {}\n ) {\n if (new.target) {\n throw new Error(\n \"The Mem0 model function cannot be called with the new keyword.\"\n );\n }\n\n return createGenericModel(modelId, settings);\n };\n\n provider.specificationVersion = 'v3';\n provider.languageModel = createGenericModel;\n provider.completion = createCompletionModel;\n provider.chat = createChatModel;\n\n return provider as unknown as Mem0Provider;\n}\n\nexport const mem0 = createMem0();\n"],"mappings":"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","names":["_a","_b","_c","_d","_e","_f","withoutTrailingSlash","withoutTrailingSlash"]}