apps/docs/integrations/ai-sdk.mdx
The Supermemory AI SDK provides native integration with Vercel's AI SDK through two approaches: User Profiles for automatic personalization and Memory Tools for agent-based interactions.
<Card title="@supermemory/tools on npm" icon="npm" href="https://www.npmjs.com/package/@supermemory/tools"> Check out the NPM page for more details </Card>npm install @supermemory/tools
| Approach | Use Case | Setup |
|---|---|---|
| User Profiles | Personalized LLM responses with automatic user context | Simple middleware |
| Memory Tools | AI agents that need explicit memory control | Tool definitions |
Automatically inject user profiles into every LLM call for instant personalization.
import { generateText } from "ai"
import { withSupermemory } from "@supermemory/tools/ai-sdk"
import { openai } from "@ai-sdk/openai"
const modelWithMemory = withSupermemory(openai("gpt-5"), "user-123")
const result = await generateText({
model: modelWithMemory,
messages: [{ role: "user", content: "What do you know about me?" }]
})
const modelWithMemory = withSupermemory(openai("gpt-5"), "user-123", {
addMemory: "always"
})
Profile Mode (Default) - Retrieves the user's complete profile:
const model = withSupermemory(openai("gpt-4"), "user-123", { mode: "profile" })
Query Mode - Searches memories based on the user's message:
const model = withSupermemory(openai("gpt-4"), "user-123", { mode: "query" })
Full Mode - Combines profile AND query-based search:
const model = withSupermemory(openai("gpt-4"), "user-123", { mode: "full" })
Customize how memories are formatted. The template receives userMemories, generalSearchMemories, and searchResults (raw array for filtering by metadata):
import { withSupermemory, type MemoryPromptData } from "@supermemory/tools/ai-sdk"
const claudePrompt = (data: MemoryPromptData) => `
<context>
<user_profile>
${data.userMemories}
</user_profile>
<relevant_memories>
${data.generalSearchMemories}
</relevant_memories>
</context>
`.trim()
const model = withSupermemory(anthropic("claude-3-sonnet"), "user-123", {
mode: "full",
promptTemplate: claudePrompt
})
const model = withSupermemory(openai("gpt-4"), "user-123", {
verbose: true
})
// Console output shows memory retrieval details
Add memory capabilities to AI agents with search, add, and fetch operations.
import { streamText } from "ai"
import { createAnthropic } from "@ai-sdk/anthropic"
import { supermemoryTools } from "@supermemory/tools/ai-sdk"
const anthropic = createAnthropic({ apiKey: "YOUR_ANTHROPIC_KEY" })
const result = await streamText({
model: anthropic("claude-3-sonnet"),
prompt: "Remember that my name is Alice",
tools: supermemoryTools("YOUR_SUPERMEMORY_KEY")
})
Search Memories - Semantic search through user memories:
const result = await streamText({
model: openai("gpt-5"),
prompt: "What are my dietary preferences?",
tools: supermemoryTools("API_KEY")
})
// AI will call: searchMemories({ informationToGet: "dietary preferences" })
Add Memory - Store new information:
const result = await streamText({
model: anthropic("claude-3-sonnet"),
prompt: "Remember that I'm allergic to peanuts",
tools: supermemoryTools("API_KEY")
})
// AI will call: addMemory({ memory: "User is allergic to peanuts" })
For more control, import tools separately:
import {
searchMemoriesTool,
addMemoryTool
} from "@supermemory/tools/ai-sdk"
const result = await streamText({
model: openai("gpt-5"),
prompt: "What do you know about me?",
tools: {
searchMemories: searchMemoriesTool("API_KEY", { projectId: "personal" }),
createEvent: yourCustomTool,
}
})
// searchMemories result
{ success: true, results: [...], count: 5 }
// addMemory result
{ success: true, memory: { id: "mem_123", ... } }