Skip to content

Commit 3134fc6

Browse files
committed
Feat: Memory add and search, reasoning, fixed AI thinking UI
1 parent b5d0ffd commit 3134fc6

19 files changed

Lines changed: 529 additions & 352 deletions

app/(chat)/api/chat/route.ts

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ import { getUsage } from 'tokenlens/helpers';
4444
import type { ModelCatalog } from 'tokenlens/core';
4545
import type { AppUsage } from '@/lib/usage';
4646
import getWeather from '@/lib/ai/tools/get-weather';
47+
import {
48+
addMemoryTool,
49+
searchMemoriesTool,
50+
} from '@/lib/ai/tools/supermemory-tools';
4751

4852
export const maxDuration = 60;
4953

@@ -184,21 +188,47 @@ export async function POST(request: Request) {
184188
system: systemPrompt({ selectedChatModel, requestHints }),
185189
messages: convertToModelMessages(uiMessages),
186190
stopWhen: stepCountIs(5),
187-
experimental_activeTools:
188-
selectedChatModel === 'chat-model-reasoning'
189-
? []
190-
: [
191-
'getWeather',
192-
'createDocument',
193-
'updateDocument',
194-
'requestSuggestions',
195-
],
191+
experimental_activeTools: (() => {
192+
if (selectedChatModel === 'chat-model-reasoning') {
193+
const base: ('addMemory' | 'searchMemories')[] = [];
194+
if (userType !== 'guest')
195+
base.push('addMemory', 'searchMemories');
196+
return base;
197+
}
198+
const base: (
199+
| 'getWeather'
200+
| 'createDocument'
201+
| 'updateDocument'
202+
| 'requestSuggestions'
203+
| 'addMemory'
204+
| 'searchMemories'
205+
)[] = [
206+
'getWeather',
207+
'createDocument',
208+
'updateDocument',
209+
'requestSuggestions',
210+
];
211+
// Only enable memory tools for non-guest users
212+
if (userType !== 'guest') {
213+
base.push('addMemory', 'searchMemories');
214+
}
215+
return base;
216+
})(),
196217
experimental_transform: smoothStream({ chunking: 'word' }),
218+
//@ts-ignore
197219
tools: {
198220
getWeather,
199221
createDocument: createDocument({ session, dataStream }),
200222
updateDocument: updateDocument({ session, dataStream }),
201223
requestSuggestions: requestSuggestions({ session, dataStream }),
224+
225+
addMemory: addMemoryTool(process.env.SUPERMEMORY_API_KEY || '', {
226+
projectId: session.user.id,
227+
}),
228+
searchMemories: searchMemoriesTool(
229+
process.env.SUPERMEMORY_API_KEY || '',
230+
{ projectId: session.user.id },
231+
),
202232
},
203233
experimental_telemetry: {
204234
isEnabled: isProductionEnvironment,
@@ -239,7 +269,6 @@ export async function POST(request: Request) {
239269
});
240270

241271
result.consumeStream();
242-
// console.log(result);
243272

244273
dataStream.merge(
245274
result.toUIMessageStream({

app/(chat)/api/memory/route.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { auth } from '@/app/(auth)/auth';
2+
import { ChatSDKError } from '@/lib/errors';
3+
import Supermemory from 'supermemory';
4+
5+
export async function POST(request: Request) {
6+
try {
7+
const session = await auth();
8+
if (!session?.user) return new ChatSDKError('unauthorized:api').toResponse();
9+
if (session.user.type === 'guest')
10+
return new ChatSDKError('forbidden:auth').toResponse();
11+
12+
const { memory } = (await request.json()) as { memory?: string };
13+
if (!memory || typeof memory !== 'string' || memory.trim().length === 0)
14+
return new ChatSDKError('bad_request:api').toResponse();
15+
16+
if (!process.env.SUPERMEMORY_API_KEY)
17+
return new ChatSDKError('offline:api', 'Missing Supermemory API key').toResponse();
18+
19+
const client = new Supermemory({ apiKey: process.env.SUPERMEMORY_API_KEY });
20+
const containerTags = [`sm_project_${session.user.id}`];
21+
22+
const result = await client.memories.add({ content: memory, containerTags });
23+
24+
return Response.json({ success: true, memory: result }, { status: 200 });
25+
} catch (err: any) {
26+
console.error('Memory add failed', err);
27+
return new ChatSDKError('offline:api', err?.message || 'Memory add failed').toResponse();
28+
}
29+
}
30+

bun.lock

Lines changed: 9 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

components/Navbar/profile-dropdown.tsx

Lines changed: 0 additions & 240 deletions
This file was deleted.

0 commit comments

Comments
 (0)