UNPKG

@agenite/anthropic

Version:
1 lines 12.7 kB
{"version":3,"sources":["../src/provider.ts"],"names":["block","BaseLLMProvider","Anthropic","convertStringToMessages","iterateFromMethods"],"mappings":"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","file":"index.cjs","sourcesContent":["import Anthropic from '@anthropic-ai/sdk';\nimport {\n convertStringToMessages,\n iterateFromMethods,\n BaseLLMProvider,\n} from '@agenite/llm';\nimport type {\n BaseMessage,\n GenerateResponse,\n ContentBlock,\n StopReason,\n GenerateOptions,\n PartialReturn,\n IterateGenerateOptions,\n} from '@agenite/llm';\nimport type { AnthropicConfig } from './types';\n\n/**\n * Maps Anthropic stop reasons to our standard stop reasons\n */\nfunction mapStopReason(stopReason: string | null): StopReason | undefined {\n if (!stopReason) return undefined;\n\n const stopReasonMap: Record<string, StopReason> = {\n end_turn: 'endTurn',\n max_tokens: 'maxTokens',\n stop_sequence: 'stopSequence',\n tool_use: 'toolUse',\n };\n\n return stopReasonMap[stopReason] || undefined;\n}\n\n/**\n * Maps Anthropic content blocks to our standard content blocks\n */\nfunction mapContent(content: Anthropic.ContentBlockParam[]): ContentBlock[] {\n return content.map((block): ContentBlock => {\n switch (block.type) {\n case 'text':\n return { type: 'text', text: block.text };\n case 'image':\n return {\n type: 'image',\n source: block.source,\n };\n case 'tool_use':\n return {\n type: 'toolUse',\n id: block.id,\n name: block.name,\n input: block.input,\n };\n default:\n throw new Error(\n `Unsupported content block type: ${JSON.stringify(block, null, 2)}`\n );\n }\n });\n}\n\nfunction convertContentBlock(\n block?: ContentBlock | string\n): Anthropic.ContentBlockParam | string {\n if (!block) {\n return '';\n }\n\n if (typeof block === 'string') {\n return block;\n }\n\n switch (block.type) {\n case 'text':\n return { type: 'text', text: block.text };\n case 'image':\n return {\n type: 'image',\n source:\n block.source.type === 'base64'\n ? {\n type: 'base64',\n data: block.source.data,\n media_type: block.source.media_type as\n | 'image/jpeg'\n | 'image/png'\n | 'image/gif'\n | 'image/webp',\n }\n : {\n type: 'url',\n url: block.source.url,\n },\n };\n case 'toolUse':\n return {\n type: 'tool_use',\n id: block.id,\n name: block.name,\n input: block.input,\n };\n case 'toolResult':\n return {\n type: 'tool_result',\n tool_use_id: block.toolUseId,\n content:\n typeof block.content === 'string'\n ? block.content\n : block.content?.map(\n (block) => convertContentBlock(block) as Anthropic.TextBlock\n ) || '',\n is_error: block.isError,\n };\n default:\n console.log('block', block);\n\n throw new Error(\n `Unsupported content block type: ${JSON.stringify(block, null, 2)}`\n );\n }\n}\n\n/**\n * Converts our message format to Anthropic's format\n */\nfunction convertMessages(messages: BaseMessage[]): Anthropic.MessageParam[] {\n return messages\n .filter(\n (\n msg\n ): msg is Omit<BaseMessage, 'role'> & { role: 'user' | 'assistant' } =>\n msg.role !== 'system'\n )\n .map((msg) => ({\n role: msg.role,\n content: msg.content.map((block): Anthropic.ContentBlockParam => {\n return convertContentBlock(block) as Anthropic.ContentBlockParam;\n }),\n }));\n}\n\nexport class AnthropicProvider extends BaseLLMProvider {\n private client: Anthropic;\n private model: string;\n readonly name = 'Claude';\n readonly version = '3';\n\n constructor(config: AnthropicConfig) {\n super();\n this.client = new Anthropic({\n apiKey: config.apiKey,\n baseURL: config.baseURL,\n });\n this.model = config.model ?? 'claude-3-opus-20240229';\n }\n\n async generate(\n input: string | BaseMessage[],\n options?: Partial<GenerateOptions>\n ): Promise<GenerateResponse> {\n try {\n const messageArray = convertStringToMessages(input);\n const transformedMessages = convertMessages(messageArray);\n\n const response = await this.client.messages.create({\n model: this.model,\n messages: transformedMessages,\n system: options?.systemPrompt,\n max_tokens: options?.maxTokens ?? 4096,\n temperature: options?.temperature,\n stop_sequences: options?.stopSequences,\n });\n\n return {\n content: mapContent(response.content),\n stopReason: mapStopReason(response.stop_reason),\n tokenUsage: {\n model: response.model,\n inputTokens: response.usage.input_tokens,\n outputTokens: response.usage.output_tokens,\n inputCost: 0,\n outputCost: 0,\n },\n };\n } catch (error) {\n console.error('Anthropic generation failed:', error);\n throw error instanceof Error\n ? new Error(`Anthropic generation failed: ${error.message}`)\n : new Error('Anthropic generation failed with unknown error');\n }\n }\n\n async *stream(\n input: string | BaseMessage[],\n options?: Partial<GenerateOptions>\n ): AsyncGenerator<PartialReturn, GenerateResponse, unknown> {\n try {\n const messageArray = convertStringToMessages(input);\n const transformedMessages = convertMessages(messageArray);\n\n const messageStream = await this.client.messages.stream({\n model: this.model,\n messages: transformedMessages,\n system: options?.systemPrompt,\n max_tokens: options?.maxTokens ?? 4096,\n temperature: options?.temperature,\n stop_sequences: options?.stopSequences,\n });\n\n let buffer = '';\n for await (const chunk of messageStream) {\n if (\n chunk.type === 'content_block_delta' &&\n chunk.delta.type === 'text_delta'\n ) {\n buffer += chunk.delta.text;\n\n if (buffer.length > 10) {\n yield {\n type: 'text',\n text: buffer,\n };\n buffer = '';\n }\n }\n }\n\n if (buffer.length > 0) {\n yield {\n type: 'text',\n text: buffer,\n };\n }\n\n const finalMessage = await messageStream.finalMessage();\n return {\n content: mapContent(finalMessage.content),\n stopReason: mapStopReason(finalMessage.stop_reason),\n tokenUsage: {\n model: finalMessage.model,\n inputTokens: finalMessage.usage.input_tokens,\n outputTokens: finalMessage.usage.output_tokens,\n inputCost: 0,\n outputCost: 0,\n },\n };\n } catch (error) {\n console.error('Anthropic generation failed:', error);\n throw error instanceof Error\n ? new Error(`Anthropic generation failed: ${error.message}`)\n : new Error('Anthropic generation failed with unknown error');\n }\n }\n\n async *iterate(\n input: string | BaseMessage[],\n options: IterateGenerateOptions\n ): AsyncGenerator<PartialReturn, GenerateResponse, unknown> {\n return yield* iterateFromMethods(this, input, options);\n }\n}\n"]}