binario 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/schema.ts","../src/memory/utils.ts","../src/memory/stores/in-memory.ts","../src/memory/buffer.ts","../src/memory/summary.ts","../src/memory/summary-buffer.ts","../src/memory/vector.ts","../src/memory/stores/local-storage.ts","../src/embeddings/cloudflare.ts","../src/hooks.ts"],"names":["z","DEFAULT_SUMMARIZE_THRESHOLD","useState","useRef","useCallback","error","useEffect","batchResult"],"mappings":"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","file":"react.cjs","sourcesContent":["// Binario Schema System - Pydantic-style type-safe validation\r\nimport { z } from 'zod';\r\n\r\n/**\r\n * Create a type-safe output schema for structured LLM responses\r\n * Similar to Pydantic models in Python\r\n * \r\n * @example\r\n * const RecipeSchema = createSchema({\r\n * name: z.string().describe('Recipe name'),\r\n * ingredients: z.array(z.string()).describe('List of ingredients'),\r\n * cookTime: z.number().describe('Cooking time in minutes'),\r\n * difficulty: z.enum(['easy', 'medium', 'hard']),\r\n * });\r\n * \r\n * const result = await binario.chat(messages, {\r\n * outputSchema: RecipeSchema,\r\n * });\r\n * // result.data is typed as { name: string; ingredients: string[]; ... }\r\n */\r\nexport function createSchema<T extends z.ZodRawShape>(shape: T): z.ZodObject<T> {\r\n return z.object(shape);\r\n}\r\n\r\n/**\r\n * Convert a Zod schema to JSON Schema for LLM function calling\r\n */\r\nexport function zodToJsonSchema(schema: z.ZodType<unknown>): Record<string, unknown> {\r\n return convertZodToJson(schema);\r\n}\r\n\r\nfunction convertZodToJson(schema: z.ZodType<unknown>): Record<string, unknown> {\r\n const def = schema._def as unknown as Record<string, unknown>;\r\n const result: Record<string, unknown> = {};\r\n\r\n // Extract description - check both _def.description and schema.description\r\n const desc = (def && def.description) || (schema as any).description;\r\n if (desc && typeof desc === 'string') {\r\n result.description = desc;\r\n }\r\n\r\n // Use instanceof checks for robustness across zod versions\r\n if (schema instanceof z.ZodString) {\r\n result.type = 'string';\r\n } else if (schema instanceof z.ZodNumber) {\r\n result.type = 'number';\r\n } else if (schema instanceof z.ZodBoolean) {\r\n result.type = 'boolean';\r\n } else if (schema instanceof z.ZodArray) {\r\n result.type = 'array';\r\n // Zod 3.25+ uses 'element', older versions use 'type'\r\n const innerType = def.type || def.element || (schema as any)._def?.type || (schema as any).element;\r\n if (innerType) {\r\n result.items = convertZodToJson(innerType as z.ZodType<unknown>);\r\n }\r\n } else if (schema instanceof z.ZodObject) {\r\n result.type = 'object';\r\n const shape = (schema as z.ZodObject<z.ZodRawShape>).shape;\r\n const properties: Record<string, unknown> = {};\r\n const required: string[] = [];\r\n\r\n for (const [key, value] of Object.entries(shape)) {\r\n properties[key] = convertZodToJson(value as z.ZodType<unknown>);\r\n if (!(value instanceof z.ZodOptional)) {\r\n required.push(key);\r\n }\r\n }\r\n\r\n result.properties = properties;\r\n if (required.length > 0) {\r\n result.required = required;\r\n }\r\n } else if (schema instanceof z.ZodEnum) {\r\n result.type = 'string';\r\n // Zod 3.25+ may store values differently\r\n result.enum = (def.values as string[]) || (schema as any).options || (schema as any)._def?.values;\r\n } else if (schema instanceof z.ZodOptional) {\r\n return convertZodToJson((schema as z.ZodOptional<z.ZodType<unknown>>)._def.innerType);\r\n } else if (schema instanceof z.ZodNullable) {\r\n const inner = convertZodToJson((schema as z.ZodNullable<z.ZodType<unknown>>)._def.innerType);\r\n return { ...inner, nullable: true };\r\n } else if (schema instanceof z.ZodDefault) {\r\n const defaultDef = (schema as any)._def;\r\n const inner = convertZodToJson(defaultDef.innerType);\r\n return { ...inner, default: typeof defaultDef.defaultValue === 'function' ? defaultDef.defaultValue() : defaultDef.defaultValue };\r\n } else if (schema instanceof z.ZodUnion) {\r\n result.oneOf = ((schema as z.ZodUnion<[z.ZodType<unknown>, ...z.ZodType<unknown>[]]>)._def.options as z.ZodType<unknown>[]).map(convertZodToJson);\r\n } else if (schema instanceof z.ZodLiteral) {\r\n const litDef = (schema as any)._def;\r\n result.const = litDef.value ?? litDef.values;\r\n } else if (schema instanceof z.ZodRecord) {\r\n result.type = 'object';\r\n result.additionalProperties = convertZodToJson((schema as z.ZodRecord<z.ZodString, z.ZodType<unknown>>)._def.valueType);\r\n } else if (schema instanceof z.ZodTuple) {\r\n result.type = 'array';\r\n result.items = ((schema as z.ZodTuple)._def.items as z.ZodType<unknown>[]).map(convertZodToJson);\r\n } else {\r\n result.type = 'string'; // Fallback\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Create a function tool from a Zod schema\r\n * For use with LLM function calling\r\n */\r\nexport function createTool<T>(config: {\r\n name: string;\r\n description: string;\r\n parameters: z.ZodType<T>;\r\n execute: (args: T) => Promise<unknown> | unknown;\r\n}) {\r\n return {\r\n type: 'function' as const,\r\n function: {\r\n name: config.name,\r\n description: config.description,\r\n parameters: zodToJsonSchema(config.parameters),\r\n },\r\n _execute: config.execute,\r\n _schema: config.parameters,\r\n };\r\n}\r\n\r\n/**\r\n * Parse and validate LLM response against schema\r\n */\r\nexport function parseStructuredOutput<T>(\r\n content: string,\r\n schema: z.ZodType<T>\r\n): { success: true; data: T } | { success: false; error: z.ZodError } {\r\n try {\r\n // Try to extract JSON from markdown code blocks\r\n let jsonStr = content;\r\n const codeBlockMatch = content.match(/```(?:json)?\\s*([\\s\\S]*?)```/);\r\n if (codeBlockMatch) {\r\n jsonStr = codeBlockMatch[1].trim();\r\n }\r\n\r\n const parsed = JSON.parse(jsonStr);\r\n const validated = schema.parse(parsed);\r\n return { success: true, data: validated };\r\n } catch (error) {\r\n if (error instanceof z.ZodError) {\r\n return { success: false, error };\r\n }\r\n // JSON parse error - wrap in ZodError\r\n return {\r\n success: false,\r\n error: new z.ZodError([\r\n {\r\n code: 'custom',\r\n message: `Failed to parse JSON: ${(error as Error).message}`,\r\n path: [],\r\n },\r\n ]),\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Infer TypeScript type from Zod schema\r\n */\r\nexport type InferSchema<T extends z.ZodType> = z.infer<T>;\r\n\r\n// Re-export zod for convenience\r\nexport { z };\r\n","// Memory Utilities for Binario SDK\n\nimport type { Message } from '../types';\nimport type { StoredMessage, ConversationContext } from './types';\n\n/** \n * Estimate token count for text using character-based approximation.\n * Average English text: ~4 characters per token\n * Code/technical: ~3.5 characters per token\n * We use 4 as a conservative estimate.\n */\nexport function countTokens(text: string): number {\n if (!text) return 0;\n // More accurate estimation considering whitespace and punctuation\n const words = text.split(/\\s+/).filter(Boolean);\n const avgCharsPerWord = text.length / Math.max(words.length, 1);\n \n // Adjust ratio based on content type\n const ratio = avgCharsPerWord > 6 ? 3.5 : 4;\n return Math.ceil(text.length / ratio);\n}\n\n/** Count tokens for a single message */\nexport function countMessageTokens(message: Message): number {\n let tokens = 0;\n \n // Role token overhead (~4 tokens per message for formatting)\n tokens += 4;\n \n // Content tokens\n tokens += countTokens(message.content);\n \n // Name tokens if present\n if (message.name) {\n tokens += countTokens(message.name) + 1;\n }\n \n // Tool calls if present\n if (message.tool_calls) {\n for (const call of message.tool_calls) {\n tokens += countTokens(call.function.name);\n tokens += countTokens(call.function.arguments);\n tokens += 10; // Overhead for tool call structure\n }\n }\n \n return tokens;\n}\n\n/** Count total tokens for an array of messages */\nexport function countMessagesTokens(messages: Message[]): number {\n return messages.reduce((sum, msg) => sum + countMessageTokens(msg), 0);\n}\n\n/** Generate unique ID */\nexport function generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\n}\n\n/** Create a stored message from a regular message */\nexport function createStoredMessage(\n message: Message,\n conversationId: string,\n options?: { embedding?: number[]; metadata?: Record<string, unknown> }\n): StoredMessage {\n return {\n id: generateId(),\n message,\n timestamp: Date.now(),\n conversationId,\n tokenCount: countMessageTokens(message),\n embedding: options?.embedding,\n metadata: options?.metadata,\n };\n}\n\n/** \n * Truncate messages to fit within token limit.\n * Removes oldest messages first (FIFO).\n */\nexport function truncateMessages(\n messages: Message[],\n maxTokens: number,\n options?: { keepSystemMessages?: boolean }\n): Message[] {\n const { keepSystemMessages = true } = options ?? {};\n \n // Separate system messages if we need to keep them\n const systemMessages = keepSystemMessages \n ? messages.filter(m => m.role === 'system')\n : [];\n const nonSystemMessages = keepSystemMessages\n ? messages.filter(m => m.role !== 'system')\n : [...messages];\n \n // Calculate tokens for system messages\n const systemTokens = countMessagesTokens(systemMessages);\n const remainingTokens = maxTokens - systemTokens;\n \n if (remainingTokens <= 0) {\n // If system messages alone exceed limit, truncate them too\n return truncateMessagesSimple(messages, maxTokens);\n }\n \n // Truncate non-system messages from the beginning\n const truncated = truncateMessagesSimple(nonSystemMessages, remainingTokens);\n \n return [...systemMessages, ...truncated];\n}\n\n/** Simple truncation without special handling */\nfunction truncateMessagesSimple(messages: Message[], maxTokens: number): Message[] {\n let totalTokens = 0;\n const result: Message[] = [];\n \n // Work backwards from most recent\n for (let i = messages.length - 1; i >= 0; i--) {\n const msgTokens = countMessageTokens(messages[i]);\n if (totalTokens + msgTokens > maxTokens) {\n break;\n }\n totalTokens += msgTokens;\n result.unshift(messages[i]);\n }\n \n return result;\n}\n\n/** Truncate messages by count */\nexport function truncateMessagesByCount(\n messages: Message[],\n maxMessages: number,\n options?: { keepSystemMessages?: boolean }\n): Message[] {\n const { keepSystemMessages = true } = options ?? {};\n \n if (messages.length <= maxMessages) {\n return messages;\n }\n \n if (keepSystemMessages) {\n const systemMessages = messages.filter(m => m.role === 'system');\n const nonSystemMessages = messages.filter(m => m.role !== 'system');\n \n const remainingSlots = maxMessages - systemMessages.length;\n if (remainingSlots <= 0) {\n return systemMessages.slice(-maxMessages);\n }\n \n return [...systemMessages, ...nonSystemMessages.slice(-remainingSlots)];\n }\n \n return messages.slice(-maxMessages);\n}\n\n/** Format messages for LLM context with conversation summary */\nexport function formatContextWithSummary(\n recentMessages: Message[],\n summary: string | null\n): Message[] {\n if (!summary) {\n return recentMessages;\n }\n \n // Insert summary as a system message at the beginning\n const summaryMessage: Message = {\n role: 'system',\n content: `Previous conversation summary:\\n${summary}`,\n };\n \n // Filter out existing system messages about summary\n const filtered = recentMessages.filter(\n m => !(m.role === 'system' && m.content.startsWith('Previous conversation summary:'))\n );\n \n // Find index after regular system messages\n const firstNonSystemIdx = filtered.findIndex(m => m.role !== 'system');\n const insertIdx = firstNonSystemIdx === -1 ? filtered.length : firstNonSystemIdx;\n \n return [\n ...filtered.slice(0, insertIdx),\n summaryMessage,\n ...filtered.slice(insertIdx),\n ];\n}\n\n/** Create conversation context object */\nexport function createContext(\n messages: Message[],\n summary?: string | null\n): ConversationContext {\n return {\n messages,\n summary: summary ?? undefined,\n tokenCount: countMessagesTokens(messages),\n messageCount: messages.length,\n };\n}\n\n/** Calculate cosine similarity between two vectors */\nexport function cosineSimilarity(a: number[], b: number[]): number {\n if (a.length !== b.length) {\n throw new Error('Vectors must have the same length');\n }\n \n let dotProduct = 0;\n let normA = 0;\n let normB = 0;\n \n for (let i = 0; i < a.length; i++) {\n dotProduct += a[i] * b[i];\n normA += a[i] * a[i];\n normB += b[i] * b[i];\n }\n \n const magnitude = Math.sqrt(normA) * Math.sqrt(normB);\n if (magnitude === 0) return 0;\n \n return dotProduct / magnitude;\n}\n\n/** Default summarization prompt */\nexport const DEFAULT_SUMMARY_PROMPT = `Summarize the following conversation concisely, preserving key information, decisions, and context that would be useful for continuing the conversation. Focus on:\n- Main topics discussed\n- Key decisions or conclusions\n- Important user preferences or requirements\n- Any pending questions or tasks\n\nConversation:\n{conversation}\n\nSummary:`;\n\n/** Format conversation for summarization */\nexport function formatConversationForSummary(messages: Message[]): string {\n return messages\n .filter(m => m.role !== 'system')\n .map(m => `${m.role.toUpperCase()}: ${m.content}`)\n .join('\\n\\n');\n}\n","// In-Memory Store for Binario Memory System\n\nimport type { MemoryStore, StoredMessage } from '../types';\n\n/**\n * In-memory store for development and testing.\n * Data is lost when the process ends.\n */\nexport class InMemoryStore implements MemoryStore {\n private messages: Map<string, StoredMessage[]> = new Map();\n private metadata: Map<string, Record<string, unknown>> = new Map();\n\n async getMessages(conversationId: string): Promise<StoredMessage[]> {\n return this.messages.get(conversationId) ?? [];\n }\n\n async addMessage(message: StoredMessage): Promise<void> {\n const messages = this.messages.get(message.conversationId) ?? [];\n messages.push(message);\n this.messages.set(message.conversationId, messages);\n }\n\n async updateMessage(id: string, updates: Partial<StoredMessage>): Promise<void> {\n for (const [conversationId, messages] of this.messages) {\n const index = messages.findIndex(m => m.id === id);\n if (index !== -1) {\n messages[index] = { ...messages[index], ...updates };\n this.messages.set(conversationId, messages);\n return;\n }\n }\n }\n\n async deleteMessage(id: string): Promise<void> {\n for (const [conversationId, messages] of this.messages) {\n const filtered = messages.filter(m => m.id !== id);\n if (filtered.length !== messages.length) {\n this.messages.set(conversationId, filtered);\n return;\n }\n }\n }\n\n async clear(conversationId: string): Promise<void> {\n this.messages.delete(conversationId);\n this.metadata.delete(conversationId);\n }\n\n async getMetadata(conversationId: string): Promise<Record<string, unknown> | null> {\n return this.metadata.get(conversationId) ?? null;\n }\n\n async setMetadata(conversationId: string, metadata: Record<string, unknown>): Promise<void> {\n this.metadata.set(conversationId, metadata);\n }\n\n /** Clear all data (useful for testing) */\n clearAll(): void {\n this.messages.clear();\n this.metadata.clear();\n }\n\n /** Get all conversation IDs */\n getConversationIds(): string[] {\n return Array.from(this.messages.keys());\n }\n}\n\n/** Create a new in-memory store */\nexport function createInMemoryStore(): InMemoryStore {\n return new InMemoryStore();\n}\n","// Buffer Memory for Binario SDK\n// Simple sliding window memory that keeps the most recent messages\n\nimport type { Message } from '../types';\nimport type { \n Memory, \n MemoryStore, \n BufferMemoryOptions, \n ConversationContext,\n StoredMessage \n} from './types';\nimport { \n countMessagesTokens, \n truncateMessages, \n truncateMessagesByCount,\n createStoredMessage,\n createContext,\n generateId\n} from './utils';\nimport { InMemoryStore } from './stores/in-memory';\n\nconst DEFAULT_MAX_MESSAGES = 50;\nconst DEFAULT_MAX_TOKENS = 4000;\n\n/**\n * Buffer Memory - Sliding window of recent messages.\n * \n * Best for:\n * - Simple chat applications\n * - Short conversations\n * - When you don't need long-term context\n * \n * @example\n * ```ts\n * const memory = new BufferMemory({ maxMessages: 20 });\n * await memory.add({ role: 'user', content: 'Hello!' });\n * const messages = await memory.getMessages();\n * ```\n */\nexport class BufferMemory implements Memory {\n readonly type = 'buffer' as const;\n \n private store: MemoryStore;\n private conversationId: string;\n private maxMessages: number;\n private maxTokens: number;\n private includeSystemMessages: boolean;\n private strategy: 'fifo' | 'sliding';\n\n constructor(options: BufferMemoryOptions & { store?: MemoryStore } = {}) {\n this.store = options.store ?? new InMemoryStore();\n this.conversationId = options.conversationId ?? generateId();\n this.maxMessages = options.maxMessages ?? DEFAULT_MAX_MESSAGES;\n this.maxTokens = options.maxTokens ?? DEFAULT_MAX_TOKENS;\n this.includeSystemMessages = options.includeSystemMessages ?? true;\n this.strategy = options.strategy ?? 'sliding';\n }\n\n async add(message: Message): Promise<void> {\n const stored = createStoredMessage(message, this.conversationId);\n await this.store.addMessage(stored);\n await this.trim();\n }\n\n async addMany(messages: Message[]): Promise<void> {\n for (const message of messages) {\n const stored = createStoredMessage(message, this.conversationId);\n await this.store.addMessage(stored);\n }\n await this.trim();\n }\n\n async getMessages(): Promise<Message[]> {\n const stored = await this.store.getMessages(this.conversationId);\n return this.extractMessages(stored);\n }\n\n async getContext(): Promise<ConversationContext> {\n const messages = await this.getMessages();\n return createContext(messages);\n }\n\n async getContextWindow(maxTokens: number): Promise<ConversationContext> {\n const messages = await this.getMessages();\n const truncated = truncateMessages(messages, maxTokens, {\n keepSystemMessages: this.includeSystemMessages,\n });\n return createContext(truncated);\n }\n\n async clear(): Promise<void> {\n await this.store.clear(this.conversationId);\n }\n\n async getMessageCount(): Promise<number> {\n const stored = await this.store.getMessages(this.conversationId);\n return stored.length;\n }\n\n async getTokenCount(): Promise<number> {\n const messages = await this.getMessages();\n return countMessagesTokens(messages);\n }\n\n /** Get the conversation ID */\n getConversationId(): string {\n return this.conversationId;\n }\n\n /** Switch to a different conversation */\n setConversationId(id: string): void {\n this.conversationId = id;\n }\n\n private extractMessages(stored: StoredMessage[]): Message[] {\n return stored\n .sort((a, b) => a.timestamp - b.timestamp)\n .map(s => s.message);\n }\n\n private async trim(): Promise<void> {\n const stored = await this.store.getMessages(this.conversationId);\n const messages = this.extractMessages(stored);\n \n // First, trim by message count\n let trimmed = truncateMessagesByCount(messages, this.maxMessages, {\n keepSystemMessages: this.includeSystemMessages,\n });\n \n // Then, trim by token count\n trimmed = truncateMessages(trimmed, this.maxTokens, {\n keepSystemMessages: this.includeSystemMessages,\n });\n \n // If we trimmed, update the store\n if (trimmed.length < messages.length) {\n await this.store.clear(this.conversationId);\n for (const message of trimmed) {\n const storedMsg = createStoredMessage(message, this.conversationId);\n await this.store.addMessage(storedMsg);\n }\n }\n }\n}\n\n/** Create a new buffer memory instance */\nexport function createBufferMemory(\n options: BufferMemoryOptions & { store?: MemoryStore } = {}\n): BufferMemory {\n return new BufferMemory(options);\n}\n","// Summary Memory for Binario SDK\n// Uses LLM to summarize conversation history\n\nimport type { Message } from '../types';\nimport type { \n Memory, \n MemoryStore, \n SummaryMemoryOptions, \n SummarizableMemory,\n ConversationContext,\n StoredMessage \n} from './types';\nimport { \n countMessagesTokens, \n createStoredMessage,\n createContext,\n generateId,\n formatConversationForSummary,\n DEFAULT_SUMMARY_PROMPT,\n truncateMessages\n} from './utils';\nimport { InMemoryStore } from './stores/in-memory';\n\nconst DEFAULT_SUMMARIZE_THRESHOLD = 2000; // tokens\nconst DEFAULT_SUMMARY_MODEL = 'google/gemini-2.5-flash';\n\n/** Summarizer function type */\nexport type SummarizerFn = (messages: Message[], prompt: string) => Promise<string>;\n\n/**\n * Summary Memory - Summarizes old conversation history.\n * \n * Best for:\n * - Long conversations\n * - When you need to preserve context but reduce tokens\n * - Cost optimization\n * \n * @example\n * ```ts\n * const memory = new SummaryMemory({\n * summarizer: async (messages, prompt) => {\n * const response = await binario.chat([\n * { role: 'system', content: prompt },\n * { role: 'user', content: formatConversation(messages) }\n * ]);\n * return response.content;\n * }\n * });\n * ```\n */\nexport class SummaryMemory implements Memory, SummarizableMemory {\n readonly type = 'summary' as const;\n \n private store: MemoryStore;\n private conversationId: string;\n private summarizeThreshold: number;\n private summaryModel: string;\n private summaryPrompt: string;\n private summarizer?: SummarizerFn;\n private includeSystemMessages: boolean;\n\n constructor(options: SummaryMemoryOptions & { \n store?: MemoryStore;\n summarizer?: SummarizerFn;\n } = {}) {\n this.store = options.store ?? new InMemoryStore();\n this.conversationId = options.conversationId ?? generateId();\n this.summarizeThreshold = options.summarizeThreshold ?? DEFAULT_SUMMARIZE_THRESHOLD;\n this.summaryModel = options.summaryModel ?? DEFAULT_SUMMARY_MODEL;\n this.summaryPrompt = options.summaryPrompt ?? DEFAULT_SUMMARY_PROMPT;\n this.summarizer = options.summarizer;\n this.includeSystemMessages = options.includeSystemMessages ?? true;\n }\n\n /** Set the summarizer function */\n setSummarizer(fn: SummarizerFn): void {\n this.summarizer = fn;\n }\n\n async add(message: Message): Promise<void> {\n const stored = createStoredMessage(message, this.conversationId);\n await this.store.addMessage(stored);\n \n // Check if we need to summarize\n await this.checkAndSummarize();\n }\n\n async addMany(messages: Message[]): Promise<void> {\n for (const message of messages) {\n const stored = createStoredMessage(message, this.conversationId);\n await this.store.addMessage(stored);\n }\n await this.checkAndSummarize();\n }\n\n async getMessages(): Promise<Message[]> {\n const stored = await this.store.getMessages(this.conversationId);\n const messages = this.extractMessages(stored);\n const summary = await this.getSummary();\n \n if (summary) {\n // Prepend summary as system message\n const summaryMsg: Message = {\n role: 'system',\n content: `Previous conversation summary:\\n${summary}`,\n };\n \n // Filter out old system summary messages\n const filtered = messages.filter(\n m => !(m.role === 'system' && m.content.startsWith('Previous conversation summary:'))\n );\n \n return [summaryMsg, ...filtered];\n }\n \n return messages;\n }\n\n async getContext(): Promise<ConversationContext> {\n const messages = await this.getMessages();\n const summary = await this.getSummary();\n return createContext(messages, summary);\n }\n\n async getContextWindow(maxTokens: number): Promise<ConversationContext> {\n const messages = await this.getMessages();\n const summary = await this.getSummary();\n const truncated = truncateMessages(messages, maxTokens, {\n keepSystemMessages: this.includeSystemMessages,\n });\n return createContext(truncated, summary);\n }\n\n async clear(): Promise<void> {\n await this.store.clear(this.conversationId);\n }\n\n async getMessageCount(): Promise<number> {\n const stored = await this.store.getMessages(this.conversationId);\n return stored.length;\n }\n\n async getTokenCount(): Promise<number> {\n const messages = await this.getMessages();\n return countMessagesTokens(messages);\n }\n\n async getSummary(): Promise<string | null> {\n const metadata = await this.store.getMetadata(this.conversationId);\n return (metadata?.summary as string) ?? null;\n }\n\n async summarize(): Promise<string> {\n if (!this.summarizer) {\n throw new Error('No summarizer function provided. Set one with setSummarizer()');\n }\n\n const stored = await this.store.getMessages(this.conversationId);\n const messages = this.extractMessages(stored);\n \n if (messages.length === 0) {\n return '';\n }\n\n const conversationText = formatConversationForSummary(messages);\n const prompt = this.summaryPrompt.replace('{conversation}', conversationText);\n \n const summary = await this.summarizer(messages, prompt);\n \n // Store the summary\n await this.store.setMetadata(this.conversationId, { summary });\n \n return summary;\n }\n\n /** Get the conversation ID */\n getConversationId(): string {\n return this.conversationId;\n }\n\n /** Switch to a different conversation */\n setConversationId(id: string): void {\n this.conversationId = id;\n }\n\n private extractMessages(stored: StoredMessage[]): Message[] {\n return stored\n .sort((a, b) => a.timestamp - b.timestamp)\n .map(s => s.message);\n }\n\n private async checkAndSummarize(): Promise<void> {\n if (!this.summarizer) return;\n\n const tokenCount = await this.getTokenCount();\n \n if (tokenCount > this.summarizeThreshold) {\n // Get current messages\n const stored = await this.store.getMessages(this.conversationId);\n const messages = this.extractMessages(stored);\n \n // Keep last few messages, summarize the rest\n const keepCount = Math.max(4, Math.floor(messages.length / 4));\n const toSummarize = messages.slice(0, -keepCount);\n const toKeep = messages.slice(-keepCount);\n \n if (toSummarize.length > 0) {\n // Get existing summary\n const existingSummary = await this.getSummary();\n \n // Create messages to summarize including existing summary\n const messagesForSummary = existingSummary \n ? [{ role: 'system' as const, content: `Previous summary: ${existingSummary}` }, ...toSummarize]\n : toSummarize;\n \n // Generate new summary\n const conversationText = formatConversationForSummary(messagesForSummary);\n const prompt = this.summaryPrompt.replace('{conversation}', conversationText);\n const summary = await this.summarizer(messagesForSummary, prompt);\n \n // Clear and re-add only kept messages\n await this.store.clear(this.conversationId);\n await this.store.setMetadata(this.conversationId, { summary });\n \n for (const message of toKeep) {\n const storedMsg = createStoredMessage(message, this.conversationId);\n await this.store.addMessage(storedMsg);\n }\n }\n }\n }\n}\n\n/** Create a new summary memory instance */\nexport function createSummaryMemory(\n options: SummaryMemoryOptions & { \n store?: MemoryStore;\n summarizer?: SummarizerFn;\n } = {}\n): SummaryMemory {\n return new SummaryMemory(options);\n}\n","// Summary Buffer Memory for Binario SDK\n// Hybrid: keeps recent messages in buffer + summarizes older history\n\nimport type { Message } from '../types';\nimport type { \n Memory, \n MemoryStore, \n SummaryBufferMemoryOptions, \n SummarizableMemory,\n ConversationContext,\n StoredMessage \n} from './types';\nimport { \n countMessagesTokens, \n createStoredMessage,\n createContext,\n generateId,\n formatConversationForSummary,\n DEFAULT_SUMMARY_PROMPT,\n truncateMessages\n} from './utils';\nimport { InMemoryStore } from './stores/in-memory';\nimport type { SummarizerFn } from './summary';\n\nconst DEFAULT_BUFFER_SIZE = 10;\nconst DEFAULT_SUMMARIZE_THRESHOLD = 2000;\n\n/**\n * Summary Buffer Memory - Best of both worlds.\n * Keeps recent messages intact + summarizes older history.\n * \n * Best for:\n * - Production chat applications\n * - Long conversations where recent context matters\n * - Balancing token usage with context quality\n * \n * @example\n * ```ts\n * const memory = new SummaryBufferMemory({\n * bufferSize: 10, // Keep last 10 messages\n * summarizeThreshold: 2000, // Summarize when > 2000 tokens\n * summarizer: async (messages, prompt) => {\n * return await binario.chat([{ role: 'user', content: prompt }]).content;\n * }\n * });\n * ```\n */\nexport class SummaryBufferMemory implements Memory, SummarizableMemory {\n readonly type = 'summary-buffer' as const;\n \n private store: MemoryStore;\n private conversationId: string;\n private bufferSize: number;\n private summarizeThreshold: number;\n private summaryPrompt: string;\n private summarizer?: SummarizerFn;\n private includeSystemMessages: boolean;\n\n constructor(options: SummaryBufferMemoryOptions & { \n store?: MemoryStore;\n summarizer?: SummarizerFn;\n } = {}) {\n this.store = options.store ?? new InMemoryStore();\n this.conversationId = options.conversationId ?? generateId();\n this.bufferSize = options.bufferSize ?? DEFAULT_BUFFER_SIZE;\n this.summarizeThreshold = options.summarizeThreshold ?? DEFAULT_SUMMARIZE_THRESHOLD;\n this.summaryPrompt = options.summaryPrompt ?? DEFAULT_SUMMARY_PROMPT;\n this.summarizer = options.summarizer;\n this.includeSystemMessages = options.includeSystemMessages ?? true;\n }\n\n /** Set the summarizer function */\n setSummarizer(fn: SummarizerFn): void {\n this.summarizer = fn;\n }\n\n async add(message: Message): Promise<void> {\n const stored = createStoredMessage(message, this.conversationId);\n await this.store.addMessage(stored);\n await this.checkAndSummarize();\n }\n\n async addMany(messages: Message[]): Promise<void> {\n for (const message of messages) {\n const stored = createStoredMessage(message, this.conversationId);\n await this.store.addMessage(stored);\n }\n await this.checkAndSummarize();\n }\n\n async getMessages(): Promise<Message[]> {\n const stored = await this.store.getMessages(this.conversationId);\n const messages = this.extractMessages(stored);\n const summary = await this.getSummary();\n \n // Get buffer (recent messages)\n const buffer = messages.slice(-this.bufferSize);\n \n if (summary) {\n const summaryMsg: Message = {\n role: 'system',\n content: `Previous conversation summary:\\n${summary}`,\n };\n \n // Get system messages\n const systemMessages = messages\n .slice(0, -this.bufferSize)\n .filter(m => m.role === 'system' && !m.content.startsWith('Previous conversation summary:'));\n \n return [...systemMessages, summaryMsg, ...buffer];\n }\n \n return messages;\n }\n\n async getContext(): Promise<ConversationContext> {\n const messages = await this.getMessages();\n const summary = await this.getSummary();\n return createContext(messages, summary);\n }\n\n async getContextWindow(maxTokens: number): Promise<ConversationContext> {\n const messages = await this.getMessages();\n const summary = await this.getSummary();\n const truncated = truncateMessages(messages, maxTokens, {\n keepSystemMessages: this.includeSystemMessages,\n });\n return createContext(truncated, summary);\n }\n\n async clear(): Promise<void> {\n await this.store.clear(this.conversationId);\n }\n\n async getMessageCount(): Promise<number> {\n const stored = await this.store.getMessages(this.conversationId);\n return stored.length;\n }\n\n async getTokenCount(): Promise<number> {\n const messages = await this.getMessages();\n return countMessagesTokens(messages);\n }\n\n async getSummary(): Promise<string | null> {\n const metadata = await this.store.getMetadata(this.conversationId);\n return (metadata?.summary as string) ?? null;\n }\n\n async summarize(): Promise<string> {\n if (!this.summarizer) {\n throw new Error('No summarizer function provided. Set one with setSummarizer()');\n }\n\n const stored = await this.store.getMessages(this.conversationId);\n const messages = this.extractMessages(stored);\n \n // Messages outside the buffer\n const toSummarize = messages.slice(0, -this.bufferSize);\n \n if (toSummarize.length === 0) {\n return '';\n }\n\n const existingSummary = await this.getSummary();\n const messagesForSummary = existingSummary \n ? [{ role: 'system' as const, content: `Previous summary: ${existingSummary}` }, ...toSummarize]\n : toSummarize;\n\n const conversationText = formatConversationForSummary(messagesForSummary);\n const prompt = this.summaryPrompt.replace('{conversation}', conversationText);\n \n const summary = await this.summarizer(messagesForSummary, prompt);\n \n await this.store.setMetadata(this.conversationId, { summary });\n \n return summary;\n }\n\n /** Get buffer size */\n getBufferSize(): number {\n return this.bufferSize;\n }\n\n /** Get the conversation ID */\n getConversationId(): string {\n return this.conversationId;\n }\n\n /** Switch to a different conversation */\n setConversationId(id: string): void {\n this.conversationId = id;\n }\n\n private extractMessages(stored: StoredMessage[]): Message[] {\n return stored\n .sort((a, b) => a.timestamp - b.timestamp)\n .map(s => s.message);\n }\n\n private async checkAndSummarize(): Promise<void> {\n if (!this.summarizer) return;\n\n const stored = await this.store.getMessages(this.conversationId);\n const messages = this.extractMessages(stored);\n \n // Only summarize if we have more messages than buffer size\n if (messages.length <= this.bufferSize) return;\n \n const tokenCount = await this.getTokenCount();\n \n if (tokenCount > this.summarizeThreshold) {\n // Get messages to keep in buffer\n const buffer = messages.slice(-this.bufferSize);\n const toSummarize = messages.slice(0, -this.bufferSize);\n \n if (toSummarize.length > 0) {\n const existingSummary = await this.getSummary();\n \n const messagesForSummary = existingSummary \n ? [{ role: 'system' as const, content: `Previous summary: ${existingSummary}` }, ...toSummarize]\n : toSummarize;\n \n const conversationText = formatConversationForSummary(messagesForSummary);\n const prompt = this.summaryPrompt.replace('{conversation}', conversationText);\n const summary = await this.summarizer(messagesForSummary, prompt);\n \n // Clear and re-add only buffer messages\n await this.store.clear(this.conversationId);\n await this.store.setMetadata(this.conversationId, { summary });\n \n for (const message of buffer) {\n const storedMsg = createStoredMessage(message, this.conversationId);\n await this.store.addMessage(storedMsg);\n }\n }\n }\n }\n}\n\n/** Create a new summary buffer memory instance */\nexport function createSummaryBufferMemory(\n options: SummaryBufferMemoryOptions & { \n store?: MemoryStore;\n summarizer?: SummarizerFn;\n } = {}\n): SummaryBufferMemory {\n return new SummaryBufferMemory(options);\n}\n","// Vector Memory for Binario SDK\n// Semantic search using embeddings\n\nimport type { Message } from '../types';\nimport type { \n Memory, \n MemoryStore, \n VectorMemoryOptions, \n SearchableMemory,\n ConversationContext,\n StoredMessage,\n SearchResult\n} from './types';\nimport type { EmbeddingsProvider } from '../embeddings/types';\nimport { \n countMessagesTokens, \n createStoredMessage,\n createContext,\n generateId,\n cosineSimilarity,\n truncateMessages\n} from './utils';\nimport { InMemoryStore } from './stores/in-memory';\n\nconst DEFAULT_TOP_K = 5;\nconst DEFAULT_MIN_SCORE = 0.5;\n\n/**\n * Vector Memory - Semantic search using embeddings.\n * Retrieves the most relevant messages based on similarity.\n * \n * Best for:\n * - Very long conversations\n * - Finding relevant context from history\n * - RAG-like applications\n * \n * @example\n * ```ts\n * const memory = new VectorMemory({\n * embeddings: new CloudflareEmbeddings({ binding: env.AI }),\n * topK: 5,\n * minScore: 0.7\n * });\n * \n * await memory.add({ role: 'user', content: 'I love pizza' });\n * const results = await memory.search('What food do I like?');\n * // Returns the pizza message with high similarity score\n * ```\n */\nexport class VectorMemory implements Memory, SearchableMemory {\n readonly type = 'vector' as const;\n \n private store: MemoryStore;\n private embeddings: EmbeddingsProvider;\n private conversationId: string;\n private topK: number;\n private minScore: number;\n private maxMessages?: number;\n private maxTokens?: number;\n private includeSystemMessages: boolean;\n\n constructor(options: VectorMemoryOptions & { \n store?: MemoryStore;\n embeddings: EmbeddingsProvider;\n }) {\n if (!options.embeddings) {\n throw new Error('VectorMemory requires an embeddings provider');\n }\n \n this.store = options.store ?? new InMemoryStore();\n this.embeddings = options.embeddings;\n this.conversationId = options.conversationId ?? generateId();\n this.topK = options.topK ?? DEFAULT_TOP_K;\n this.minScore = options.minScore ?? DEFAULT_MIN_SCORE;\n this.maxMessages = options.maxMessages;\n this.maxTokens = options.maxTokens;\n this.includeSystemMessages = options.includeSystemMessages ?? true;\n }\n\n async add(message: Message): Promise<void> {\n // Generate embedding for the message\n const { embedding } = await this.embeddings.embed(message.content);\n \n const stored = createStoredMessage(message, this.conversationId, {\n embedding,\n });\n \n await this.store.addMessage(stored);\n }\n\n async addMany(messages: Message[]): Promise<void> {\n if (messages.length === 0) return;\n \n // Batch embed all messages\n const texts = messages.map(m => m.content);\n const { embeddings } = await this.embeddings.embedMany(texts);\n \n for (let i = 0; i < messages.length; i++) {\n const stored = createStoredMessage(messages[i], this.conversationId, {\n embedding: embeddings[i].embedding,\n });\n await this.store.addMessage(stored);\n }\n }\n\n async getMessages(): Promise<Message[]> {\n const stored = await this.store.getMessages(this.conversationId);\n return this.extractMessages(stored);\n }\n\n async getContext(): Promise<ConversationContext> {\n const messages = await this.getMessages();\n return createContext(messages);\n }\n\n async getContextWindow(maxTokens: number): Promise<ConversationContext> {\n const messages = await this.getMessages();\n const truncated = truncateMessages(messages, maxTokens, {\n keepSystemMessages: this.includeSystemMessages,\n });\n return createContext(truncated);\n }\n\n async clear(): Promise<void> {\n await this.store.clear(this.conversationId);\n }\n\n async getMessageCount(): Promise<number> {\n const stored = await this.store.getMessages(this.conversationId);\n return stored.length;\n }\n\n async getTokenCount(): Promise<number> {\n const messages = await this.getMessages();\n return countMessagesTokens(messages);\n }\n\n async search(query: string, topK?: number): Promise<SearchResult[]> {\n const k = topK ?? this.topK;\n \n // Get query embedding\n const { embedding: queryEmbedding } = await this.embeddings.embed(query);\n \n // Get all stored messages\n const stored = await this.store.getMessages(this.conversationId);\n \n // Calculate similarity for each message\n const results: SearchResult[] = [];\n \n for (const msg of stored) {\n if (!msg.embedding) continue;\n \n const score = cosineSimilarity(queryEmbedding, msg.embedding);\n \n if (score >= this.minScore) {\n results.push({ message: msg, score });\n }\n }\n \n // Sort by score (highest first) and take top K\n return results\n .sort((a, b) => b.score - a.score)\n .slice(0, k);\n }\n\n /** \n * Get relevant context for a query.\n * Returns messages most semantically similar to the query.\n */\n async getRelevantContext(query: string, topK?: number): Promise<Message[]> {\n const results = await this.search(query, topK);\n \n // Sort by timestamp (oldest first) to maintain conversation order\n const sorted = results.sort((a, b) => a.message.timestamp - b.message.timestamp);\n \n return sorted.map(r => r.message.message);\n }\n\n /**\n * Build context with recent messages + relevant history.\n * Useful for including both recency and relevance.\n */\n async buildContext(\n query: string,\n options?: { recentCount?: number; relevantCount?: number }\n ): Promise<Message[]> {\n const { recentCount = 5, relevantCount = 3 } = options ?? {};\n \n const stored = await this.store.getMessages(this.conversationId);\n const messages = this.extractMessages(stored);\n \n // Get recent messages\n const recent = messages.slice(-recentCount);\n const recentIds = new Set(stored.slice(-recentCount).map(s => s.id));\n \n // Get relevant messages (excluding recent ones)\n const relevantResults = await this.search(query, relevantCount + recentCount);\n const relevant = relevantResults\n .filter(r => !recentIds.has(r.message.id))\n .slice(0, relevantCount)\n .sort((a, b) => a.message.timestamp - b.message.timestamp)\n .map(r => r.message.message);\n \n // Combine: relevant history + recent messages\n return [...relevant, ...recent];\n }\n\n /** Get the conversation ID */\n getConversationId(): string {\n return this.conversationId;\n }\n\n /** Switch to a different conversation */\n setConversationId(id: string): void {\n this.conversationId = id;\n }\n\n private extractMessages(stored: StoredMessage[]): Message[] {\n return stored\n .sort((a, b) => a.timestamp - b.timestamp)\n .map(s => s.message);\n }\n}\n\n/** Create a new vector memory instance */\nexport function createVectorMemory(\n options: VectorMemoryOptions & { \n store?: MemoryStore;\n embeddings: EmbeddingsProvider;\n }\n): VectorMemory {\n return new VectorMemory(options);\n}\n","// LocalStorage Store for Binario Memory System\r\n\r\nimport type { MemoryStore, StoredMessage } from '../types';\r\n\r\nconst MESSAGES_PREFIX = 'binario:memory:messages:';\r\nconst METADATA_PREFIX = 'binario:memory:metadata:';\r\n\r\n/**\r\n * LocalStorage-based store for browser environments.\r\n * Data persists across page reloads.\r\n */\r\nexport class LocalStorageStore implements MemoryStore {\r\n private prefix: string;\r\n\r\n constructor(prefix: string = '') {\r\n this.prefix = prefix;\r\n }\r\n\r\n private getMessagesKey(conversationId: string): string {\r\n return `${MESSAGES_PREFIX}${this.prefix}${conversationId}`;\r\n }\r\n\r\n private getMetadataKey(conversationId: string): string {\r\n return `${METADATA_PREFIX}${this.prefix}${conversationId}`;\r\n }\r\n\r\n private getStorage(): Storage | null {\r\n if (typeof window !== 'undefined' && window.localStorage) {\r\n return window.localStorage;\r\n }\r\n return null;\r\n }\r\n\r\n async getMessages(conversationId: string): Promise<StoredMessage[]> {\r\n const storage = this.getStorage();\r\n if (!storage) return [];\r\n\r\n try {\r\n const data = storage.getItem(this.getMessagesKey(conversationId));\r\n return data ? JSON.parse(data) : [];\r\n } catch {\r\n return [];\r\n }\r\n }\r\n\r\n async addMessage(message: StoredMessage): Promise<void> {\r\n const storage = this.getStorage();\r\n if (!storage) return;\r\n\r\n const messages = await this.getMessages(message.conversationId);\r\n messages.push(message);\r\n \r\n try {\r\n storage.setItem(\r\n this.getMessagesKey(message.conversationId),\r\n JSON.stringify(messages)\r\n );\r\n } catch (e) {\r\n // Handle quota exceeded\r\n if (e instanceof Error && e.name === 'QuotaExceededError') {\r\n try {\r\n // Remove oldest messages and retry\r\n const trimmed = messages.slice(-Math.floor(messages.length / 2));\r\n storage.setItem(\r\n this.getMessagesKey(message.conversationId),\r\n JSON.stringify(trimmed)\r\n );\r\n } catch {\r\n // If retry also fails, silently ignore\r\n }\r\n }\r\n }\r\n }\r\n\r\n async updateMessage(id: string, updates: Partial<StoredMessage>): Promise<void> {\r\n const storage = this.getStorage();\r\n if (!storage) return;\r\n\r\n // We need to search all conversations since we don't know which one has this message\r\n const keys = Object.keys(storage).filter(k => k.startsWith(MESSAGES_PREFIX + this.prefix));\r\n \r\n for (const key of keys) {\r\n try {\r\n const data = storage.getItem(key);\r\n if (!data) continue;\r\n \r\n const messages: StoredMessage[] = JSON.parse(data);\r\n const index = messages.findIndex(m => m.id === id);\r\n \r\n if (index !== -1) {\r\n messages[index] = { ...messages[index], ...updates };\r\n storage.setItem(key, JSON.stringify(messages));\r\n return;\r\n }\r\n } catch {\r\n continue;\r\n }\r\n }\r\n }\r\n\r\n async deleteMessage(id: string): Promise<void> {\r\n const storage = this.getStorage();\r\n if (!storage) return;\r\n\r\n const keys = Object.keys(storage).filter(k => k.startsWith(MESSAGES_PREFIX + this.prefix));\r\n \r\n for (const key of keys) {\r\n try {\r\n const data = storage.getItem(key);\r\n if (!data) continue;\r\n \r\n const messages: StoredMessage[] = JSON.parse(data);\r\n const filtered = messages.filter(m => m.id !== id);\r\n \r\n if (filtered.length !== messages.length) {\r\n storage.setItem(key, JSON.stringify(filtered));\r\n return;\r\n }\r\n } catch {\r\n continue;\r\n }\r\n }\r\n }\r\n\r\n async clear(conversationId: string): Promise<void> {\r\n const storage = this.getStorage();\r\n if (!storage) return;\r\n\r\n storage.removeItem(this.getMessagesKey(conversationId));\r\n storage.removeItem(this.getMetadataKey(conversationId));\r\n }\r\n\r\n async getMetadata(conversationId: string): Promise<Record<string, unknown> | null> {\r\n const storage = this.getStorage();\r\n if (!storage) return null;\r\n\r\n try {\r\n const data = storage.getItem(this.getMetadataKey(conversationId));\r\n return data ? JSON.parse(data) : null;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n async setMetadata(conversationId: string, metadata: Record<string, unknown>): Promise<void> {\r\n const storage = this.getStorage();\r\n if (!storage) return;\r\n\r\n storage.setItem(this.getMetadataKey(conversationId), JSON.stringify(metadata));\r\n }\r\n\r\n /** Clear all binario memory data */\r\n clearAll(): void {\r\n const storage = this.getStorage();\r\n if (!storage) return;\r\n\r\n const keysToRemove = Object.keys(storage).filter(\r\n k => k.startsWith(MESSAGES_PREFIX + this.prefix) || k.startsWith(METADATA_PREFIX + this.prefix)\r\n );\r\n \r\n keysToRemove.forEach(key => storage.removeItem(key));\r\n }\r\n\r\n /** Get all conversation IDs */\r\n getConversationIds(): string[] {\r\n const storage = this.getStorage();\r\n if (!storage) return [];\r\n\r\n const prefix = MESSAGES_PREFIX + this.prefix;\r\n return Object.keys(storage)\r\n .filter(k => k.startsWith(prefix))\r\n .map(k => k.slice(prefix.length));\r\n }\r\n}\r\n\r\n/** Create a new localStorage store */\r\nexport function createLocalStorageStore(prefix: string = ''): LocalStorageStore {\r\n return new LocalStorageStore(prefix);\r\n}\r\n","// Cloudflare Embeddings Provider for Binario SDK\n\nimport type { \n EmbeddingsProvider, \n EmbeddingResult, \n BatchEmbeddingResult,\n CloudflareEmbeddingsConfig,\n CloudflareAIBinding\n} from './types';\nimport { countTokens } from '../memory/utils';\n\n/** Available Cloudflare embedding models */\nexport const CLOUDFLARE_EMBEDDING_MODELS = {\n 'bge-base-en': '@cf/baai/bge-base-en-v1.5',\n 'bge-large-en': '@cf/baai/bge-large-en-v1.5',\n 'bge-small-en': '@cf/baai/bge-small-en-v1.5',\n} as const;\n\nexport type CloudflareEmbeddingModel = keyof typeof CLOUDFLARE_EMBEDDING_MODELS | string;\n\nconst DEFAULT_MODEL = CLOUDFLARE_EMBEDDING_MODELS['bge-base-en'];\n\n/**\n * Cloudflare AI Embeddings Provider.\n * Uses Cloudflare Workers AI for generating embeddings.\n * \n * @example\n * ```ts\n * // In a Cloudflare Worker with binding\n * const embeddings = new CloudflareEmbeddings({ binding: env.AI });\n * const result = await embeddings.embed('Hello world');\n * console.log(result.embedding); // [0.1, 0.2, ...]\n * \n * // Using REST API\n * const embeddings = new CloudflareEmbeddings({\n * accountId: 'your-account-id',\n * apiKey: 'your-api-key'\n * });\n * ```\n */\nexport class CloudflareEmbeddings implements EmbeddingsProvider {\n readonly name = 'cloudflare';\n \n private binding?: CloudflareAIBinding;\n private accountId?: string;\n private apiKey?: string;\n private model: string;\n\n constructor(config: CloudflareEmbeddingsConfig = {}) {\n this.binding = config.binding;\n this.accountId = config.accountId;\n this.apiKey = config.apiKey;\n this.model = config.model ?? DEFAULT_MODEL;\n \n // Resolve model alias\n if (this.model in CLOUDFLARE_EMBEDDING_MODELS) {\n this.model = CLOUDFLARE_EMBEDDING_MODELS[this.model as keyof typeof CLOUDFLARE_EMBEDDING_MODELS];\n }\n }\n\n async embed(text: string): Promise<EmbeddingResult> {\n const result = await this.embedMany([text]);\n return result.embeddings[0];\n }\n\n async embedMany(texts: string[]): Promise<BatchEmbeddingResult> {\n if (texts.length === 0) {\n return {\n embeddings: [],\n model: this.model,\n usage: { promptTokens: 0, totalTokens: 0 },\n };\n }\n\n let embeddings: number[][];\n \n if (this.binding) {\n // Use binding (faster in Workers)\n const response = await this.binding.run(this.model, { text: texts });\n embeddings = response.data;\n } else if (this.accountId && this.apiKey) {\n // Use REST API\n embeddings = await this.embedViaRest(texts);\n } else {\n throw new Error('CloudflareEmbeddings requires either a binding or accountId + apiKey');\n }\n\n // Calculate token usage\n const promptTokens = texts.reduce((sum, t) => sum + countTokens(t), 0);\n\n return {\n embeddings: texts.map((text, i) => ({\n text,\n embedding: embeddings[i],\n tokenCount: countTokens(text),\n })),\n model: this.model,\n usage: {\n promptTokens,\n totalTokens: promptTokens,\n },\n };\n }\n\n private async embedViaRest(texts: string[]): Promise<number[][]> {\n const url = `https://api.cloudflare.com/client/v4/accounts/${this.accountId}/ai/run/${this.model}`;\n \n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ text: texts }),\n });\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Cloudflare embeddings failed: ${response.status} ${error}`);\n }\n\n const data = await response.json() as { result: { data: number[][] } };\n return data.result.data;\n }\n\n /** Get the current model */\n getModel(): string {\n return this.model;\n }\n\n /** Set a new model */\n setModel(model: string): void {\n this.model = model in CLOUDFLARE_EMBEDDING_MODELS\n ? CLOUDFLARE_EMBEDDING_MODELS[model as keyof typeof CLOUDFLARE_EMBEDDING_MODELS]\n : model;\n }\n}\n\n/** Create a new Cloudflare embeddings provider */\nexport function createCloudflareEmbeddings(\n config: CloudflareEmbeddingsConfig = {}\n): CloudflareEmbeddings {\n return new CloudflareEmbeddings(config);\n}\n","// Binario React Hooks\r\n\r\nimport { useState, useCallback, useRef, useEffect } from 'react';\r\nimport type { Message, ChatOptions, ChatResponse, StreamCallbacks } from './types';\r\nimport { BinarioAI } from './core';\r\nimport { Agent } from './agent';\r\nimport type { z } from 'zod';\r\n\r\n// ============= Chat Hook =============\r\n\r\nexport interface UseBinarioChatOptions extends ChatOptions {\r\n initialMessages?: Message[];\r\n onFinish?: (response: ChatResponse) => void;\r\n onError?: (error: Error) => void;\r\n}\r\n\r\nexport interface UseBinarioChatReturn {\r\n messages: Message[];\r\n input: string;\r\n setInput: (input: string) => void;\r\n isLoading: boolean;\r\n error: Error | null;\r\n append: (message: Message) => Promise<void>;\r\n reload: () => Promise<void>;\r\n stop: () => void;\r\n setMessages: (messages: Message[]) => void;\r\n lastResponse: ChatResponse | null;\r\n}\r\n\r\nexport function useBinarioChat(\r\n binario: BinarioAI,\r\n options: UseBinarioChatOptions = {}\r\n): UseBinarioChatReturn {\r\n const [messages, setMessages] = useState<Message[]>(options.initialMessages || []);\r\n const [input, setInput] = useState('');\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [error, setError] = useState<Error | null>(null);\r\n const [lastResponse, setLastResponse] = useState<ChatResponse | null>(null);\r\n const abortControllerRef = useRef<AbortController | null>(null);\r\n\r\n const stop = useCallback(() => {\r\n abortControllerRef.current?.abort();\r\n abortControllerRef.current = null;\r\n setIsLoading(false);\r\n }, []);\r\n\r\n const append = useCallback(\r\n async (message: Message) => {\r\n setIsLoading(true);\r\n setError(null);\r\n abortControllerRef.current = new AbortController();\r\n\r\n const newMessages = [...messages, message];\r\n setMessages(newMessages);\r\n\r\n try {\r\n const response = await binario.chat(newMessages, options);\r\n const assistantMessage: Message = {\r\n role: 'assistant',\r\n content: response.content,\r\n tool_calls: response.toolCalls,\r\n };\r\n setMessages([...newMessages, assistantMessage]);\r\n setLastResponse(response);\r\n options.onFinish?.(response);\r\n } catch (err) {\r\n const error = err as Error;\r\n setError(error);\r\n options.onError?.(error);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n },\r\n [messages, binario, options]\r\n );\r\n\r\n const reload = useCallback(async () => {\r\n if (messages.length === 0) return;\r\n\r\n const lastUserMessageIndex = messages.map((m) => m.role).lastIndexOf('user');\r\n if (lastUserMessageIndex === -1) return;\r\n\r\n const messagesToReload = messages.slice(0, lastUserMessageIndex + 1);\r\n setMessages(messagesToReload);\r\n\r\n setIsLoading(true);\r\n setError(null);\r\n\r\n try {\r\n const response = await binario.chat(messagesToReload, options);\r\n const assistantMessage: Message = {\r\n role: 'assistant',\r\n content: response.content,\r\n tool_calls: response.toolCalls,\r\n };\r\n setMessages([...messagesToReload, assistantMessage]);\r\n setLastResponse(response);\r\n options.onFinish?.(response);\r\n } catch (err) {\r\n const error = err as Error;\r\n setError(error);\r\n options.onError?.(error);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n }, [messages, binario, options]);\r\n\r\n useEffect(() => {\r\n return () => {\r\n abortControllerRef.current?.abort();\r\n };\r\n }, []);\r\n\r\n return {\r\n messages,\r\n input,\r\n setInput,\r\n isLoading,\r\n error,\r\n append,\r\n reload,\r\n stop,\r\n setMessages,\r\n lastResponse,\r\n };\r\n}\r\n\r\n// ============= Stream Hook =============\r\n\r\nexport interface UseBinarioStreamOptions extends ChatOptions {\r\n initialMessages?: Message[];\r\n onToken?: (token: string) => void;\r\n onFinish?: (response: ChatResponse) => void;\r\n onError?: (error: Error) => void;\r\n}\r\n\r\nexport interface UseBinarioStreamReturn {\r\n messages: Message[];\r\n input: string;\r\n setInput: (input: string) => void;\r\n isStreaming: boolean;\r\n error: Error | null;\r\n streamingContent: string;\r\n send: (content: string) => Promise<void>;\r\n stop: () => void;\r\n setMessages: (messages: Message[]) => void;\r\n}\r\n\r\nexport function useBinarioStream(\r\n binario: BinarioAI,\r\n options: UseBinarioStreamOptions = {}\r\n): UseBinarioStreamReturn {\r\n const [messages, setMessages] = useState<Message[]>(options.initialMessages || []);\r\n const [input, setInput] = useState('');\r\n const [isStreaming, setIsStreaming] = useState(false);\r\n const [error, setError] = useState<Error | null>(null);\r\n const [streamingContent, setStreamingContent] = useState('');\r\n const abortRef = useRef(false);\r\n\r\n const stop = useCallback(() => {\r\n abortRef.current = true;\r\n setIsStreaming(false);\r\n }, []);\r\n\r\n const send = useCallback(\r\n async (content: string) => {\r\n setIsStreaming(true);\r\n setError(null);\r\n setStreamingContent('');\r\n abortRef.current = false;\r\n\r\n const userMessage: Message = { role: 'user', content };\r\n const newMessages = [...messages, userMessage];\r\n setMessages(newMessages);\r\n\r\n let fullContent = '';\r\n\r\n const callbacks: StreamCallbacks = {\r\n onToken: (token) => {\r\n if (abortRef.current) return;\r\n fullContent += token;\r\n setStreamingContent(fullContent);\r\n options.onToken?.(token);\r\n },\r\n onComplete: (response) => {\r\n const assistantMessage: Message = { role: 'assistant', content: fullContent };\r\n setMessages([...newMessages, assistantMessage]);\r\n setStreamingContent('');\r\n options.onFinish?.(response);\r\n },\r\n onError: (err) => {\r\n setError(err);\r\n options.onError?.(err);\r\n },\r\n };\r\n\r\n try {\r\n const stream = binario.streamChat(newMessages, options, callbacks);\r\n for await (const _ of stream) {\r\n if (abortRef.current) break;\r\n }\r\n } catch (err) {\r\n const error = err as Error;\r\n setError(error);\r\n options.onError?.(error);\r\n } finally {\r\n setIsStreaming(false);\r\n }\r\n },\r\n [messages, binario, options]\r\n );\r\n\r\n return {\r\n messages,\r\n input,\r\n setInput,\r\n isStreaming,\r\n error,\r\n streamingContent,\r\n send,\r\n stop,\r\n setMessages,\r\n };\r\n}\r\n\r\n// ============= Completion Hook =============\r\n\r\nexport interface UseBinarioCompletionOptions extends ChatOptions {\r\n onFinish?: (response: ChatResponse) => void;\r\n onError?: (error: Error) => void;\r\n}\r\n\r\nexport function useBinarioCompletion(\r\n binario: BinarioAI,\r\n options: UseBinarioCompletionOptions = {}\r\n) {\r\n const [completion, setCompletion] = useState('');\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [error, setError] = useState<Error | null>(null);\r\n\r\n const complete = useCallback(\r\n async (prompt: string, systemPrompt?: string) => {\r\n setIsLoading(true);\r\n setError(null);\r\n setCompletion('');\r\n\r\n const messages: Message[] = [];\r\n if (systemPrompt) {\r\n messages.push({ role: 'system', content: systemPrompt });\r\n }\r\n messages.push({ role: 'user', content: prompt });\r\n\r\n try {\r\n const response = await binario.chat(messages, options);\r\n setCompletion(response.content);\r\n options.onFinish?.(response);\r\n return response.content;\r\n } catch (err) {\r\n const error = err as Error;\r\n setError(error);\r\n options.onError?.(error);\r\n return null;\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n },\r\n [binario, options]\r\n );\r\n\r\n return {\r\n completion,\r\n isLoading,\r\n error,\r\n complete,\r\n };\r\n}\r\n\r\n// ============= Agent Hook =============\r\n\r\nexport interface UseBinarioAgentOptions {\r\n onStep?: (step: { type: string; content: string }) => void;\r\n onToolCall?: (tool: { name: string; args: unknown }) => void;\r\n onError?: (error: Error) => void;\r\n maxSteps?: number;\r\n}\r\n\r\nexport interface UseBinarioAgentReturn<TContext> {\r\n output: string;\r\n isRunning: boolean;\r\n error: Error | null;\r\n steps: Array<{ type: string; content: string }>;\r\n run: (input: string, context?: TContext) => Promise<string | null>;\r\n runStructured: <T>(input: string, schema: z.ZodType<T>, context?: TContext) => Promise<T | null>;\r\n stop: () => void;\r\n}\r\n\r\nexport function useBinarioAgent<TContext = unknown, TDeps = unknown>(\r\n agent: Agent<TContext, TDeps>,\r\n options: UseBinarioAgentOptions = {}\r\n): UseBinarioAgentReturn<TContext> {\r\n const [output, setOutput] = useState('');\r\n const [isRunning, setIsRunning] = useState(false);\r\n const [error, setError] = useState<Error | null>(null);\r\n const [steps, setSteps] = useState<Array<{ type: string; content: string }>>([]);\r\n const abortRef = useRef(false);\r\n\r\n const stop = useCallback(() => {\r\n abortRef.current = true;\r\n setIsRunning(false);\r\n }, []);\r\n\r\n const run = useCallback(\r\n async (input: string, context?: TContext) => {\r\n setIsRunning(true);\r\n setError(null);\r\n setOutput('');\r\n setSteps([]);\r\n abortRef.current = false;\r\n\r\n try {\r\n const agentWithContext = context ? agent.withContext(context) : agent;\r\n const result = await agentWithContext.run(input, { \r\n maxSteps: options.maxSteps,\r\n onStep: (step) => {\r\n if (abortRef.current) return;\r\n setSteps(prev => [...prev, step]);\r\n options.onStep?.(step);\r\n },\r\n });\r\n setOutput(result.output);\r\n return result.output;\r\n } catch (err) {\r\n const error = err as Error;\r\n setError(error);\r\n options.onError?.(error);\r\n return null;\r\n } finally {\r\n setIsRunning(false);\r\n }\r\n },\r\n [agent, options]\r\n );\r\n\r\n const runStructured = useCallback(\r\n async <T,>(input: string, schema: z.ZodType<T>, context?: TContext) => {\r\n setIsRunning(true);\r\n setError(null);\r\n setOutput('');\r\n setSteps([]);\r\n abortRef.current = false;\r\n\r\n try {\r\n const agentWithContext = context ? agent.withContext(context) : agent;\r\n const result = await agentWithContext.runStructured(input, schema, {\r\n maxSteps: options.maxSteps,\r\n });\r\n setOutput(JSON.stringify(result.output, null, 2));\r\n return result.output;\r\n } catch (err) {\r\n const error = err as Error;\r\n setError(error);\r\n options.onError?.(error);\r\n return null;\r\n } finally {\r\n setIsRunning(false);\r\n }\r\n },\r\n [agent, options]\r\n );\r\n\r\n return {\r\n output,\r\n isRunning,\r\n error,\r\n steps,\r\n run,\r\n runStructured,\r\n stop,\r\n };\r\n}\r\n\r\n// ============= Structured Output Hook =============\r\n\r\nexport interface UseBinarioStructuredOptions<T> extends ChatOptions {\r\n schema: z.ZodType<T>;\r\n onFinish?: (data: T) => void;\r\n onError?: (error: Error) => void;\r\n}\r\n\r\nexport interface UseBinarioStructuredReturn<T> {\r\n data: T | null;\r\n isLoading: boolean;\r\n error: Error | null;\r\n generate: (prompt: string, systemPrompt?: string) => Promise<T | null>;\r\n}\r\n\r\nexport function useBinarioStructured<T>(\r\n binario: BinarioAI,\r\n options: UseBinarioStructuredOptions<T>\r\n): UseBinarioStructuredReturn<T> {\r\n const [data, setData] = useState<T | null>(null);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [error, setError] = useState<Error | null>(null);\r\n\r\n const generate = useCallback(\r\n async (prompt: string, systemPrompt?: string) => {\r\n setIsLoading(true);\r\n setError(null);\r\n setData(null);\r\n\r\n const messages: Message[] = [];\r\n if (systemPrompt) {\r\n messages.push({ role: 'system', content: systemPrompt });\r\n }\r\n messages.push({ role: 'user', content: prompt });\r\n\r\n try {\r\n const response = await binario.chat(messages, {\r\n ...options,\r\n outputSchema: options.schema,\r\n });\r\n \r\n const parsedData = response.data as T;\r\n setData(parsedData);\r\n options.onFinish?.(parsedData);\r\n return parsedData;\r\n } catch (err) {\r\n const error = err as Error;\r\n setError(error);\r\n options.onError?.(error);\r\n return null;\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n },\r\n [binario, options]\r\n );\r\n\r\n return {\r\n data,\r\n isLoading,\r\n error,\r\n generate,\r\n };\r\n}\r\n\r\n// ============= Tools Hook =============\r\n\r\nimport { zodToJsonSchema } from './schema';\r\n\r\nexport interface HookTool {\r\n name: string;\r\n description: string;\r\n parameters: z.ZodType<unknown>;\r\n execute: (args: unknown) => Promise<unknown> | unknown;\r\n}\r\n\r\nexport interface UseBinarioToolsOptions {\r\n tools: HookTool[];\r\n provider?: string;\r\n model?: string;\r\n onToolCall?: (name: string, args: unknown) => void;\r\n onToolResult?: (name: string, result: unknown) => void;\r\n onError?: (error: Error) => void;\r\n}\r\n\r\nexport interface UseBinarioToolsReturn {\r\n messages: Message[];\r\n isProcessing: boolean;\r\n error: Error | null;\r\n send: (content: string) => Promise<void>;\r\n setMessages: (messages: Message[]) => void;\r\n}\r\n\r\nexport function useBinarioTools(\r\n binario: BinarioAI,\r\n options: UseBinarioToolsOptions\r\n): UseBinarioToolsReturn {\r\n const [messages, setMessages] = useState<Message[]>([]);\r\n const [isProcessing, setIsProcessing] = useState(false);\r\n const [error, setError] = useState<Error | null>(null);\r\n\r\n const send = useCallback(\r\n async (content: string) => {\r\n setIsProcessing(true);\r\n setError(null);\r\n\r\n const userMessage: Message = { role: 'user', content };\r\n const newMessages = [...messages, userMessage];\r\n setMessages(newMessages);\r\n\r\n try {\r\n // Convert tools to API format using zodToJsonSchema\r\n const apiTools = options.tools.map(tool => ({\r\n type: 'function' as const,\r\n function: {\r\n name: tool.name,\r\n description: tool.description,\r\n parameters: zodToJsonSchema(tool.parameters) as Record<string, unknown>,\r\n },\r\n }));\r\n\r\n let currentMessages = newMessages;\r\n let continueLoop = true;\r\n\r\n while (continueLoop) {\r\n const response = await binario.chat(currentMessages, {\r\n provider: options.provider as import('./types').Provider,\r\n model: options.model,\r\n tools: apiTools,\r\n });\r\n\r\n if (response.toolCalls && response.toolCalls.length > 0) {\r\n // Execute tools\r\n const toolResults: Message[] = [];\r\n \r\n for (const toolCall of response.toolCalls) {\r\n const tool = options.tools.find(t => t.name === toolCall.function.name);\r\n if (tool) {\r\n const args = JSON.parse(toolCall.function.arguments);\r\n options.onToolCall?.(toolCall.function.name, args);\r\n \r\n const result = await tool.execute(args);\r\n options.onToolResult?.(toolCall.function.name, result);\r\n \r\n toolResults.push({\r\n role: 'tool',\r\n content: JSON.stringify(result),\r\n tool_call_id: toolCall.id,\r\n });\r\n }\r\n }\r\n\r\n // Add assistant message with tool calls\r\n currentMessages = [\r\n ...currentMessages,\r\n { role: 'assistant', content: response.content, tool_calls: response.toolCalls },\r\n ...toolResults,\r\n ];\r\n } else {\r\n // No more tool calls, add final response\r\n const assistantMessage: Message = {\r\n role: 'assistant',\r\n content: response.content,\r\n };\r\n currentMessages = [...currentMessages, assistantMessage];\r\n continueLoop = false;\r\n }\r\n }\r\n\r\n setMessages(currentMessages);\r\n } catch (err) {\r\n const error = err as Error;\r\n setError(error);\r\n options.onError?.(error);\r\n } finally {\r\n setIsProcessing(false);\r\n }\r\n },\r\n [messages, binario, options]\r\n );\r\n\r\n return {\r\n messages,\r\n isProcessing,\r\n error,\r\n send,\r\n setMessages,\r\n };\r\n}\r\n\r\n// ============= Memory Hooks =============\r\n\r\nimport type { Memory, MemoryStore, ConversationContext } from './memory/types';\r\nimport { BufferMemory } from './memory/buffer';\r\nimport { SummaryMemory, type SummarizerFn } from './memory/summary';\r\nimport { SummaryBufferMemory } from './memory/summary-buffer';\r\nimport { VectorMemory } from './memory/vector';\r\nimport { InMemoryStore } from './memory/stores/in-memory';\r\nimport { LocalStorageStore } from './memory/stores/local-storage';\r\nimport type { EmbeddingsProvider } from './embeddings/types';\r\n\r\nexport type MemoryType = 'buffer' | 'summary' | 'summary-buffer' | 'vector';\r\n\r\nexport interface UseBinarioMemoryOptions {\r\n /** Memory type to use */\r\n type?: MemoryType;\r\n /** Conversation ID (auto-generated if not provided) */\r\n conversationId?: string;\r\n /** Storage backend: 'memory' | 'localStorage' | custom MemoryStore */\r\n store?: 'memory' | 'localStorage' | MemoryStore;\r\n /** LocalStorage prefix (only for localStorage store) */\r\n storagePrefix?: string;\r\n /** Max messages to keep (for buffer/summary-buffer) */\r\n maxMessages?: number;\r\n /** Max tokens to keep */\r\n maxTokens?: number;\r\n /** Buffer size for summary-buffer memory */\r\n bufferSize?: number;\r\n /** Summarizer function (required for summary/summary-buffer) */\r\n summarizer?: SummarizerFn;\r\n /** Embeddings provider (required for vector memory) */\r\n embeddings?: EmbeddingsProvider;\r\n /** Top K results for vector search */\r\n topK?: number;\r\n /** Min similarity score for vector search */\r\n minScore?: number;\r\n}\r\n\r\nexport interface UseBinarioMemoryReturn {\r\n /** The memory instance */\r\n memory: Memory;\r\n /** Current messages in memory */\r\n messages: Message[];\r\n /** Current context (messages + summary + token count) */\r\n context: ConversationContext | null;\r\n /** Whether memory is loading */\r\n isLoading: boolean;\r\n /** Add a message to memory */\r\n addMessage: (message: Message) => Promise<void>;\r\n /** Add multiple messages */\r\n addMessages: (messages: Message[]) => Promise<void>;\r\n /** Clear all messages */\r\n clear: () => Promise<void>;\r\n /** Refresh messages from memory */\r\n refresh: () => Promise<void>;\r\n /** Get context window with token limit */\r\n getContextWindow: (maxTokens: number) => Promise<ConversationContext>;\r\n /** Current conversation ID */\r\n conversationId: string;\r\n /** Switch to a different conversation */\r\n switchConversation: (id: string) => void;\r\n}\r\n\r\nexport function useBinarioMemory(\r\n options: UseBinarioMemoryOptions = {}\r\n): UseBinarioMemoryReturn {\r\n const {\r\n type = 'buffer',\r\n conversationId: initialConversationId,\r\n store: storeOption = 'memory',\r\n storagePrefix = '',\r\n maxMessages = 50,\r\n maxTokens = 4000,\r\n bufferSize = 10,\r\n summarizer,\r\n embeddings,\r\n topK = 5,\r\n minScore = 0.5,\r\n } = options;\r\n\r\n // Create store\r\n const store = useRef<MemoryStore>(\r\n typeof storeOption === 'string'\r\n ? storeOption === 'localStorage'\r\n ? new LocalStorageStore(storagePrefix)\r\n : new InMemoryStore()\r\n : storeOption\r\n );\r\n\r\n // Create memory instance\r\n const memory = useRef<Memory | null>(null);\r\n const [memoryState, setMemoryState] = useState<Memory | null>(null);\r\n const [conversationId, setConversationId] = useState(\r\n initialConversationId || `conv-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`\r\n );\r\n const [messages, setMessages] = useState<Message[]>([]);\r\n const [context, setContext] = useState<ConversationContext | null>(null);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const isInitialLoad = useRef(true);\r\n\r\n // Create memory instance synchronously based on type\r\n const createMemory = useCallback(() => {\r\n const memoryOptions = {\r\n store: store.current,\r\n conversationId,\r\n maxMessages,\r\n maxTokens,\r\n };\r\n\r\n let mem: Memory;\r\n switch (type) {\r\n case 'summary': {\r\n const summaryMem = new SummaryMemory({ ...memoryOptions, summarizer });\r\n if (summarizer) summaryMem.setSummarizer(summarizer);\r\n mem = summaryMem;\r\n break;\r\n }\r\n case 'summary-buffer': {\r\n const sbMem = new SummaryBufferMemory({ ...memoryOptions, bufferSize, summarizer });\r\n if (summarizer) sbMem.setSummarizer(summarizer);\r\n mem = sbMem;\r\n break;\r\n }\r\n case 'vector':\r\n if (!embeddings) {\r\n throw new Error('VectorMemory requires an embeddings provider');\r\n }\r\n mem = new VectorMemory({ ...memoryOptions, embeddings, topK, minScore });\r\n break;\r\n default:\r\n mem = new BufferMemory(memoryOptions);\r\n }\r\n return mem;\r\n }, [type, conversationId, maxMessages, maxTokens, summarizer, bufferSize, embeddings, topK, minScore]);\r\n\r\n // Initialize memory synchronously on first render\r\n if (!memory.current) {\r\n memory.current = createMemory();\r\n setMemoryState(memory.current);\r\n }\r\n\r\n // Re-initialize memory when type/conversationId changes\r\n useEffect(() => {\r\n memory.current = createMemory();\r\n setMemoryState(memory.current);\r\n\r\n // Load initial messages\r\n loadMessages(isInitialLoad.current);\r\n isInitialLoad.current = false;\r\n }, [type, conversationId]);\r\n\r\n const loadMessages = useCallback(async (skipLoadingState = false) => {\r\n if (!memory.current) return;\r\n if (!skipLoadingState) {\r\n setIsLoading(true);\r\n }\r\n try {\r\n const msgs = await memory.current.getMessages();\r\n const ctx = await memory.current.getContext();\r\n setMessages(msgs);\r\n setContext(ctx);\r\n } catch (error) {\r\n console.error('Failed to load memory:', error);\r\n } finally {\r\n if (!skipLoadingState) {\r\n setIsLoading(false);\r\n }\r\n }\r\n }, []);\r\n\r\n const addMessage = useCallback(async (message: Message) => {\r\n if (!memory.current) return;\r\n await memory.current.add(message);\r\n await loadMessages();\r\n }, [loadMessages]);\r\n\r\n const addMessages = useCallback(async (msgs: Message[]) => {\r\n if (!memory.current) return;\r\n await memory.current.addMany(msgs);\r\n await loadMessages();\r\n }, [loadMessages]);\r\n\r\n const clear = useCallback(async () => {\r\n if (!memory.current) return;\r\n await memory.current.clear();\r\n setMessages([]);\r\n setContext(null);\r\n }, []);\r\n\r\n const refresh = useCallback(async () => {\r\n await loadMessages();\r\n }, [loadMessages]);\r\n\r\n const getContextWindow = useCallback(async (maxTkns: number) => {\r\n if (!memory.current) {\r\n return { messages: [], tokenCount: 0, messageCount: 0 };\r\n }\r\n return memory.current.getContextWindow(maxTkns);\r\n }, []);\r\n\r\n const switchConversation = useCallback((id: string) => {\r\n setConversationId(id);\r\n }, []);\r\n\r\n return {\r\n memory: memoryState!,\r\n messages,\r\n context,\r\n isLoading,\r\n addMessage,\r\n addMessages,\r\n clear,\r\n refresh,\r\n getContextWindow,\r\n conversationId,\r\n switchConversation,\r\n };\r\n}\r\n\r\n// ============= Chat with Memory Hook =============\r\n\r\nexport interface UseBinarioChatWithMemoryOptions extends UseBinarioChatOptions {\r\n /** Memory options */\r\n memory?: UseBinarioMemoryOptions;\r\n /** Auto-save messages to memory */\r\n autoSave?: boolean;\r\n /** Context window size in tokens */\r\n contextWindowSize?: number;\r\n}\r\n\r\nexport interface UseBinarioChatWithMemoryReturn extends UseBinarioChatReturn {\r\n /** Memory state and controls */\r\n memory: UseBinarioMemoryReturn;\r\n /** Load conversation from memory */\r\n loadConversation: (conversationId?: string) => Promise<void>;\r\n /** Save current conversation to memory */\r\n saveConversation: () => Promise<void>;\r\n}\r\n\r\nexport function useBinarioChatWithMemory(\r\n binario: BinarioAI,\r\n options: UseBinarioChatWithMemoryOptions = {}\r\n): UseBinarioChatWithMemoryReturn {\r\n const {\r\n memory: memoryOptions = {},\r\n autoSave = true,\r\n contextWindowSize = 4000,\r\n ...chatOptions\r\n } = options;\r\n\r\n // Initialize memory\r\n const memoryHook = useBinarioMemory(memoryOptions);\r\n\r\n // Initialize chat with memory messages\r\n const [messages, setMessages] = useState<Message[]>([]);\r\n const [input, setInput] = useState('');\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [error, setError] = useState<Error | null>(null);\r\n const [lastResponse, setLastResponse] = useState<ChatResponse | null>(null);\r\n const abortControllerRef = useRef<AbortController | null>(null);\r\n\r\n // Sync memory messages to chat on load\r\n useEffect(() => {\r\n if (memoryHook.messages.length > 0 && messages.length === 0) {\r\n setMessages(memoryHook.messages);\r\n }\r\n }, [memoryHook.messages]);\r\n\r\n const stop = useCallback(() => {\r\n abortControllerRef.current?.abort();\r\n abortControllerRef.current = null;\r\n setIsLoading(false);\r\n }, []);\r\n\r\n const append = useCallback(\r\n async (message: Message) => {\r\n setIsLoading(true);\r\n setError(null);\r\n abortControllerRef.current = new AbortController();\r\n\r\n const newMessages = [...messages, message];\r\n setMessages(newMessages);\r\n\r\n // Auto-save user message\r\n if (autoSave) {\r\n await memoryHook.addMessage(message);\r\n }\r\n\r\n try {\r\n // Get context-aware messages\r\n const contextWindow = await memoryHook.getContextWindow(contextWindowSize);\r\n const contextMessages = contextWindow.messages.length > 0 \r\n ? contextWindow.messages \r\n : newMessages;\r\n\r\n const response = await binario.chat(contextMessages, chatOptions);\r\n const assistantMessage: Message = {\r\n role: 'assistant',\r\n content: response.content,\r\n tool_calls: response.toolCalls,\r\n };\r\n \r\n const updatedMessages = [...newMessages, assistantMessage];\r\n setMessages(updatedMessages);\r\n setLastResponse(response);\r\n\r\n // Auto-save assistant message\r\n if (autoSave) {\r\n await memoryHook.addMessage(assistantMessage);\r\n }\r\n\r\n chatOptions.onFinish?.(response);\r\n } catch (err) {\r\n const error = err as Error;\r\n setError(error);\r\n chatOptions.onError?.(error);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n },\r\n [messages, binario, chatOptions, autoSave, memoryHook, contextWindowSize]\r\n );\r\n\r\n const reload = useCallback(async () => {\r\n if (messages.length === 0) return;\r\n\r\n const lastUserMessageIndex = messages.map((m) => m.role).lastIndexOf('user');\r\n if (lastUserMessageIndex === -1) return;\r\n\r\n const messagesToReload = messages.slice(0, lastUserMessageIndex + 1);\r\n setMessages(messagesToReload);\r\n\r\n setIsLoading(true);\r\n setError(null);\r\n\r\n try {\r\n const response = await binario.chat(messagesToReload, chatOptions);\r\n const assistantMessage: Message = {\r\n role: 'assistant',\r\n content: response.content,\r\n tool_calls: response.toolCalls,\r\n };\r\n setMessages([...messagesToReload, assistantMessage]);\r\n setLastResponse(response);\r\n chatOptions.onFinish?.(response);\r\n } catch (err) {\r\n const error = err as Error;\r\n setError(error);\r\n chatOptions.onError?.(error);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n }, [messages, binario, chatOptions]);\r\n\r\n const loadConversation = useCallback(async (conversationId?: string) => {\r\n if (conversationId) {\r\n memoryHook.switchConversation(conversationId);\r\n }\r\n await memoryHook.refresh();\r\n setMessages(memoryHook.messages);\r\n }, [memoryHook]);\r\n\r\n const saveConversation = useCallback(async () => {\r\n // Clear and re-add all messages\r\n await memoryHook.clear();\r\n await memoryHook.addMessages(messages);\r\n }, [memoryHook, messages]);\r\n\r\n useEffect(() => {\r\n return () => {\r\n abortControllerRef.current?.abort();\r\n };\r\n }, []);\r\n\r\n return {\r\n messages,\r\n input,\r\n setInput,\r\n isLoading,\r\n error,\r\n append,\r\n reload,\r\n stop,\r\n setMessages,\r\n lastResponse,\r\n memory: memoryHook,\r\n loadConversation,\r\n saveConversation,\r\n };\r\n}\r\n\r\n// ============= Embeddings Hook =============\r\n\r\nimport type { \r\n EmbeddingResult, \r\n BatchEmbeddingResult \r\n} from './embeddings/types';\r\nimport { CloudflareEmbeddings } from './embeddings/cloudflare';\r\nimport { cosineSimilarity } from './memory/utils';\r\n\r\nexport type EmbeddingsProviderType = 'cloudflare' | 'custom';\r\n\r\nexport interface UseBinarioEmbedOptions {\r\n /** Embeddings provider type */\r\n provider?: EmbeddingsProviderType;\r\n /** Custom embeddings provider instance */\r\n customProvider?: EmbeddingsProvider;\r\n /** Model to use (provider-specific) */\r\n model?: string;\r\n /** Cloudflare account ID (for REST API) */\r\n accountId?: string;\r\n /** Cloudflare API key (for REST API) */\r\n apiKey?: string;\r\n /** Cache embeddings in memory */\r\n cache?: boolean;\r\n /** Callback when embedding starts */\r\n onStart?: () => void;\r\n /** Callback when embedding completes */\r\n onComplete?: (result: EmbeddingResult | BatchEmbeddingResult) => void;\r\n /** Callback on error */\r\n onError?: (error: Error) => void;\r\n}\r\n\r\nexport interface UseBinarioEmbedReturn {\r\n /** Generate embedding for a single text */\r\n embed: (text: string) => Promise<EmbeddingResult | null>;\r\n /** Generate embeddings for multiple texts */\r\n embedMany: (texts: string[]) => Promise<BatchEmbeddingResult | null>;\r\n /** Calculate similarity between two texts */\r\n similarity: (text1: string, text2: string) => Promise<number | null>;\r\n /** Find most similar texts from a list */\r\n findSimilar: (query: string, candidates: string[], topK?: number) => Promise<Array<{ text: string; score: number }> | null>;\r\n /** Current embedding result */\r\n result: EmbeddingResult | null;\r\n /** Batch embedding results */\r\n batchResult: BatchEmbeddingResult | null;\r\n /** Whether embedding is in progress */\r\n isLoading: boolean;\r\n /** Error if any */\r\n error: Error | null;\r\n /** Clear cached embeddings */\r\n clearCache: () => void;\r\n /** Get embedding from cache */\r\n getCached: (text: string) => number[] | null;\r\n}\r\n\r\nexport function useBinarioEmbed(\r\n options: UseBinarioEmbedOptions = {}\r\n): UseBinarioEmbedReturn {\r\n const {\r\n provider: providerType = 'cloudflare',\r\n customProvider,\r\n model,\r\n accountId,\r\n apiKey,\r\n cache = true,\r\n onStart,\r\n onComplete,\r\n onError,\r\n } = options;\r\n\r\n // State\r\n const [result, setResult] = useState<EmbeddingResult | null>(null);\r\n const [batchResult, setBatchResult] = useState<BatchEmbeddingResult | null>(null);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [error, setError] = useState<Error | null>(null);\r\n \r\n // Embedding cache\r\n const cacheRef = useRef<Map<string, number[]>>(new Map());\r\n\r\n // Provider instance\r\n const providerRef = useRef<EmbeddingsProvider | null>(null);\r\n\r\n // Initialize provider\r\n useEffect(() => {\r\n if (customProvider) {\r\n providerRef.current = customProvider;\r\n } else if (providerType === 'cloudflare') {\r\n providerRef.current = new CloudflareEmbeddings({\r\n model,\r\n accountId,\r\n apiKey,\r\n });\r\n }\r\n }, [providerType, customProvider, model, accountId, apiKey]);\r\n\r\n const embed = useCallback(async (text: string): Promise<EmbeddingResult | null> => {\r\n if (!providerRef.current) {\r\n const err = new Error('Embeddings provider not initialized');\r\n setError(err);\r\n onError?.(err);\r\n return null;\r\n }\r\n\r\n // Check cache\r\n if (cache && cacheRef.current.has(text)) {\r\n const cached: EmbeddingResult = {\r\n text,\r\n embedding: cacheRef.current.get(text)!,\r\n };\r\n setResult(cached);\r\n return cached;\r\n }\r\n\r\n setIsLoading(true);\r\n setError(null);\r\n onStart?.();\r\n\r\n try {\r\n const embeddingResult = await providerRef.current.embed(text);\r\n \r\n // Cache result\r\n if (cache) {\r\n cacheRef.current.set(text, embeddingResult.embedding);\r\n }\r\n \r\n setResult(embeddingResult);\r\n onComplete?.(embeddingResult);\r\n return embeddingResult;\r\n } catch (err) {\r\n const error = err as Error;\r\n setError(error);\r\n onError?.(error);\r\n return null;\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n }, [cache, onStart, onComplete, onError]);\r\n\r\n const embedMany = useCallback(async (texts: string[]): Promise<BatchEmbeddingResult | null> => {\r\n if (!providerRef.current) {\r\n const err = new Error('Embeddings provider not initialized');\r\n setError(err);\r\n onError?.(err);\r\n return null;\r\n }\r\n\r\n if (texts.length === 0) {\r\n return { embeddings: [], model: '', usage: { promptTokens: 0, totalTokens: 0 } };\r\n }\r\n\r\n // Check cache for all texts\r\n const uncached: string[] = [];\r\n const cachedResults: Map<string, number[]> = new Map();\r\n \r\n if (cache) {\r\n for (const text of texts) {\r\n if (cacheRef.current.has(text)) {\r\n cachedResults.set(text, cacheRef.current.get(text)!);\r\n } else {\r\n uncached.push(text);\r\n }\r\n }\r\n } else {\r\n uncached.push(...texts);\r\n }\r\n\r\n setIsLoading(true);\r\n setError(null);\r\n onStart?.();\r\n\r\n try {\r\n let newEmbeddings: BatchEmbeddingResult = { \r\n embeddings: [], \r\n model: '', \r\n usage: { promptTokens: 0, totalTokens: 0 } \r\n };\r\n \r\n // Only call API for uncached texts\r\n if (uncached.length > 0) {\r\n newEmbeddings = await providerRef.current.embedMany(uncached);\r\n \r\n // Cache new results\r\n if (cache) {\r\n for (const emb of newEmbeddings.embeddings) {\r\n cacheRef.current.set(emb.text, emb.embedding);\r\n }\r\n }\r\n }\r\n\r\n // Combine cached and new results in original order\r\n const allEmbeddings: EmbeddingResult[] = texts.map(text => {\r\n if (cachedResults.has(text)) {\r\n return { text, embedding: cachedResults.get(text)! };\r\n }\r\n const found = newEmbeddings.embeddings.find(e => e.text === text);\r\n return found || { text, embedding: [] };\r\n });\r\n\r\n const batchResult: BatchEmbeddingResult = {\r\n embeddings: allEmbeddings,\r\n model: newEmbeddings.model,\r\n usage: newEmbeddings.usage,\r\n };\r\n \r\n setBatchResult(batchResult);\r\n onComplete?.(batchResult);\r\n return batchResult;\r\n } catch (err) {\r\n const error = err as Error;\r\n setError(error);\r\n onError?.(error);\r\n return null;\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n }, [cache, onStart, onComplete, onError]);\r\n\r\n const similarity = useCallback(async (text1: string, text2: string): Promise<number | null> => {\r\n const results = await embedMany([text1, text2]);\r\n if (!results || results.embeddings.length < 2) {\r\n return null;\r\n }\r\n \r\n const [emb1, emb2] = results.embeddings;\r\n return cosineSimilarity(emb1.embedding, emb2.embedding);\r\n }, [embedMany]);\r\n\r\n const findSimilar = useCallback(async (\r\n query: string, \r\n candidates: string[], \r\n topK: number = 5\r\n ): Promise<Array<{ text: string; score: number }> | null> => {\r\n if (candidates.length === 0) return [];\r\n \r\n // Embed query and all candidates\r\n const allTexts = [query, ...candidates];\r\n const results = await embedMany(allTexts);\r\n \r\n if (!results || results.embeddings.length === 0) {\r\n return null;\r\n }\r\n\r\n const queryEmbedding = results.embeddings[0].embedding;\r\n const candidateEmbeddings = results.embeddings.slice(1);\r\n\r\n // Calculate similarities\r\n const similarities = candidateEmbeddings.map((emb, i) => ({\r\n text: candidates[i],\r\n score: cosineSimilarity(queryEmbedding, emb.embedding),\r\n }));\r\n\r\n // Sort by score and take top K\r\n return similarities\r\n .sort((a, b) => b.score - a.score)\r\n .slice(0, topK);\r\n }, [embedMany]);\r\n\r\n const clearCache = useCallback(() => {\r\n cacheRef.current.clear();\r\n }, []);\r\n\r\n const getCached = useCallback((text: string): number[] | null => {\r\n return cacheRef.current.get(text) ?? null;\r\n }, []);\r\n\r\n return {\r\n embed,\r\n embedMany,\r\n similarity,\r\n findSimilar,\r\n result,\r\n batchResult,\r\n isLoading,\r\n error,\r\n clearCache,\r\n getCached,\r\n };\r\n}\r\n\r\n// ============= Semantic Search Hook =============\r\n\r\nexport interface UseBinarioSemanticSearchOptions extends UseBinarioEmbedOptions {\r\n /** Minimum similarity score to include in results */\r\n minScore?: number;\r\n /** Maximum number of results to return */\r\n maxResults?: number;\r\n}\r\n\r\nexport interface SearchDocument {\r\n id: string;\r\n text: string;\r\n metadata?: Record<string, unknown>;\r\n}\r\n\r\nexport interface SearchResult {\r\n document: SearchDocument;\r\n score: number;\r\n}\r\n\r\nexport interface UseBinarioSemanticSearchReturn {\r\n /** Add documents to the search index */\r\n addDocuments: (documents: SearchDocument[]) => Promise<void>;\r\n /** Search for similar documents */\r\n search: (query: string) => Promise<SearchResult[]>;\r\n /** Remove documents by ID */\r\n removeDocuments: (ids: string[]) => void;\r\n /** Clear all documents */\r\n clear: () => void;\r\n /** Number of indexed documents */\r\n documentCount: number;\r\n /** Whether indexing is in progress */\r\n isIndexing: boolean;\r\n /** Whether search is in progress */\r\n isSearching: boolean;\r\n /** Error if any */\r\n error: Error | null;\r\n}\r\n\r\nexport function useBinarioSemanticSearch(\r\n options: UseBinarioSemanticSearchOptions = {}\r\n): UseBinarioSemanticSearchReturn {\r\n const { minScore = 0.5, maxResults = 10, ...embedOptions } = options;\r\n \r\n const { embedMany, clearCache, error: embedError } = useBinarioEmbed(embedOptions);\r\n \r\n // Document index with embeddings\r\n const indexRef = useRef<Map<string, { document: SearchDocument; embedding: number[] }>>(new Map());\r\n \r\n const [documentCount, setDocumentCount] = useState(0);\r\n const [isIndexing, setIsIndexing] = useState(false);\r\n const [isSearching, setIsSearching] = useState(false);\r\n const [error, setError] = useState<Error | null>(null);\r\n\r\n const addDocuments = useCallback(async (documents: SearchDocument[]) => {\r\n if (documents.length === 0) return;\r\n \r\n setIsIndexing(true);\r\n setError(null);\r\n\r\n try {\r\n const texts = documents.map(d => d.text);\r\n let embeddings;\r\n try {\r\n embeddings = await embedMany(texts);\r\n } catch (err) {\r\n setError(err as Error);\r\n setIsIndexing(false);\r\n return;\r\n }\r\n \r\n if (!embeddings) {\r\n setError(embedError || new Error('Failed to generate embeddings'));\r\n setIsIndexing(false);\r\n return;\r\n }\r\n\r\n for (let i = 0; i < documents.length; i++) {\r\n indexRef.current.set(documents[i].id, {\r\n document: documents[i],\r\n embedding: embeddings.embeddings[i].embedding,\r\n });\r\n }\r\n\r\n setDocumentCount(indexRef.current.size);\r\n } catch (err) {\r\n setError(err as Error);\r\n } finally {\r\n setIsIndexing(false);\r\n }\r\n }, [embedMany]);\r\n\r\n const search = useCallback(async (query: string): Promise<SearchResult[]> => {\r\n if (indexRef.current.size === 0) return [];\r\n \r\n setIsSearching(true);\r\n setError(null);\r\n\r\n try {\r\n const queryEmbeddings = await embedMany([query]);\r\n \r\n if (!queryEmbeddings || queryEmbeddings.embeddings.length === 0) {\r\n throw new Error('Failed to generate query embedding');\r\n }\r\n\r\n const queryEmbedding = queryEmbeddings.embeddings[0].embedding;\r\n\r\n const results: SearchResult[] = [];\r\n \r\n for (const { document, embedding } of indexRef.current.values()) {\r\n const score = cosineSimilarity(queryEmbedding, embedding);\r\n \r\n if (score >= minScore) {\r\n results.push({ document, score });\r\n }\r\n }\r\n\r\n return results\r\n .sort((a, b) => b.score - a.score)\r\n .slice(0, maxResults);\r\n } catch (err) {\r\n setError(err as Error);\r\n return [];\r\n } finally {\r\n setIsSearching(false);\r\n }\r\n }, [embedMany, minScore, maxResults]);\r\n\r\n const removeDocuments = useCallback((ids: string[]) => {\r\n for (const id of ids) {\r\n indexRef.current.delete(id);\r\n }\r\n setDocumentCount(indexRef.current.size);\r\n }, []);\r\n\r\n const clear = useCallback(() => {\r\n indexRef.current.clear();\r\n clearCache();\r\n setDocumentCount(0);\r\n }, [clearCache]);\r\n\r\n return {\r\n addDocuments,\r\n search,\r\n removeDocuments,\r\n clear,\r\n documentCount,\r\n isIndexing,\r\n isSearching,\r\n error,\r\n };\r\n}\r\n\r\n// Legacy aliases for backwards compatibility\r\nexport { useBinarioChat as useNexusChat };\r\nexport { useBinarioStream as useNexusStream };\r\nexport { useBinarioCompletion as useNexusCompletion };\r\n"]}