docs/integrations/vercel-ai-sdk.mdx
The Mem0 AI SDK Provider is a library developed by Mem0 to integrate with the Vercel AI SDK. This library brings enhanced AI interaction capabilities to your applications by introducing persistent memory functionality.
<Note type="info"> Mem0 AI SDK Provider v3.0.0 supports <strong>Vercel AI SDK v6</strong> (<code>LanguageModelV3</code> / <code>ProviderV3</code>). If you are upgrading from v2.x, see the <a href="https://ai-sdk.dev/docs/migration-guides/migration-guide-6-0">AI SDK v6 migration guide</a>. </Note>Install the SDK provider and AI SDK:
npm install @mem0/vercel-ai-provider ai@^6
@mem0/vercel-ai-provider v3.0.0 requires:
ai v6+ (^6.0.199)@ai-sdk/provider v3+ (^3.0.10)@ai-sdk/openai@^3, @ai-sdk/anthropic@^3, @ai-sdk/google@^3, @ai-sdk/groq@^3, @ai-sdk/cohere@^3Get your Mem0 API Key from the <a href="https://app.mem0.ai/dashboard/api-keys?utm_source=oss&utm_medium=integration-vercel-ai-sdk" rel="nofollow">Mem0 Dashboard</a>.
Initialize the Mem0 Client in your application:
import { createMem0 } from "@mem0/vercel-ai-provider";
const mem0 = createMem0({
provider: "openai",
mem0ApiKey: "m0-xxx",
apiKey: "provider-api-key",
config: {
// Options for the upstream LLM provider (e.g. baseURL)
},
// Optional Mem0 Global Config
mem0Config: {
user_id: "mem0-user-id",
},
});
Note: The
openaiprovider is set as default. Consider usingMEM0_API_KEYandOPENAI_API_KEYas environment variables for security.
Note: The
mem0Configis optional. It is used to set the global config for the Mem0 Client (eg.user_id,agent_id,app_id,run_idetc).
Add Memories to Enhance Context:
import { addMemories } from "@mem0/vercel-ai-provider";
const messages = [
{ role: "user", content: [{ type: "text", text: "I love red cars." }] },
];
await addMemories(messages, { user_id: "borat" });
await addMemories(messages, { user_id: "borat", mem0ApiKey: "m0-xxx" });
await retrieveMemories(prompt, { user_id: "borat", mem0ApiKey: "m0-xxx" });
await getMemories(prompt, { user_id: "borat", mem0ApiKey: "m0-xxx" });
For standalone features, such as
addMemories,retrieveMemories, andgetMemories, you must either setMEM0_API_KEYas an environment variable or pass it directly in the function call.
getMemorieswill return raw memories in the form of an array of objects, whileretrieveMemorieswill return a response in string format with a system prompt ingested with the retrieved memories.
import { generateText } from "ai";
import { createMem0 } from "@mem0/vercel-ai-provider";
const mem0 = createMem0();
const { text } = await generateText({
model: mem0("gpt-5-mini", { user_id: "borat" }),
prompt: "Suggest me a good car to buy!",
});
import { generateText } from "ai";
import { openai } from "@ai-sdk/openai";
import { retrieveMemories } from "@mem0/vercel-ai-provider";
const prompt = "Suggest me a good car to buy.";
const memories = await retrieveMemories(prompt, { user_id: "borat" });
const { text } = await generateText({
model: openai("gpt-5-mini"),
prompt: prompt,
system: memories,
});
import { generateText } from "ai";
import { createMem0 } from "@mem0/vercel-ai-provider";
const mem0 = createMem0();
const { text } = await generateText({
model: mem0("gpt-5-mini", { user_id: "borat" }),
messages: [
{
role: "user",
content: [
{ type: "text", text: "Suggest me a good car to buy." },
{ type: "text", text: "Why is it better than the other cars for me?" },
],
},
],
});
import { streamText } from "ai";
import { createMem0 } from "@mem0/vercel-ai-provider";
const mem0 = createMem0();
const { textStream } = streamText({
model: mem0("gpt-5-mini", {
user_id: "borat",
}),
prompt: "Suggest me a good car to buy! Why is it better than the other cars for me? Give options for every price range.",
});
for await (const textPart of textStream) {
process.stdout.write(textPart);
}
import { generateText, tool } from "ai";
import { createMem0 } from "@mem0/vercel-ai-provider";
import { z } from "zod";
const mem0 = createMem0({
provider: "anthropic",
apiKey: "anthropic-api-key",
mem0Config: {
user_id: "borat"
}
});
const result = await generateText({
model: mem0('claude-sonnet-4-20250514'),
tools: {
weather: tool({
description: 'Get the weather in a location',
parameters: z.object({
location: z.string().describe('The location to get the weather for'),
}),
execute: async ({ location }) => ({
location,
temperature: 72 + Math.floor(Math.random() * 21) - 10,
}),
}),
},
prompt: "What the temperature in the city that I live in?",
});
console.log(result);
generateText and streamText responses include Mem0 memories as a source, giving you programmatic access to the memories that influenced the response:
const { text, sources } = await generateText({
model: mem0("gpt-5-mini", { user_id: "borat" }),
prompt: "Suggest me a good car to buy!",
});
// sources[0].title === "Mem0 Memories"
// sources[0].providerMetadata.mem0.memories — array of memory objects
console.log(sources);
The same can be done for streamText as well.
Mem0 AI SDK supports file processing with memory context. Here's an example of analyzing a PDF file:
import { streamText } from "ai";
import { createMem0 } from "@mem0/vercel-ai-provider";
import { readFileSync } from 'fs';
import { join } from 'path';
const mem0 = createMem0({
provider: "google",
mem0ApiKey: "m0-xxx",
config: {
apiKey: "google-api-key"
},
mem0Config: {
user_id: "alice",
},
});
async function main() {
const filePath = join(process.cwd(), 'my_pdf.pdf');
const fileBuffer = readFileSync(filePath);
const arrayBuffer = fileBuffer.buffer.slice(fileBuffer.byteOffset, fileBuffer.byteOffset + fileBuffer.byteLength);
const uint8Array = new Uint8Array(arrayBuffer);
const charArray = Array.from(uint8Array, byte => String.fromCharCode(byte));
const binaryString = charArray.join('');
const base64Data = Buffer.from(binaryString, 'binary').toString('base64');
const fileDataUrl = `data:application/pdf;base64,${base64Data}`;
const { textStream } = streamText({
model: mem0("gemini-2.5-flash"),
messages: [
{
role: 'user',
content: [
{
type: 'text',
text: 'Analyze the following PDF and generate a summary.',
},
{
type: 'file',
data: fileDataUrl,
mediaType: 'application/pdf',
},
],
},
],
});
for await (const textPart of textStream) {
process.stdout.write(textPart);
}
}
main();
Note: File support is available with providers that support multimodal capabilities like Google's Gemini models. The example shows how to process PDF files, but you can also work with images, text files, and other supported formats.
| Provider | Configuration Value |
|---|---|
| OpenAI | openai |
| Anthropic | anthropic |
| Google / Gemini | google or gemini |
| Groq | groq |
| Cohere | cohere |
Note: You can use either
geminias the provider value for Google Gemini models. Both map to the@ai-sdk/googlepackage internally.
These options can be passed per-request when creating a model instance:
| Option | Type | Description |
|---|---|---|
user_id | string | User identifier for memory scoping |
agent_id | string | Agent identifier |
app_id | string | Application identifier |
run_id | string | Run/session identifier |
metadata | object | Custom metadata for memories |
filters | object | Filters for memory search |
infer | boolean | Enable inference-based retrieval |
top_k | number | Number of memories to retrieve (default: 10) |
threshold | number | Relevance threshold for search |
rerank | boolean | Enable reranking of results |
page | number | Page number for pagination |
page_size | number | Results per page |
createMem0(): Initializes a new Mem0 provider instance implementing ProviderV3.retrieveMemories(): Retrieves memory context for prompts as a formatted system prompt string.getMemories(): Get memories from your profile in array format.addMemories(): Adds user memories to enhance contextual responses.If you're upgrading from @mem0/vercel-ai-provider v2.x:
npm install ai@^6 and update all @ai-sdk/* provider packages to ^3.xorg_id, project_id, output_format, filter_memories, async_mode, enable_graph from your configenable_graph, graph prompts) have been removed. Graph memory is now a project-level setting on the Mem0 PlatformLanguageModelV2Prompt is now LanguageModelV3Prompt if you import types directlyUser Identification: Use a unique user_id for consistent memory retrieval.
Memory Cleanup: Regularly clean up unused memory data.
Sources: Access result.sources to inspect which memories influenced the response.
Note: We also have support for
agent_id,app_id, andrun_id. Refer Docs.
Mem0's Vercel AI SDK enables the creation of intelligent, context-aware applications with persistent memory and seamless integration.
<CardGroup cols={2}> <Card title="OpenAI Agents SDK" icon="cube" href="/integrations/openai-agents-sdk"> Build agents with OpenAI SDK and Mem0 </Card> <Card title="Mastra Integration" icon="star" href="/integrations/mastra"> Create intelligent agents with Mastra framework </Card> </CardGroup>