@robota-sdk/anthropic
Version:
Anthropic Claude integration for Robota SDK - Claude 3, Claude 2, function calling, and tool integration with Anthropic's API
1 lines • 11.5 kB
Source Map (JSON)
{"version":3,"sources":["../src/adapter.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["import type { UniversalMessage, UserMessage, AssistantMessage, SystemMessage, ToolMessage } from '@robota-sdk/core';\n\n/**\n * Anthropic message format for Messages API\n */\ninterface AnthropicAPIMessage {\n role: 'user' | 'assistant';\n content: string;\n}\n\n/**\n * Anthropic message format (legacy)\n */\ninterface AnthropicMessage {\n role: string;\n content: string;\n}\n\n/**\n * Anthropic ConversationHistory adapter\n * \n * Converts UniversalMessage to Anthropic prompt format and Messages API format\n */\nexport class AnthropicConversationAdapter {\n /**\n * Convert UniversalMessage array to Anthropic Messages API format\n * \n * @param messages - Array of universal messages\n * @returns Array of messages in Anthropic Messages API format\n */\n static toAnthropicMessages(messages: UniversalMessage[]): AnthropicAPIMessage[] {\n const anthropicMessages: AnthropicAPIMessage[] = [];\n\n for (const message of messages) {\n const messageRole = message.role;\n\n if (messageRole === 'system') {\n continue; // System messages are handled separately in the system parameter\n }\n\n if (messageRole === 'user') {\n const userMsg = message as UserMessage;\n anthropicMessages.push({\n role: 'user',\n content: userMsg.content\n });\n } else if (messageRole === 'assistant') {\n const assistantMsg = message as AssistantMessage;\n let content = assistantMsg.content || '';\n\n // Include tool calls in content if present\n if ((assistantMsg as any).toolCalls) {\n const toolCalls = (assistantMsg as any).toolCalls;\n for (const tc of toolCalls) {\n content += `\\n\\nTool Call: ${tc.function.name}(${tc.function.arguments})`;\n }\n }\n\n anthropicMessages.push({\n role: 'assistant',\n content\n });\n } else if (messageRole === 'tool') {\n const toolMsg = message as ToolMessage;\n // Convert tool results to user message\n anthropicMessages.push({\n role: 'user',\n content: `[Tool Result from ${toolMsg.name}]: ${toolMsg.content}`\n });\n }\n }\n\n return anthropicMessages;\n }\n\n /**\n * Convert UniversalMessage array to Anthropic prompt format (legacy)\n */\n static toAnthropicPrompt(messages: UniversalMessage[], systemPrompt?: string): string {\n let prompt = '';\n\n // Add system prompt if present\n const finalSystemPrompt = this.extractSystemPrompt(messages, systemPrompt);\n if (finalSystemPrompt) {\n prompt += finalSystemPrompt + '\\n\\n';\n }\n\n // Convert messages to Human/Assistant format\n for (const message of messages) {\n const messageRole = message.role;\n\n if (messageRole === 'system') {\n continue; // System messages are already processed\n }\n\n if (messageRole === 'user') {\n const userMsg = message as UserMessage;\n prompt += `\\n\\nHuman: ${userMsg.content}`;\n } else if (messageRole === 'assistant') {\n const assistantMsg = message as AssistantMessage;\n let content = assistantMsg.content || '';\n\n // Include tool calls in content if present\n if ((assistantMsg as any).toolCalls) {\n const toolCalls = (assistantMsg as any).toolCalls;\n for (const tc of toolCalls) {\n content += `\\n\\nTool Call: ${tc.function.name}(${tc.function.arguments})`;\n }\n }\n\n prompt += `\\n\\nAssistant: ${content}`;\n } else if (messageRole === 'tool') {\n const toolMsg = message as ToolMessage;\n // Convert tool results to Human message\n prompt += `\\n\\nHuman: [Tool Result from ${toolMsg.name}]: ${toolMsg.content}`;\n }\n }\n\n // Add Assistant prompt if last message is from Human\n if (messages.length > 0) {\n const lastMessage = messages[messages.length - 1];\n if (lastMessage.role === 'user') {\n prompt += '\\n\\nAssistant:';\n }\n }\n\n return prompt;\n }\n\n /**\n * Extract system messages and combine them as system prompt\n */\n static extractSystemPrompt(messages: UniversalMessage[], fallbackSystemPrompt?: string): string | undefined {\n const systemMessages = messages.filter(msg => msg.role === 'system') as SystemMessage[];\n\n if (systemMessages.length > 0) {\n return systemMessages.map(msg => msg.content).join('\\n\\n');\n }\n\n return fallbackSystemPrompt;\n }\n\n /**\n * Helper for message conversion testing (converts each message individually)\n */\n static convertMessage(msg: UniversalMessage): AnthropicMessage {\n const messageRole = msg.role;\n\n if (messageRole === 'user') {\n const userMsg = msg as UserMessage;\n return {\n role: 'human',\n content: userMsg.content\n };\n }\n\n if (messageRole === 'assistant') {\n const assistantMsg = msg as AssistantMessage;\n let content = assistantMsg.content || '';\n if ((assistantMsg as any).toolCalls) {\n const toolCalls = (assistantMsg as any).toolCalls;\n for (const tc of toolCalls) {\n content += `\\n\\nTool Call: ${tc.function.name}(${tc.function.arguments})`;\n }\n }\n return {\n role: 'assistant',\n content\n };\n }\n\n if (messageRole === 'tool') {\n const toolMsg = msg as ToolMessage;\n return {\n role: 'human',\n content: `[Tool Result from ${toolMsg.name}]: ${toolMsg.content}`\n };\n }\n\n if (messageRole === 'system') {\n const systemMsg = msg as SystemMessage;\n return {\n role: 'system',\n content: systemMsg.content\n };\n }\n\n // This should never happen but TypeScript requires exhaustive checking\n const _exhaustiveCheck: never = msg;\n return _exhaustiveCheck;\n }\n} ","import type { ProviderOptions } from '@robota-sdk/core';\n\n/**\n * Anthropic provider options\n */\nexport interface AnthropicProviderOptions extends ProviderOptions {\n apiKey: string;\n}\n\n/**\n * Anthropic provider class\n */\nexport class AnthropicProvider {\n constructor(_options: AnthropicProviderOptions) {\n // Initialization logic\n }\n\n // To be implemented\n}\n\n/**\n * @robota-sdk/anthropic package\n * \n * Provides Provider implementation for using Anthropic API.\n */\n\n// Import all exports from types.ts and provider.ts\nexport * from './provider';\nexport * from './types';\nexport * from './adapter';\n\nexport function createAnthropicProvider(_options: AnthropicProviderOptions) {\n // Implementation of createAnthropicProvider function\n} "]}