- Skill ID
- mem0ai/mem0/mem0-vercel-ai-sdk
- Publisher
- mem0ai
- Repository
- mem0
- Installs
- 0
- Files
- 6
- License
- Apache-2.0
- Requires
- Node.js 18+, npm install @mem0/vercel-ai-provider, Vercel AI SDK v5 (ai package), MEM0_API_KEY + LLM provider API key
- Synced
- Sep 23, 2026
Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.
mem0ai/mem0/mem0-vercel-ai-sdkInstalls these files- LICENSE
- README.md
- SKILL.md
- references/memory-utilities.md
- references/provider-api.md
- references/usage-patterns.md
What this skill tells the agent
Mem0 Vercel AI SDK Provider
Memory-enhanced AI provider for Vercel AI SDK. Automatically retrieves and stores memories during LLM calls.
Step 1: Install
npm install @mem0/vercel-ai-provider aiStep 2: Set up environment variables
export MEM0_API_KEY="m0-xxx"
export OPENAI_API_KEY="sk-xxx" # or ANTHROPIC_API_KEY, GOOGLE_API_KEY, etc.Get a Mem0 API key at: https://app.mem0.ai/dashboard/api-keys?utm_source=oss&utm_medium=skill-mem0-vercel-ai-sdk
Pattern 1: Wrapped Model
The wrapped model approach is the simplest. createMem0 returns a provider that wraps any supported LLM with automatic memory retrieval and storage.
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: "alice" }),
prompt: "Recommend a restaurant",
});What happens under the hood:
- The prompt is sent to Mem0 search (
POST /v3/memories/search/) to retrieve relevant memories - Retrieved memories are injected as a system message at the start of the prompt
- The underlying LLM (e.g., OpenAI gpt-5-mini) generates a response using the enriched prompt
- The conversation is stored back to Mem0 (
POST /v3/memories/add/) as a fire-and-forget async call (no await)
Pattern 2: Standalone Utilities
Use standalone utilities when you want full control over the memory retrieve/store cycle, or you want to use a provider that is already configured separately.
import { openai } from "@ai-sdk/openai";
import { generateText } from "ai";
import { retrieveMemories, addMemories } from "@mem0/vercel-ai-provider";
const prompt = "Recommend a restaurant";
// Retrieve memories -- returns a formatted system prompt string
const memories = await retrieveMemories(prompt, {
user_id: "alice",
mem0ApiKey: "m0-xxx",
});
// Generate using any provider with injected memories
const { text } = await generateText({
model: openai("gpt-5-mini"),
prompt,
system: memories,
});
// Optionally store the conversation back
await addMemories(
[
{ role: "user", content: [{ type: "text", text: prompt }] },
{ role: "assistant", content: [{ type: "text", text }] },
],
{ user_id: "alice", mem0ApiKey: "m0-xxx" }
);Pattern 3: Streaming
Use streamText for streaming responses with memory augmentation:
import { streamText } from "ai";
import { createMem0 } from "@mem0/vercel-ai-provider";
const mem0 = createMem0();
const result = streamText({
model: mem0("gpt-5-mini", { user_id: "alice" }),
prompt: "What should I cook for dinner?",
});
for await (const chunk of result.textStream) {
process.stdout.write(chunk);
}The wrapped model handles memory retrieval before streaming begins and stores the conversation after.
Supported Providers
| Provider | Config value | Required env var |
|---|---|---|
| OpenAI (default) | "openai" | OPENAI_API_KEY |
| Anthropic | "anthropic" | ANTHROPIC_API_KEY |
"google" | GOOGLE_GENERATIVE_AI_API_KEY | |
| Groq | "groq" | GROQ_API_KEY |
| Cohere | "cohere" | COHERE_API_KEY |
Select a provider when creating the Mem0 instance:
const mem0 = createMem0({ provider: "anthropic" });
const { text } = await generateText({
model: mem0("gpt-5-mini", { user_id: "alice" }),
prompt: "Hello!",
});How It Works Internally
Wrapped model flow
User prompt
--> searchInternalMemories (POST /v3/memories/search/)
--> memories injected as system message at start of prompt
--> underlying LLM generates response (doGenerate or doStream)
--> processMemories fires addMemories as fire-and-forget (no await)
--> response returned to callerStandalone flow
User controls each step:
1. retrieveMemories / getMemories / searchMemories -> fetch memories
2. inject into system prompt manually
3. call generateText / streamText with any provider
4. addMemories -> store new conversation to Mem0Key Differences Between the 4 Utility Functions
| Function | Returns | Use when |
|---|---|---|
retrieveMemories | Formatted system prompt string | Injecting directly into system parameter |
getMemories | Raw memory array | Processing memories programmatically |
searchMemories | Full search response (results + relations) | Need relations, scores, metadata |
addMemories | API response | Storing new messages to Mem0 |
All four accept LanguageModelV2Prompt | string as the first argument and optional Mem0ConfigSettings as the second.
Common Edge Cases and Tips
- Always provide `user_id` (or
agent_id/app_id/run_id) for consistent memory retrieval. Without an entity identifier, memories cannot be scoped. - Standalone utilities require explicit API key: pass
mem0ApiKeyin the config object, or set theMEM0_API_KEYenvironment variable. - This uses Vercel AI SDK v5 (LanguageModelV2 / ProviderV2 interfaces). It is not compatible with AI SDK v3 or v4.
- `processMemories` fires `addMemories` as fire-and-forget (
.then()withoutawait). Memory storage happens asynchronously and does not block the LLM response. - The `"gemini"` alias exists in the provider switch but is NOT in the
supportedProviderslist. Use"google"instead. - Custom host: set
hostin the config to point to a different Mem0 API endpoint (default:https://api.mem0.ai).
References
| Topic | File |
|---|---|
Provider API (createMem0, Mem0Provider, types) | local / GitHub |
Memory utilities (addMemories, retrieveMemories, etc.) | local / GitHub |
| Usage patterns and examples | local / GitHub |
Related Mem0 Skills
More from mem0ai
Use this skill in a project
Open any RiverX project, search the Skills panel for mem0ai/mem0/mem0-vercel-ai-sdk, and install it in one click.
