mirror of
https://github.com/supermemoryai/supermemory.git
synced 2026-08-28 05:25:33 +00:00
103 lines
3.5 KiB
TypeScript
103 lines
3.5 KiB
TypeScript
import type OpenAI from "openai"
|
|
import {
|
|
createOpenAIMiddleware,
|
|
type OpenAIMiddlewareOptions,
|
|
} from "./middleware"
|
|
|
|
/**
|
|
* Wraps an OpenAI client with SuperMemory middleware to automatically inject relevant memories
|
|
* into both Chat Completions and Responses APIs based on the user's input content.
|
|
*
|
|
* For Chat Completions API: Searches for memories using the user message content and injects
|
|
* them into the system prompt (appends to existing or creates new system prompt).
|
|
*
|
|
* For Responses API: Searches for memories using the input parameter and injects them into
|
|
* the instructions parameter (appends to existing or creates new instructions).
|
|
*
|
|
* @param openaiClient - The OpenAI client to wrap with SuperMemory middleware
|
|
* @param containerTag - The container tag/identifier for memory search (e.g., user ID, project ID)
|
|
* @param options - Optional configuration options for the middleware
|
|
* @param options.conversationId - Optional conversation ID to group messages into a single document for contextual memory generation
|
|
* @param options.verbose - Optional flag to enable detailed logging of memory search and injection process (default: false)
|
|
* @param options.mode - Optional mode for memory search: "profile" (default), "query", or "full"
|
|
* @param options.addMemory - Optional mode for memory addition: "always", "never" (default)
|
|
*
|
|
* @returns An OpenAI client with SuperMemory middleware injected for both Chat Completions and Responses APIs
|
|
*
|
|
* @example
|
|
* ```typescript
|
|
* import { withSupermemory } from "@supermemory/tools/openai"
|
|
* import OpenAI from "openai"
|
|
*
|
|
* // Create OpenAI client with supermemory middleware
|
|
* const openai = new OpenAI({
|
|
* apiKey: process.env.OPENAI_API_KEY,
|
|
* })
|
|
* const openaiWithSupermemory = withSupermemory(openai, "user-123", {
|
|
* conversationId: "conversation-456",
|
|
* mode: "full",
|
|
* addMemory: "always"
|
|
* })
|
|
*
|
|
* // Use with Chat Completions API - memories injected into system prompt
|
|
* const chatResponse = await openaiWithSupermemory.chat.completions.create({
|
|
* model: "gpt-4",
|
|
* messages: [
|
|
* { role: "user", content: "What's my favorite programming language?" }
|
|
* ]
|
|
* })
|
|
*
|
|
* // Use with Responses API - memories injected into instructions
|
|
* const response = await openaiWithSupermemory.responses.create({
|
|
* model: "gpt-4o",
|
|
* instructions: "You are a helpful coding assistant",
|
|
* input: "What's my favorite programming language?"
|
|
* })
|
|
* ```
|
|
*
|
|
* @throws {Error} When SUPERMEMORY_API_KEY environment variable is not set
|
|
* @throws {Error} When supermemory API request fails
|
|
*/
|
|
export function withSupermemory(
|
|
openaiClient: OpenAI,
|
|
containerTag: string,
|
|
options?: OpenAIMiddlewareOptions,
|
|
) {
|
|
if (!process.env.SUPERMEMORY_API_KEY) {
|
|
throw new Error("SUPERMEMORY_API_KEY is not set")
|
|
}
|
|
|
|
const conversationId = options?.conversationId
|
|
const verbose = options?.verbose ?? false
|
|
const mode = options?.mode ?? "profile"
|
|
const addMemory = options?.addMemory ?? "never"
|
|
const baseUrl = options?.baseUrl
|
|
|
|
const openaiWithSupermemory = createOpenAIMiddleware(
|
|
openaiClient,
|
|
containerTag,
|
|
{
|
|
conversationId,
|
|
verbose,
|
|
mode,
|
|
addMemory,
|
|
baseUrl,
|
|
},
|
|
)
|
|
|
|
return openaiWithSupermemory
|
|
}
|
|
|
|
export type { OpenAIMiddlewareOptions }
|
|
export type { MemorySearchResult, MemoryAddResult } from "./tools"
|
|
export {
|
|
createSearchMemoriesFunction,
|
|
createAddMemoryFunction,
|
|
supermemoryTools,
|
|
getToolDefinitions,
|
|
createToolCallExecutor,
|
|
createToolCallsExecutor,
|
|
createSearchMemoriesTool,
|
|
createAddMemoryTool,
|
|
memoryToolSchemas,
|
|
} from "./tools"
|