@cloudbase/agent-adapter-llm 1.0.1-alpha.30

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/agent.ts","../src/converters/openai.ts","../src/converters/anthropic.ts","../src/processors/openai-stream.ts","../src/processors/anthropic-stream.ts"],"sourcesContent":["/**\n * LLMAgent - Direct LLM integration with AGUI protocol\n * Supports OpenAI and Anthropic models with streaming message conversion\n */\n\nimport {\n AbstractAgent,\n RunAgentInput,\n BaseEvent,\n EventType,\n Tool,\n Message,\n} from \"@ag-ui/client\";\nimport { Observable } from \"rxjs\";\n\n// Use type-only imports to avoid runtime dependency conflicts\n// This allows users to provide their own OpenAI/Anthropic SDK instances\nimport type OpenAI from \"openai\";\nimport type Anthropic from \"@anthropic-ai/sdk\";\n\n// Import converters\nimport {\n convertMessagesToOpenAI,\n convertToolsToOpenAI,\n createOpenAIStreamOptions,\n} from \"./converters/openai\";\nimport {\n convertMessagesToAnthropic,\n convertToolsToAnthropic,\n createAnthropicStreamOptions,\n} from \"./converters/anthropic\";\n\n// Import stream processors\nimport { processOpenAIStream } from \"./processors/openai-stream\";\nimport { processAnthropicStream } from \"./processors/anthropic-stream\";\nimport { randomUUID } from \"crypto\";\n\n// Model provider type - uses type-only imports to avoid version conflicts\nexport type ModelProvider = OpenAI | Anthropic;\n\n// Model provider type detection using duck typing\ntype ModelProviderType = \"openai\" | \"anthropic\";\n\n/**\n * Detect model provider type using duck typing\n * This avoids instanceof checks which require runtime imports\n */\nfunction detectModelProviderType(model: ModelProvider): ModelProviderType {\n // OpenAI SDK has chat.completions.create\n if (\n \"chat\" in model &&\n typeof (model as any).chat?.completions?.create === \"function\"\n ) {\n return \"openai\";\n }\n // Anthropic SDK has messages.create\n if (\n \"messages\" in model &&\n typeof (model as any).messages?.create === \"function\"\n ) {\n return \"anthropic\";\n }\n throw new Error(\n \"Unsupported model provider. Expected OpenAI or Anthropic SDK instance.\"\n );\n}\n\nexport interface LLMAgentConfig {\n agentId?: string;\n name?: string;\n description?: string;\n threadId?: string;\n model: ModelProvider;\n modelName: string;\n systemPrompt?: string;\n temperature?: number;\n maxTokens?: number;\n // Function calling options\n maxToolRounds?: number; // Maximum number of tool execution rounds (default: 5)\n onToolCall?: (toolCall: {\n id: string;\n name: string;\n arguments: string;\n }) => void;\n onToolResult?: (result: {\n toolCallId: string;\n result: any;\n error?: string;\n }) => void;\n}\n\n/**\n * LLMAgent - Direct model integration with AGUI protocol\n *\n * Example:\n * ```typescript\n * import OpenAI from 'openai';\n * import { LLMAgent } from '@cloudbase/agent-adapter-llm';\n *\n * const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });\n * const agent = new LLMAgent({\n * agentId: 'my-agent',\n * model: openai,\n * modelName: 'gpt-4o-mini',\n * systemPrompt: 'You are a helpful assistant.'\n * });\n * ```\n */\nexport class LLMAgent extends AbstractAgent {\n private model: ModelProvider;\n private modelType: ModelProviderType;\n private modelName: string;\n private systemPrompt?: string;\n private temperature?: number;\n private maxTokens?: number;\n private maxToolRounds: number;\n private onToolCall?: (toolCall: {\n id: string;\n name: string;\n arguments: string;\n }) => void;\n private onToolResult?: (result: {\n toolCallId: string;\n result: any;\n error?: string;\n }) => void;\n name: string;\n\n constructor(config: LLMAgentConfig) {\n super({\n agentId: config.agentId || config.name || \"llm-agent\",\n description: config.description || \"\",\n threadId: config.threadId || \"\",\n ...config,\n });\n\n this.model = config.model;\n this.modelType = detectModelProviderType(config.model);\n this.modelName = config.modelName;\n this.systemPrompt = config.systemPrompt;\n this.temperature = config.temperature;\n this.maxTokens = config.maxTokens;\n this.maxToolRounds = config.maxToolRounds || 5;\n this.onToolCall = config.onToolCall;\n this.onToolResult = config.onToolResult;\n this.name = config.name || config.agentId || \"llm-agent\";\n }\n\n run(input: RunAgentInput): Observable<BaseEvent> {\n return new Observable<BaseEvent>((subscriber) => {\n this._run(subscriber, input).catch((error) => {\n subscriber.next({\n type: EventType.RUN_ERROR,\n message: error instanceof Error ? error.message : String(error),\n code: error instanceof Error ? error.name : \"UNKNOWN_ERROR\",\n } as any);\n subscriber.error(error);\n });\n });\n }\n\n private async _run(subscriber: any, input: RunAgentInput): Promise<void> {\n const { runId, threadId, tools } = input;\n\n try {\n // Emit RUN_STARTED event\n subscriber.next({\n type: EventType.RUN_STARTED,\n threadId,\n runId,\n });\n\n // If no tools, run once\n if (!tools || tools.length === 0) {\n await this.runOnce(subscriber, input);\n subscriber.next({\n type: EventType.RUN_FINISHED,\n threadId,\n runId,\n });\n subscriber.complete();\n return;\n }\n\n // Auto-execute tools loop\n let messages = [...input.messages];\n let round = 0;\n\n while (round < this.maxToolRounds) {\n round++;\n\n // Collect events and tool calls from this round\n const events: BaseEvent[] = [];\n const toolCallsMap = new Map<string, { name: string; args: string }>();\n\n // Run model once\n await this.runOnce(subscriber, { ...input, messages }, (event) => {\n events.push(event);\n\n // Track tool calls\n if (event.type === EventType.TOOL_CALL_START) {\n toolCallsMap.set((event as any).toolCallId, {\n name: (event as any).toolCallName,\n args: \"\",\n });\n } else if (event.type === EventType.TOOL_CALL_ARGS) {\n const existing = toolCallsMap.get((event as any).toolCallId);\n if (existing) {\n existing.args += (event as any).delta;\n }\n }\n });\n\n // If no tool calls, we're done\n if (toolCallsMap.size === 0) {\n subscriber.next({\n type: EventType.RUN_FINISHED,\n threadId,\n runId,\n });\n subscriber.complete();\n return;\n }\n\n // Execute tools\n const toolCalls = Array.from(toolCallsMap.entries()).map(\n ([id, data]) => ({\n id,\n name: data.name,\n arguments: data.args,\n })\n );\n\n // Add assistant message with tool calls\n const assistantMessage: Message = {\n id: `msg_${Date.now()}`,\n role: \"assistant\",\n content: this.extractTextFromEvents(events),\n toolCalls: toolCalls.map((tc) => ({\n id: tc.id,\n type: \"function\" as const,\n function: {\n name: tc.name,\n arguments: tc.arguments,\n },\n })) as any,\n };\n messages.push(assistantMessage);\n\n // Execute tools and add results\n const toolResults = await this.executeTools(toolCalls, tools);\n const toolMessages = this.toolResultsToMessages(toolResults);\n messages.push(...toolMessages);\n }\n\n // Max rounds reached\n subscriber.next({\n type: EventType.RUN_ERROR,\n message: `Maximum tool execution rounds (${this.maxToolRounds}) reached`,\n code: \"MAX_TOOL_ROUNDS_EXCEEDED\",\n } as any);\n subscriber.complete();\n } catch (error) {\n throw error;\n }\n }\n\n private async runOpenAI(\n subscriber: any,\n input: RunAgentInput\n ): Promise<void> {\n const { messages, runId, threadId, tools, state, forwardedProps } = input;\n const openai = this.model as OpenAI;\n\n // Convert AGUI messages to OpenAI format\n const openaiMessages = convertMessagesToOpenAI(messages, this.systemPrompt);\n\n // Convert tools to OpenAI format\n const openaiTools = convertToolsToOpenAI(tools);\n\n // Create streaming completion\n const streamOptions = createOpenAIStreamOptions({\n modelName: this.modelName,\n messages: openaiMessages,\n tools: openaiTools,\n temperature: this.temperature,\n maxTokens: this.maxTokens,\n user:\n state?.__request_context__?.user?.id ||\n forwardedProps?.user ||\n randomUUID(),\n });\n\n const stream = await openai.chat.completions.create(streamOptions);\n\n // Process stream and emit AGUI events\n const messageId = `msg_${Date.now()}`;\n const context = { threadId, runId, messageId };\n\n for await (const event of processOpenAIStream(stream, context)) {\n subscriber.next(event);\n }\n }\n\n private async runAnthropic(\n subscriber: any,\n input: RunAgentInput\n ): Promise<void> {\n const { messages, runId, threadId, tools } = input;\n const anthropic = this.model as Anthropic;\n\n // Convert AGUI messages to Anthropic format\n const anthropicMessages = convertMessagesToAnthropic(messages);\n\n // Convert tools to Anthropic format\n const anthropicTools = convertToolsToAnthropic(tools);\n\n // Create streaming completion\n const streamOptions = createAnthropicStreamOptions({\n modelName: this.modelName,\n messages: anthropicMessages,\n tools: anthropicTools,\n systemPrompt: this.systemPrompt,\n temperature: this.temperature,\n maxTokens: this.maxTokens,\n });\n\n const stream = await anthropic.messages.create(streamOptions);\n\n // Process stream and emit AGUI events\n const messageId = `msg_${Date.now()}`;\n const context = { threadId, runId, messageId };\n\n for await (const event of processAnthropicStream(stream, context)) {\n subscriber.next(event);\n }\n }\n\n /**\n * Run model once (single round, no tool execution)\n */\n private async runOnce(\n subscriber: any,\n input: RunAgentInput,\n eventCallback?: (event: BaseEvent) => void\n ): Promise<void> {\n // Wrap subscriber to intercept events\n const wrappedSubscriber = eventCallback\n ? {\n next: (event: BaseEvent) => {\n subscriber.next(event);\n eventCallback(event);\n },\n }\n : subscriber;\n\n // Use pre-detected model type (duck typing) instead of instanceof\n if (this.modelType === \"openai\") {\n await this.runOpenAI(wrappedSubscriber, input);\n } else if (this.modelType === \"anthropic\") {\n await this.runAnthropic(wrappedSubscriber, input);\n } else {\n throw new Error(\"Unsupported model provider\");\n }\n }\n\n /**\n * Execute tools\n */\n private async executeTools(\n toolCalls: Array<{ id: string; name: string; arguments: string }>,\n tools: Tool[]\n ): Promise<Array<{ toolCallId: string; result: any; error?: string }>> {\n const toolsMap = new Map(tools.map((t) => [t.name, t]));\n\n return Promise.all(\n toolCalls.map(async (toolCall) => {\n // Notify tool call\n if (this.onToolCall) {\n this.onToolCall(toolCall);\n }\n\n try {\n const tool = toolsMap.get(toolCall.name);\n if (!tool) {\n throw new Error(`Tool not found: ${toolCall.name}`);\n }\n\n // Parse arguments\n const args = JSON.parse(toolCall.arguments);\n\n // Execute tool\n const result = await this.executeToolFunction(tool, args);\n\n const toolResult = {\n toolCallId: toolCall.id,\n result,\n };\n\n // Notify tool result\n if (this.onToolResult) {\n this.onToolResult(toolResult);\n }\n\n return toolResult;\n } catch (error) {\n const toolResult = {\n toolCallId: toolCall.id,\n result: null,\n error: error instanceof Error ? error.message : String(error),\n };\n\n // Notify tool result\n if (this.onToolResult) {\n this.onToolResult(toolResult);\n }\n\n return toolResult;\n }\n })\n );\n }\n\n /**\n * Execute tool function\n */\n private async executeToolFunction(tool: Tool, args: any): Promise<any> {\n if ((tool as any).execute) {\n return await (tool as any).execute(args);\n }\n throw new Error(`Tool ${tool.name} does not have an execute method`);\n }\n\n /**\n * Convert tool results to messages\n */\n private toolResultsToMessages(\n results: Array<{ toolCallId: string; result: any; error?: string }>\n ): Message[] {\n return results.map(\n (result) =>\n ({\n id: `tool_result_${result.toolCallId}`,\n role: \"tool\" as const,\n toolCallId: result.toolCallId,\n content: result.error\n ? `Error: ${result.error}`\n : JSON.stringify(result.result),\n }) as any\n );\n }\n\n /**\n * Extract text content from events\n */\n private extractTextFromEvents(events: BaseEvent[]): string {\n let text = \"\";\n for (const event of events) {\n if (event.type === EventType.TEXT_MESSAGE_CONTENT) {\n text += (event as any).delta;\n }\n }\n return text;\n }\n}\n","/**\n * OpenAI Converter - AGUI Protocol to OpenAI Format\n */\n\nimport OpenAI from \"openai\";\nimport { Message, Tool } from \"@ag-ui/client\";\n\n/**\n * Convert AGUI messages to OpenAI chat completion format\n */\nexport function convertMessagesToOpenAI(\n messages: Message[],\n systemPrompt?: string\n): OpenAI.Chat.ChatCompletionMessageParam[] {\n const openaiMessages: OpenAI.Chat.ChatCompletionMessageParam[] = [];\n\n // Add system prompt if provided\n if (systemPrompt) {\n openaiMessages.push({\n role: \"system\",\n content: systemPrompt,\n });\n }\n\n // Convert messages\n for (const msg of messages) {\n if (msg.role === \"user\") {\n openaiMessages.push({\n role: \"user\",\n content:\n typeof msg.content === \"string\"\n ? msg.content\n : JSON.stringify(msg.content),\n });\n } else if (msg.role === \"assistant\") {\n openaiMessages.push({\n role: \"assistant\",\n content:\n typeof msg.content === \"string\"\n ? msg.content\n : JSON.stringify(msg.content) || \"\",\n tool_calls: msg.toolCalls?.map((tc: any) => ({\n id: tc.id,\n type: \"function\" as const,\n function: {\n name: tc.function.name,\n arguments: tc.function.arguments,\n },\n })),\n });\n } else if (msg.role === \"tool\") {\n openaiMessages.push({\n role: \"tool\",\n tool_call_id: msg.toolCallId!,\n content:\n typeof msg.content === \"string\"\n ? msg.content\n : JSON.stringify(msg.content),\n });\n }\n }\n\n return openaiMessages;\n}\n\n/**\n * Convert AGUI tools to OpenAI function calling format\n */\nexport function convertToolsToOpenAI(\n tools?: Tool[]\n): OpenAI.Chat.ChatCompletionTool[] | undefined {\n if (!tools || tools.length === 0) {\n return undefined;\n }\n\n return tools.map((tool: any) => ({\n type: \"function\" as const,\n function: {\n name: tool.name,\n description: tool.description,\n parameters:\n typeof tool.parameters === \"string\"\n ? JSON.parse(tool.parameters)\n : tool.parameters,\n },\n }));\n}\n\n/**\n * Create OpenAI streaming request options\n */\nexport function createOpenAIStreamOptions(config: {\n modelName: string;\n messages: OpenAI.Chat.ChatCompletionMessageParam[];\n tools?: OpenAI.Chat.ChatCompletionTool[];\n temperature?: number;\n maxTokens?: number;\n user?: string;\n}): OpenAI.Chat.ChatCompletionCreateParamsStreaming {\n return {\n model: config.modelName,\n messages: config.messages,\n tools: config.tools,\n temperature: config.temperature,\n max_tokens: config.maxTokens,\n user: config.user,\n stream: true,\n };\n}\n","/**\n * Anthropic Converter - AGUI Protocol to Anthropic Format\n */\n\nimport Anthropic from '@anthropic-ai/sdk';\nimport { Message, Tool } from '@ag-ui/client';\n\n/**\n * Convert AGUI messages to Anthropic message format\n */\nexport function convertMessagesToAnthropic(\n messages: Message[]\n): Anthropic.MessageParam[] {\n const anthropicMessages: Anthropic.MessageParam[] = [];\n\n for (const msg of messages) {\n if (msg.role === 'user') {\n const contentStr = typeof msg.content === 'string' ? msg.content : JSON.stringify(msg.content);\n anthropicMessages.push({\n role: 'user',\n content: contentStr\n });\n } else if (msg.role === 'assistant') {\n const content: Anthropic.MessageParam['content'] = [];\n \n if (msg.content) {\n const contentStr = typeof msg.content === 'string' ? msg.content : JSON.stringify(msg.content);\n content.push({\n type: 'text',\n text: contentStr\n } as any);\n }\n\n if (msg.toolCalls) {\n for (const tc of msg.toolCalls) {\n content.push({\n type: 'tool_use',\n id: tc.id,\n name: tc.function.name,\n input: JSON.parse(tc.function.arguments)\n } as any);\n }\n }\n\n anthropicMessages.push({\n role: 'assistant',\n content\n });\n } else if (msg.role === 'tool') {\n const contentStr = typeof msg.content === 'string' ? msg.content : JSON.stringify(msg.content);\n anthropicMessages.push({\n role: 'user',\n content: [{\n type: 'tool_result',\n tool_use_id: msg.toolCallId!,\n content: contentStr\n } as any]\n });\n }\n }\n\n return anthropicMessages;\n}\n\n/**\n * Convert AGUI tools to Anthropic tools format\n */\nexport function convertToolsToAnthropic(\n tools?: Tool[]\n): Anthropic.Tool[] | undefined {\n if (!tools || tools.length === 0) {\n return undefined;\n }\n\n return tools.map((tool: any) => ({\n name: tool.name,\n description: tool.description,\n input_schema: typeof tool.parameters === 'string' \n ? JSON.parse(tool.parameters) \n : tool.parameters\n }));\n}\n\n/**\n * Create Anthropic streaming request options\n */\nexport function createAnthropicStreamOptions(config: {\n modelName: string;\n messages: Anthropic.MessageParam[];\n tools?: Anthropic.Tool[];\n systemPrompt?: string;\n temperature?: number;\n maxTokens?: number;\n}): Anthropic.MessageCreateParamsStreaming {\n return {\n model: config.modelName,\n max_tokens: config.maxTokens || 4096,\n temperature: config.temperature,\n system: config.systemPrompt || undefined,\n messages: config.messages,\n tools: config.tools,\n stream: true\n };\n}\n\n","/**\n * OpenAI Stream Processor - Convert OpenAI streaming responses to AGUI events\n */\n\nimport OpenAI from \"openai\";\nimport { EventType } from \"@ag-ui/client\";\n\nexport interface StreamContext {\n threadId: string;\n runId: string;\n messageId: string;\n}\n\nexport interface StreamState {\n hasStarted: boolean;\n fullContent: string;\n toolCallsMap: Map<string, { name: string; args: string }>;\n}\n\nexport type Delta =\n OpenAI.Chat.Completions.ChatCompletionChunk[\"choices\"][number][\"delta\"] & {\n reasoning_content?: string;\n };\n\n/**\n * Process OpenAI streaming chunk and emit AGUI events\n */\nexport async function* processOpenAIStream(\n stream: AsyncIterable<OpenAI.Chat.Completions.ChatCompletionChunk>,\n context: StreamContext\n) {\n const { threadId, runId, messageId } = context;\n const state: StreamState = {\n hasStarted: false,\n fullContent: \"\",\n toolCallsMap: new Map(),\n };\n const reasoningState: StreamState = {\n hasStarted: false,\n fullContent: \"\",\n toolCallsMap: new Map(),\n };\n\n for await (const chunk of stream) {\n const delta = chunk.choices[0]?.delta as Delta;\n if (!delta) continue;\n\n if (delta.role === \"tool\") {\n const toolCallId = (delta as any).tool_call_id;\n if (toolCallId) {\n if (state.toolCallsMap.has(toolCallId)) {\n yield {\n type: EventType.TOOL_CALL_END,\n threadId,\n runId,\n toolCallId,\n };\n state.toolCallsMap.delete(toolCallId);\n }\n yield {\n type: EventType.TOOL_CALL_RESULT,\n threadId,\n runId,\n toolCallId,\n content: delta.content || \"\",\n };\n }\n continue;\n }\n\n // Handle text content\n if (delta.content) {\n // End reasoning message if it was started\n if (reasoningState.hasStarted) {\n reasoningState.hasStarted = false;\n yield {\n type: EventType.THINKING_TEXT_MESSAGE_END,\n threadId,\n runId,\n messageId,\n };\n yield {\n type: EventType.THINKING_END,\n threadId,\n runId,\n messageId,\n };\n }\n\n if (!state.hasStarted) {\n yield {\n type: EventType.TEXT_MESSAGE_START,\n threadId,\n runId,\n messageId,\n role: \"assistant\",\n };\n state.hasStarted = true;\n }\n\n state.fullContent += delta.content;\n yield {\n type: EventType.TEXT_MESSAGE_CONTENT,\n threadId,\n runId,\n messageId,\n delta: delta.content,\n };\n }\n\n // Handle reasoning content\n if (delta.reasoning_content) {\n if (!reasoningState.hasStarted) {\n yield {\n type: EventType.THINKING_START,\n threadId,\n runId,\n messageId,\n };\n yield {\n type: EventType.THINKING_TEXT_MESSAGE_START,\n threadId,\n runId,\n messageId,\n role: \"assistant\",\n };\n reasoningState.hasStarted = true;\n }\n\n reasoningState.fullContent += delta.reasoning_content;\n yield {\n type: EventType.THINKING_TEXT_MESSAGE_CONTENT,\n threadId,\n runId,\n messageId,\n delta: delta.reasoning_content,\n };\n }\n\n // Handle tool calls\n if (delta.tool_calls) {\n for (const toolCall of delta.tool_calls) {\n const toolCallId = toolCall.id || `tool_${toolCall.index}`;\n\n if (toolCall.function?.name) {\n // Tool call start\n yield {\n type: EventType.TOOL_CALL_START,\n threadId,\n runId,\n toolCallId,\n toolCallName: toolCall.function.name,\n };\n\n // If first chunk contains arguments, emit TOOL_CALL_ARGS event\n if (toolCall.function.arguments) {\n yield {\n type: EventType.TOOL_CALL_ARGS,\n threadId,\n runId,\n toolCallId,\n delta: toolCall.function.arguments,\n };\n }\n\n state.toolCallsMap.set(toolCallId, {\n name: toolCall.function.name,\n args: toolCall.function.arguments || \"\",\n });\n } else if (toolCall.function?.arguments) {\n // Tool call arguments delta\n const existing = state.toolCallsMap.get(toolCallId);\n if (existing) {\n existing.args += toolCall.function.arguments;\n\n yield {\n type: EventType.TOOL_CALL_ARGS,\n threadId,\n runId,\n toolCallId,\n delta: toolCall.function.arguments,\n };\n }\n }\n }\n }\n }\n\n // Emit TEXT_MESSAGE_END if we had text content\n if (state.hasStarted) {\n yield {\n type: EventType.TEXT_MESSAGE_END,\n threadId,\n runId,\n messageId,\n };\n }\n\n if (reasoningState.hasStarted) {\n yield {\n type: EventType.THINKING_TEXT_MESSAGE_END,\n threadId,\n runId,\n messageId,\n };\n yield {\n type: EventType.THINKING_END,\n threadId,\n runId,\n messageId,\n };\n }\n\n // Emit TOOL_CALL_END for all tool calls\n for (const [toolCallId] of state.toolCallsMap) {\n yield {\n type: EventType.TOOL_CALL_END,\n threadId,\n runId,\n toolCallId,\n };\n }\n}\n","/**\n * Anthropic Stream Processor - Convert Anthropic streaming responses to AGUI events\n */\n\nimport Anthropic from '@anthropic-ai/sdk';\nimport { EventType } from '@ag-ui/client';\n\nexport interface StreamContext {\n threadId: string;\n runId: string;\n messageId: string;\n}\n\nexport interface StreamState {\n hasStarted: boolean;\n fullContent: string;\n toolCallsMap: Map<string, { name: string; input: string }>;\n indexToIdMap: Map<number, string>;\n}\n\n/**\n * Process Anthropic streaming events and emit AGUI events\n */\nexport async function* processAnthropicStream(\n stream: AsyncIterable<Anthropic.MessageStreamEvent>,\n context: StreamContext\n) {\n const { threadId, runId, messageId } = context;\n const state: StreamState = {\n hasStarted: false,\n fullContent: '',\n toolCallsMap: new Map(),\n indexToIdMap: new Map()\n };\n\n for await (const event of stream) {\n if (event.type === 'content_block_start') {\n const block = event.content_block;\n \n if (block.type === 'text') {\n if (!state.hasStarted) {\n yield {\n type: EventType.TEXT_MESSAGE_START,\n threadId,\n runId,\n messageId,\n role: 'assistant'\n };\n state.hasStarted = true;\n }\n } else if (block.type === 'tool_use') {\n // Store the mapping between index and tool call ID\n state.indexToIdMap.set(event.index, block.id);\n \n yield {\n type: EventType.TOOL_CALL_START,\n threadId,\n runId,\n toolCallId: block.id,\n toolCallName: block.name\n };\n \n state.toolCallsMap.set(block.id, {\n name: block.name,\n input: ''\n });\n }\n } else if (event.type === 'content_block_delta') {\n const delta = event.delta;\n \n if (delta.type === 'text_delta') {\n state.fullContent += delta.text;\n yield {\n type: EventType.TEXT_MESSAGE_CONTENT,\n threadId,\n runId,\n messageId,\n delta: delta.text\n };\n } else if (delta.type === 'input_json_delta') {\n // Get the tool call ID from the index\n const toolCallId = state.indexToIdMap.get(event.index);\n if (toolCallId) {\n const toolCall = state.toolCallsMap.get(toolCallId);\n if (toolCall) {\n toolCall.input += delta.partial_json;\n \n yield {\n type: EventType.TOOL_CALL_ARGS,\n threadId,\n runId,\n toolCallId,\n delta: delta.partial_json\n };\n }\n }\n }\n } else if (event.type === 'content_block_stop') {\n // Check if this was a tool call\n const toolCallId = state.indexToIdMap.get(event.index);\n if (toolCallId && state.toolCallsMap.has(toolCallId)) {\n yield {\n type: EventType.TOOL_CALL_END,\n threadId,\n runId,\n toolCallId\n };\n }\n }\n }\n\n // Emit TEXT_MESSAGE_END if we had text content\n if (state.hasStarted) {\n yield {\n type: EventType.TEXT_MESSAGE_END,\n threadId,\n runId,\n messageId\n };\n }\n\n // Emit RUN_FINISHED\n yield {\n type: EventType.RUN_FINISHED,\n threadId,\n runId\n };\n}\n\n"],"mappings":"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","names":["EventType","EventType","EventType"]}
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "@cloudbase/agent-adapter-llm",
3
+ "version": "1.0.1-alpha.30",
4
+ "description": "Direct LLM adapter for AG-Kit agents (OpenAI & Anthropic)",
5
+ "files": [
6
+ "dist/",
7
+ "README.md",
8
+ "CHANGELOG.md"
9
+ ],
10
+ "main": "dist/index.js",
11
+ "module": "dist/index.mjs",
12
+ "types": "dist/index.d.ts",
13
+ "exports": {
14
+ ".": {
15
+ "import": {
16
+ "types": "./dist/index.d.mts",
17
+ "default": "./dist/index.mjs"
18
+ },
19
+ "require": {
20
+ "types": "./dist/index.d.ts",
21
+ "default": "./dist/index.js"
22
+ }
23
+ }
24
+ },
25
+ "keywords": [
26
+ "ag-kit",
27
+ "llm",
28
+ "openai",
29
+ "anthropic",
30
+ "adapter",
31
+ "agent"
32
+ ],
33
+ "author": "",
34
+ "license": "ISC",
35
+ "devDependencies": {
36
+ "@types/node": "^20.0.0",
37
+ "tsup": "^8.5.0",
38
+ "typescript": "^5.0.0"
39
+ },
40
+ "dependencies": {
41
+ "@ag-ui/client": "^0.0.42",
42
+ "rxjs": "^7.8.1"
43
+ },
44
+ "peerDependencies": {
45
+ "openai": "^6.18.0",
46
+ "@anthropic-ai/sdk": "^0.74.0"
47
+ },
48
+ "peerDependenciesMeta": {
49
+ "openai": {
50
+ "optional": true
51
+ },
52
+ "@anthropic-ai/sdk": {
53
+ "optional": true
54
+ }
55
+ },
56
+ "scripts": {
57
+ "test": "echo \"Error: no test specified\" && exit 1",
58
+ "build": "tsup --config tsup.config.ts"
59
+ }
60
+ }