aboutsummaryrefslogtreecommitdiff
path: root/packages/tools/src/conversations-client.ts
diff options
context:
space:
mode:
authorDhravya <[email protected]>2025-12-20 00:46:13 +0000
committerDhravya <[email protected]>2025-12-20 00:46:13 +0000
commit81e192e6168e99efa8055365184bb9fbf9afcd2b (patch)
treeabdee7813b3ca0ad1946a1b7475a7cf281da726c /packages/tools/src/conversations-client.ts
parentfeat(docs): v4 hybrid search parameter and examples (#621) (diff)
downloadarchived-supermemory-12-15-support_for_conversations.tar.xz
archived-supermemory-12-15-support_for_conversations.zip
Support for conversations in SDKs (#618)12-15-support_for_conversations
Diffstat (limited to 'packages/tools/src/conversations-client.ts')
-rw-r--r--packages/tools/src/conversations-client.ts100
1 files changed, 100 insertions, 0 deletions
diff --git a/packages/tools/src/conversations-client.ts b/packages/tools/src/conversations-client.ts
new file mode 100644
index 00000000..c147265e
--- /dev/null
+++ b/packages/tools/src/conversations-client.ts
@@ -0,0 +1,100 @@
+/**
+ * Client for the Supermemory Conversations API
+ *
+ * This module provides a helper function to ingest conversations using the
+ * /v4/conversations endpoint, which supports structured messages with smart
+ * diffing and append detection on the backend.
+ */
+
+export interface ConversationMessage {
+ role: "user" | "assistant" | "system" | "tool"
+ content: string | ContentPart[]
+ name?: string
+ tool_calls?: ToolCall[]
+ tool_call_id?: string
+}
+
+export interface ContentPart {
+ type: "text" | "image_url"
+ text?: string
+ image_url?: { url: string }
+}
+
+export interface ToolCall {
+ id: string
+ type: "function"
+ function: {
+ name: string
+ arguments: string
+ }
+}
+
+export interface AddConversationParams {
+ conversationId: string
+ messages: ConversationMessage[]
+ containerTags?: string[]
+ metadata?: Record<string, string | number | boolean>
+ apiKey: string
+ baseUrl?: string
+}
+
+export interface AddConversationResponse {
+ id: string
+ conversationId: string
+ status: string
+}
+
+/**
+ * Adds a conversation to Supermemory using the /v4/conversations endpoint
+ *
+ * This endpoint supports:
+ * - Structured messages with roles (user, assistant, system, tool)
+ * - Multi-modal content (text, images)
+ * - Tool calls and responses
+ *
+ * @param params - Configuration for adding the conversation
+ * @returns Promise resolving to the conversation response
+ * @throws Error if the API request fails
+ *
+ * @example
+ * ```typescript
+ * const response = await addConversation({
+ * conversationId: "conv-123",
+ * messages: [
+ * { role: "user", content: "Hello!" },
+ * { role: "assistant", content: "Hi there!" }
+ * ],
+ * containerTags: ["user-456"],
+ * apiKey: process.env.SUPERMEMORY_API_KEY,
+ * })
+ * ```
+ */
+export async function addConversation(
+ params: AddConversationParams,
+): Promise<AddConversationResponse> {
+ const baseUrl = params.baseUrl || "https://api.supermemory.ai"
+ const url = `${baseUrl}/v4/conversations`
+
+ const response = await fetch(url, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ Authorization: `Bearer ${params.apiKey}`,
+ },
+ body: JSON.stringify({
+ conversationId: params.conversationId,
+ messages: params.messages,
+ containerTags: params.containerTags,
+ metadata: params.metadata,
+ }),
+ })
+
+ if (!response.ok) {
+ const errorText = await response.text().catch(() => "Unknown error")
+ throw new Error(
+ `Failed to add conversation: ${response.status} ${response.statusText}. ${errorText}`,
+ )
+ }
+
+ return await response.json()
+}