@mem0/vercel-ai-provider
Version:
Vercel AI Provider for providing memory to LLMs
1 lines • 41.6 kB
Source Map (JSON)
{"version":3,"sources":["../src/mem0-facade.ts","../src/mem0-generic-language-model.ts","../src/provider-response-provider.ts","../src/mem0-provider-selector.ts","../src/mem0-utils.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) ?? 'http://127.0.0.1:11434/api'\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}","/* eslint-disable camelcase */\nimport {\n LanguageModelV2CallOptions,\n LanguageModelV2Message,\n LanguageModelV2Source,\n LanguageModelV2StreamPart\n} from '@ai-sdk/provider';\n\nimport { LanguageModelV2 } from '@ai-sdk/provider';\nimport { simulateStreamingMiddleware, wrapLanguageModel } from 'ai';\n\nimport { Mem0ChatConfig, Mem0ChatModelId, Mem0ChatSettings, Mem0ConfigSettings, Mem0StreamResponse } from \"./mem0-types\";\nimport { Mem0ClassSelector } from \"./mem0-provider-selector\";\nimport { Mem0ProviderSettings } from \"./mem0-provider\";\nimport { addMemories, getMemories, retrieveMemories } 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 LanguageModelV2 {\n readonly specificationVersion = \"v2\";\n readonly defaultObjectGenerationMode = \"json\";\n // We don't support images for now\n readonly supportsImageUrls = false;\n // Allow All Media Types for now\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: LanguageModelV2Message[], mem0Config: Mem0ConfigSettings) {\n try {\n // Add New Memories\n addMemories(messagesPrompts, mem0Config).then((res) => {\n return res;\n }).catch((e) => {\n console.error(\"Error while adding memories\");\n return { memories: [], messagesPrompts: [] };\n });\n\n // Get Memories\n let memories = 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 const isGraphEnabled = mem0Config?.enable_graph;\n \n let memoriesText = \"\";\n let memoriesText2 = \"\";\n try {\n // @ts-ignore\n if (isGraphEnabled) {\n memoriesText = memories?.results?.map((memory: any) => {\n return `Memory: ${memory?.memory}\\n\\n`;\n }).join(\"\\n\\n\");\n\n memoriesText2 = memories?.relations?.map((memory: any) => {\n return `Relation: ${memory?.source} -> ${memory?.relationship} -> ${memory?.target} \\n\\n`;\n }).join(\"\\n\\n\");\n } else {\n memoriesText = memories?.map((memory: any) => {\n return `Memory: ${memory?.memory}\\n\\n`;\n }).join(\"\\n\\n\");\n }\n } catch(e) {\n console.error(\"Error while parsing memories\");\n }\n\n let graphPrompt = \"\";\n if (isGraphEnabled) {\n graphPrompt = `HERE ARE THE GRAPHS RELATIONS FOR THE PREFERENCES OF THE USER:\\n\\n ${memoriesText2}`;\n }\n\n const memoriesPrompt = `System Message: ${mySystemPrompt} ${memoriesText} ${graphPrompt} `;\n\n // System Prompt - The memories go as a system prompt\n const systemPrompt: LanguageModelV2Message = {\n role: \"system\",\n content: memoriesPrompt\n };\n\n // Add the system prompt to the beginning of the messages if there are memories\n if (memories?.length > 0) {\n messagesPrompts.unshift(systemPrompt);\n }\n\n if (isGraphEnabled) {\n memories = memories?.results;\n }\n\n return { memories, messagesPrompts };\n } catch(e) {\n console.error(\"Error while processing memories\");\n return { memories: [], messagesPrompts };\n }\n }\n\n async doGenerate(options: LanguageModelV2CallOptions): Promise<Awaited<ReturnType<LanguageModelV2['doGenerate']>>> {\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 }\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 let messagesPrompts = options.prompt;\n \n // Process memories and update prompts\n const { memories, messagesPrompts: updatedPrompts } = await this.processMemories(messagesPrompts, mem0Config);\n \n const model = selector.createProvider();\n\n const ans = await model.doGenerate({\n ...options,\n prompt: updatedPrompts,\n });\n \n // If there are no memories, return the original response\n if (!memories || memories?.length === 0) {\n return ans;\n }\n \n try {\n // Create sources array with existing sources\n const sources: LanguageModelV2Source[] = [\n {\n type: \"source\",\n title: \"Mem0 Memories\",\n sourceType: \"url\",\n id: \"mem0-\" + generateRandomId(),\n url: \"https://app.mem0.ai\",\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 } catch (e) {\n console.error(\"Error while creating sources\");\n }\n \n return {\n ...ans,\n // sources\n };\n } catch (error) {\n // Handle errors properly\n console.error(\"Error in doGenerate:\", error);\n throw new Error(\"Failed to generate response.\");\n }\n }\n\n async doStream(options: LanguageModelV2CallOptions): Promise<Awaited<ReturnType<LanguageModelV2['doStream']>>> {\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 let messagesPrompts = options.prompt;\n \n // Process memories and update prompts\n const { memories, messagesPrompts: updatedPrompts } = await this.processMemories(messagesPrompts, mem0Config);\n\n const baseModel = selector.createProvider();\n\n // Wrap the model with streaming middleware using the new Vercel AI SDK 5.0 approach\n const model = wrapLanguageModel({\n model: baseModel,\n middleware: simulateStreamingMiddleware(),\n });\n\n const streamResponse = await model.doStream({\n ...options,\n prompt: updatedPrompts,\n });\n\n // If there are no memories, return the original stream\n if (!memories || memories?.length === 0) {\n return streamResponse;\n }\n\n // Create a new stream that includes memory sources\n const originalStream = streamResponse.stream;\n \n // Create a transform stream that adds memory sources at the beginning\n const transformStream = new TransformStream({\n start(controller) {\n // Add source chunks for each memory at the beginning\n try {\n if (Array.isArray(memories) && memories?.length > 0) {\n // Create a single source that contains all memories\n controller.enqueue({\n type: 'source',\n title: \"Mem0 Memories\",\n sourceType: \"url\",\n id: \"mem0-\" + generateRandomId(),\n url: \"https://app.mem0.ai\",\n\n providerOptions: {\n mem0: {\n memories: memories,\n memoriesText: memories?.map((memory: any) => memory?.memory).join(\"\\n\\n\")\n }\n }\n });\n \n // Also add individual memory sources for more detailed information\n memories?.forEach((memory: any) => {\n controller.enqueue({\n type: 'source',\n title: memory?.title || \"Memory\",\n sourceType: \"url\",\n id: \"mem0-memory-\" + generateRandomId(),\n url: \"https://app.mem0.ai\",\n\n providerOptions: {\n mem0: {\n memory: memory,\n memoryText: memory?.memory\n }\n }\n });\n });\n }\n } catch (error) {\n console.error(\"Error adding memory sources:\", error);\n }\n },\n transform(chunk, controller) {\n // Pass through all chunks from the original stream\n controller.enqueue(chunk);\n }\n });\n\n // Pipe the original stream through our transform stream\n const enhancedStream = originalStream.pipeThrough(transformStream);\n\n // Return a new stream response with our enhanced stream\n return {\n stream: enhancedStream,\n request: streamResponse.request,\n response: streamResponse.response,\n };\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 { LanguageModelV2, LanguageModelV2CallOptions } 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 LanguageModelV2 {\n readonly specificationVersion = \"v2\";\n readonly defaultObjectGenerationMode = \"json\";\n readonly supportsImageUrls = false;\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: LanguageModelV2CallOptions): Promise<Awaited<ReturnType<LanguageModelV2['doGenerate']>>> {\n const result = await this.languageModel.doGenerate(options);\n return result as Awaited<ReturnType<LanguageModelV2['doGenerate']>>;\n }\n\n async doStream(options: LanguageModelV2CallOptions): Promise<Awaited<ReturnType<LanguageModelV2['doStream']>>> {\n const result = await this.languageModel.doStream(options);\n return result as Awaited<ReturnType<LanguageModelV2['doStream']>>;\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 { LanguageModelV2 } 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\"];\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(): LanguageModelV2 {\n return new Mem0AITextGenerator(this.modelId, this.config , this.provider_config || {});\n }\n}\n\nexport { Mem0ClassSelector };\n","import { LanguageModelV2Prompt } from '@ai-sdk/provider';\nimport { Mem0ConfigSettings } from './mem0-types';\nimport { loadApiKey } from '@ai-sdk/provider-utils';\ninterface Message {\n role: string;\n content: string | Array<{type: string, text: string}>;\n}\n\nconst flattenPrompt = (prompt: LanguageModelV2Prompt) => {\n try {\n return prompt.map((part) => {\n if (part.role === \"user\") {\n return part.content\n .filter((obj) => obj.type === 'text')\n .map((obj) => obj.text)\n .join(\" \");\n }\n return \"\";\n }).join(\" \");\n } catch (error) {\n console.error(\"Error in flattenPrompt:\", error);\n return \"\";\n }\n}\n\nconst convertToMem0Format = (messages: LanguageModelV2Prompt) => {\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 {\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 }\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 }\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 = 5) => {\n try {\n const filters: { AND: Array<{ [key: string]: string | undefined }> } = {\n AND: [],\n };\n if (config?.user_id) {\n filters.AND.push({\n user_id: config.user_id,\n });\n }\n if (config?.app_id) {\n filters.AND.push({\n app_id: config.app_id,\n });\n }\n if (config?.agent_id) {\n filters.AND.push({\n agent_id: config.agent_id,\n });\n }\n if (config?.run_id) {\n filters.AND.push({\n run_id: config.run_id,\n });\n }\n const org_project_filters = {\n org_id: config&&config.org_id,\n project_id: config&&config.project_id,\n org_name: !config?.org_id ? config&&config.org_name : undefined,\n project_name: !config?.org_id ? config&&config.project_name : undefined,\n }\n\n const apiKey = loadApiKey({\n apiKey: (config&&config.mem0ApiKey),\n environmentVariableName: \"MEM0_API_KEY\",\n description: \"Mem0\",\n });\n\n const options = {\n method: 'POST',\n headers: {\n Authorization: `Token ${apiKey}`,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n query,\n filters,\n ...config,\n top_k: config&&config.top_k || top_k,\n version: \"v2\",\n output_format: \"v1.1\",\n ...org_project_filters\n }),\n };\n\n const response = await fetch('https://api.mem0.ai/v2/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: LanguageModelV2Prompt, 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&&config.mem0ApiKey),\n environmentVariableName: \"MEM0_API_KEY\",\n description: \"Mem0\",\n });\n\n const options = {\n method: 'POST',\n headers: {\n Authorization: `Token ${apiKey}`,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({messages, ...config}),\n };\n\n const response = await fetch('https://api.mem0.ai/v1/memories/', 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: LanguageModelV2Prompt | 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 memories = await searchInternalMemories(message, config);\n let memoriesText1 = \"\";\n let memoriesText2 = \"\";\n let graphPrompt = \"\";\n\n try {\n memoriesText1 = memories?.results?.map((memory: any) => {\n return `Memory: ${memory.memory}\\n\\n`;\n }).join(\"\\n\\n\");\n\n if (config?.enable_graph) {\n memoriesText2 = memories?.relations?.map((memory: any) => {\n return `Relation: ${memory.source} -> ${memory.relationship} -> ${memory.target} \\n\\n`;\n }).join(\"\\n\\n\");\n graphPrompt = `HERE ARE THE GRAPHS RELATIONS FOR THE PREFERENCES OF THE USER:\\n\\n ${memoriesText2}`;\n }\n } catch (error) {\n console.error(\"Error while parsing memories:\", error);\n }\n\n if (!memories || memories?.length === 0) {\n return \"\";\n }\n\n return `System Message: ${systemPrompt} ${memoriesText1} ${graphPrompt}`;\n } catch (error) {\n console.error(\"Error in retrieveMemories:\", error);\n throw error;\n }\n}\n\nconst getMemories = async (prompt: LanguageModelV2Prompt | string, config?: Mem0ConfigSettings) => {\n try {\n const message = typeof prompt === 'string' ? prompt : flattenPrompt(prompt);\n const memories = await searchInternalMemories(message, config);\n \n if (!config?.enable_graph) {\n return memories?.results;\n }\n return memories;\n } catch (error) {\n console.error(\"Error in getMemories:\", error);\n throw error;\n }\n}\n\nconst searchMemories = async (prompt: LanguageModelV2Prompt | 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};","import { ProviderV2 } from '@ai-sdk/provider';\nimport { LanguageModelV2 } 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 ProviderV2 {\n (modelId: Mem0ChatModelId, settings?: Mem0ChatSettings): LanguageModelV2;\n\n chat(modelId: Mem0ChatModelId, settings?: Mem0ChatSettings): LanguageModelV2;\n completion(modelId: Mem0ChatModelId, settings?: Mem0ChatSettings): LanguageModelV2;\n\n languageModel(\n modelId: Mem0ChatModelId,\n settings?: Mem0ChatSettings\n ): LanguageModelV2;\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>;\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) ?? \"http://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: \"completion\",\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.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":["withoutTrailingSlash","withoutTrailingSlash"]}