mirror of
https://github.com/supermemoryai/supermemory.git
synced 2026-08-28 05:25:33 +00:00
181 lines
4.8 KiB
TypeScript
181 lines
4.8 KiB
TypeScript
import { createOpenAI } from "@ai-sdk/openai"
|
|
import { generateText } from "ai"
|
|
import { describe, expect, it } from "vitest"
|
|
import { type SupermemoryToolsConfig, supermemoryTools } from "./tools"
|
|
|
|
import "dotenv/config"
|
|
|
|
describe("supermemoryTools", () => {
|
|
// Required API keys - tests will fail if not provided
|
|
const testApiKey = process.env.SUPERMEMORY_API_KEY
|
|
const testOpenAIKey = process.env.OPENAI_API_KEY
|
|
|
|
if (!testApiKey) {
|
|
throw new Error(
|
|
"SUPERMEMORY_API_KEY environment variable is required for tests",
|
|
)
|
|
}
|
|
if (!testOpenAIKey) {
|
|
throw new Error("OPENAI_API_KEY environment variable is required for tests")
|
|
}
|
|
|
|
// Optional configuration with defaults
|
|
const testBaseUrl = process.env.SUPERMEMORY_BASE_URL ?? undefined
|
|
const testModelName = process.env.MODEL_NAME || "gpt-5-nano"
|
|
|
|
const testPrompts = [
|
|
"What do you remember about my preferences?",
|
|
"Help me plan my day based on what you know about me",
|
|
"What are my current projects?",
|
|
"Remind me of my interests and hobbies",
|
|
"What should I focus on today?",
|
|
]
|
|
|
|
describe("client initialization", () => {
|
|
it("should create tools with default configuration", () => {
|
|
const config: SupermemoryToolsConfig = {}
|
|
const tools = supermemoryTools(testApiKey, config)
|
|
|
|
expect(tools).toBeDefined()
|
|
expect(tools.searchMemories).toBeDefined()
|
|
expect(tools.addMemory).toBeDefined()
|
|
})
|
|
|
|
it("should create tools with custom baseUrl", () => {
|
|
const config: SupermemoryToolsConfig = {
|
|
baseUrl: testBaseUrl,
|
|
}
|
|
const tools = supermemoryTools(testApiKey, config)
|
|
|
|
expect(tools).toBeDefined()
|
|
expect(tools.searchMemories).toBeDefined()
|
|
expect(tools.addMemory).toBeDefined()
|
|
})
|
|
|
|
it("should create tools with projectId configuration", () => {
|
|
const config: SupermemoryToolsConfig = {
|
|
projectId: "test-project-123",
|
|
}
|
|
const tools = supermemoryTools(testApiKey, config)
|
|
|
|
expect(tools).toBeDefined()
|
|
expect(tools.searchMemories).toBeDefined()
|
|
expect(tools.addMemory).toBeDefined()
|
|
})
|
|
|
|
it("should create tools with custom container tags", () => {
|
|
const config: SupermemoryToolsConfig = {
|
|
containerTags: ["custom-tag-1", "custom-tag-2"],
|
|
}
|
|
const tools = supermemoryTools(testApiKey, config)
|
|
|
|
expect(tools).toBeDefined()
|
|
expect(tools.searchMemories).toBeDefined()
|
|
expect(tools.addMemory).toBeDefined()
|
|
})
|
|
})
|
|
|
|
describe("AI SDK integration", () => {
|
|
it("should work with AI SDK generateText", async () => {
|
|
const openai = createOpenAI({
|
|
apiKey: testOpenAIKey,
|
|
})
|
|
|
|
const result = await generateText({
|
|
model: openai(testModelName),
|
|
messages: [
|
|
{
|
|
role: "system",
|
|
content:
|
|
"You are a helpful assistant with access to user memories. Use the search tool when the user asks about preferences or past information.",
|
|
},
|
|
{
|
|
role: "user",
|
|
content: testPrompts[0]!,
|
|
},
|
|
],
|
|
tools: {
|
|
...supermemoryTools(testApiKey, {
|
|
projectId: "test-ai-integration",
|
|
baseUrl: testBaseUrl,
|
|
}),
|
|
},
|
|
})
|
|
|
|
expect(result).toBeDefined()
|
|
expect(result.text).toBeDefined()
|
|
expect(typeof result.text).toBe("string")
|
|
})
|
|
|
|
it("should use tools when prompted", async () => {
|
|
const openai = createOpenAI({
|
|
apiKey: testOpenAIKey,
|
|
})
|
|
|
|
const tools = supermemoryTools(testApiKey, {
|
|
projectId: "test-tool-usage",
|
|
baseUrl: testBaseUrl,
|
|
})
|
|
|
|
const result = await generateText({
|
|
model: openai(testModelName),
|
|
messages: [
|
|
{
|
|
role: "system",
|
|
content:
|
|
"You are a helpful assistant. When the user asks you to remember something, use the addMemory tool.",
|
|
},
|
|
{
|
|
role: "user",
|
|
content: "Please remember that I prefer dark roast coffee",
|
|
},
|
|
],
|
|
tools: {
|
|
addMemory: tools.addMemory,
|
|
},
|
|
})
|
|
|
|
expect(result).toBeDefined()
|
|
expect(result.text).toBeDefined()
|
|
expect(result.toolCalls).toBeDefined()
|
|
|
|
if (result.toolCalls && result.toolCalls.length > 0) {
|
|
const addMemoryCall = result.toolCalls.find(
|
|
(call) => call.toolName === "addMemory",
|
|
)
|
|
expect(addMemoryCall).toBeDefined()
|
|
}
|
|
})
|
|
|
|
it("should handle multiple tool types", async () => {
|
|
const openai = createOpenAI({
|
|
apiKey: testOpenAIKey,
|
|
})
|
|
|
|
const result = await generateText({
|
|
model: openai(testModelName),
|
|
messages: [
|
|
{
|
|
role: "system",
|
|
content:
|
|
"You are a helpful assistant with access to user memories. Use search when asked about preferences, and addMemory when told to remember something.",
|
|
},
|
|
{
|
|
role: "user",
|
|
content:
|
|
"Search for my preferences and then remember that I also like green tea",
|
|
},
|
|
],
|
|
tools: {
|
|
...supermemoryTools(testApiKey, {
|
|
containerTags: ["test-multi-tools"],
|
|
}),
|
|
},
|
|
})
|
|
|
|
expect(result).toBeDefined()
|
|
expect(result.text).toBeDefined()
|
|
expect(typeof result.text).toBe("string")
|
|
})
|
|
})
|
|
})
|