mirror of
https://github.com/supermemoryai/supermemory.git
synced 2026-10-12 03:48:08 +00:00
Rewrites 339 TypeScript calls across 50 pages from the rc.5 `method({ namespace, body })` form to the shipped `method(namespace, { ... })` form, and aligns field names with the live v5 spec: `attach` to `include`, `authUrl` to `authorization`, `lastSync` to `latestRun`, `deletedCount` to `count`, and the paginated `namespaces.list()`.
Renames container tags to namespaces across concepts, connectors, integrations and snippets. The namespace pages keep container tag in the description, search keywords and a rename note so old searches still land, and the v3 reference page points at v5.
The migration guide's SDK table now covers both 5.0.0 SDKs, and the SDK integration page uses the real client options (`baseUrl`, `timeoutInSeconds`, `maxRetries`) and error classes.
228 lines
6.5 KiB
Text
228 lines
6.5 KiB
Text
---
|
|
title: "Vercel AI SDK"
|
|
sidebarTitle: "Vercel AI SDK"
|
|
description: "Use Supermemory with Vercel AI SDK for seamless memory management"
|
|
icon: "/icons/hugeicons/triangle.svg"
|
|
---
|
|
|
|
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.
|
|
|
|
<Note>
|
|
Migrating to v2 from 1.4.x? Check the [migration guide](/migration/tools-v2-upgrade).
|
|
</Note>
|
|
|
|
<Card title="@supermemory/tools on npm" icon="/icons/hugeicons/package.svg" href="https://www.npmjs.com/package/@supermemory/tools">
|
|
Check out the NPM page for more details
|
|
</Card>
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
npm install @supermemory/tools
|
|
```
|
|
|
|
## Quick comparison
|
|
|
|
| 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 |
|
|
|
|
---
|
|
|
|
## User profiles with middleware
|
|
|
|
Automatically inject user profiles into every LLM call for instant personalization.
|
|
|
|
```typescript
|
|
import { generateText } from "ai"
|
|
import { withSupermemory } from "@supermemory/tools/ai-sdk"
|
|
import { openai } from "@ai-sdk/openai"
|
|
|
|
const modelWithMemory = withSupermemory(openai("gpt-5"), {
|
|
namespace: "user-123",
|
|
id: "conversation-456",
|
|
})
|
|
|
|
const result = await generateText({
|
|
model: modelWithMemory,
|
|
messages: [{ role: "user", content: "What do you know about me?" }]
|
|
})
|
|
```
|
|
|
|
### Required fields
|
|
|
|
Both `namespace` and `id` are required.
|
|
|
|
- **`namespace`** — *who* the memories belong to. Use a stable identifier per user, workspace, or tenant (e.g. `"user-123"`, `"acme-workspace"`). Memory search and writes are scoped to this tag.
|
|
- **`id`** — *which conversation* this turn belongs to. Use it to group messages from the same chat session into a single document (e.g. `"chat-2026-04-25"`, a thread ID, or a UUID per session).
|
|
|
|
<Note>
|
|
**Memory saving is enabled by default** (`addMemory: "always"`). New conversations are persisted automatically. To opt out, set `addMemory: "never"`:
|
|
|
|
```typescript
|
|
const modelWithMemory = withSupermemory(openai("gpt-5"), {
|
|
namespace: "user-123",
|
|
id: "conversation-456",
|
|
addMemory: "never",
|
|
})
|
|
```
|
|
</Note>
|
|
|
|
### Memory search modes
|
|
|
|
**Profile Mode (Default)** - Retrieves the user's complete profile:
|
|
|
|
```typescript
|
|
const model = withSupermemory(openai("gpt-4"), { namespace: "user-123", id: "conv-1", mode: "profile" })
|
|
```
|
|
|
|
**Query Mode** - Searches memories based on the user's message:
|
|
|
|
```typescript
|
|
const model = withSupermemory(openai("gpt-4"), { namespace: "user-123", id: "conv-1", mode: "query" })
|
|
```
|
|
|
|
**Full Mode** - Combines profile AND query-based search:
|
|
|
|
```typescript
|
|
const model = withSupermemory(openai("gpt-4"), { namespace: "user-123", id: "conv-1", mode: "full" })
|
|
```
|
|
|
|
### Custom prompt templates
|
|
|
|
Customize how memories are formatted. The template receives `userMemories`, `generalSearchMemories`, and `searchResults` (raw array for filtering by metadata):
|
|
|
|
```typescript
|
|
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"), {
|
|
namespace: "user-123",
|
|
id: "conv-1",
|
|
mode: "full",
|
|
promptTemplate: claudePrompt,
|
|
})
|
|
```
|
|
|
|
### Verbose logging
|
|
|
|
```typescript
|
|
const model = withSupermemory(openai("gpt-4"), {
|
|
namespace: "user-123",
|
|
id: "conv-1",
|
|
verbose: true,
|
|
})
|
|
// Console output shows memory retrieval details
|
|
```
|
|
|
|
### When Supermemory errors (default: continue without memories)
|
|
|
|
If the Supermemory API returns an error, is unreachable, or retrieval hits the internal time limit, memory injection is skipped. **`skipMemoryOnError` defaults to `true`**, so the LLM call still runs with the **original** prompt (no injected memories). Use `verbose: true` if you want console output when that happens.
|
|
|
|
To **fail the call** when memory retrieval fails instead, set `skipMemoryOnError: false`:
|
|
|
|
```typescript
|
|
const model = withSupermemory(openai("gpt-5"), {
|
|
namespace: "user-123",
|
|
id: "conv-1",
|
|
skipMemoryOnError: false,
|
|
})
|
|
```
|
|
|
|
### Persisting tool calls (default: off)
|
|
|
|
By default, saved conversations include only user and assistant text — tool calls and tool results are dropped, since tool payloads are often large and low-signal and would pollute memory extraction. To persist the full tool round trip (tool calls with their arguments, plus tool results, in their original order), set `includeToolCalls: true`:
|
|
|
|
```typescript
|
|
const model = withSupermemory(openai("gpt-5"), {
|
|
namespace: "user-123",
|
|
id: "conv-1",
|
|
includeToolCalls: true,
|
|
})
|
|
```
|
|
|
|
---
|
|
|
|
## Memory tools
|
|
|
|
Add memory capabilities to AI agents with search, add, and fetch operations.
|
|
|
|
```typescript
|
|
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")
|
|
})
|
|
```
|
|
|
|
### Available tools
|
|
|
|
**Search Memories** - Semantic search through user memories:
|
|
|
|
```typescript
|
|
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:
|
|
|
|
```typescript
|
|
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" })
|
|
```
|
|
|
|
### Using individual tools
|
|
|
|
For more control, import tools separately:
|
|
|
|
```typescript
|
|
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", { namespace: "personal" }),
|
|
createEvent: yourCustomTool,
|
|
}
|
|
})
|
|
```
|
|
|
|
### Tool results
|
|
|
|
```typescript
|
|
// searchMemories result
|
|
{ success: true, results: [...], count: 5 }
|
|
|
|
// addMemory result
|
|
{ success: true, memory: { id: "mem_123", ... } }
|
|
```
|
|
|