UNPKG

claude-flow-novice

Version:

Claude Flow Novice - Advanced orchestration platform for multi-agent AI workflows with CFN Loop architecture Includes Local RuVector Accelerator and all CFN skills for complete functionality.

113 lines (112 loc) 3.7 kB
import Anthropic from '@anthropic-ai/sdk'; import { ProviderError } from './provider-interface.js'; export class AnthropicProvider { client; defaultModel; constructor(apiKey, defaultModel = 'claude-3-5-haiku-20240620'){ this.client = new Anthropic({ apiKey: apiKey || process.env.ANTHROPIC_API_KEY }); this.defaultModel = defaultModel; } async sendMessage(prompt, options = {}) { try { const response = await this.client.messages.create({ model: options.model || this.defaultModel, max_tokens: options.maxTokens || 4096, temperature: options.temperature || 0.7, system: options.system, messages: [ { role: 'user', content: prompt } ] }); return response.content[0].text; } catch (error) { throw new ProviderError('Failed to send message to Anthropic', 'ANTHROPIC_SEND_ERROR', { originalError: error }); } } async *streamMessage(prompt, options = {}) { try { const stream = await this.client.messages.create({ model: options.model || this.defaultModel, max_tokens: options.maxTokens || 4096, temperature: options.temperature || 0.7, system: options.system, stream: true, messages: [ { role: 'user', content: prompt } ] }); for await (const messageStreamEvent of stream){ if (messageStreamEvent.type === 'content_block_delta') { yield messageStreamEvent.delta.text; } } } catch (error) { throw new ProviderError('Failed to stream message from Anthropic', 'ANTHROPIC_STREAM_ERROR', { originalError: error }); } } async getModels() { return [ { id: 'claude-3-5-haiku-20240620', name: 'Claude 3.5 Haiku', context_window: 200000, pricing: { input: 0.00003, output: 0.00015 } }, { id: 'claude-3-opus-20240229', name: 'Claude 3 Opus', context_window: 200000, pricing: { input: 0.00015, output: 0.00075 } }, { id: 'claude-3-sonnet-20240229', name: 'Claude 3 Sonnet', context_window: 200000, pricing: { input: 0.00003, output: 0.00015 } } ]; } async checkHealth() { try { const startTime = Date.now(); await this.sendMessage('Health check', { maxTokens: 10 }); const latency = Date.now() - startTime; const models = await this.getModels(); return { status: latency < 500 ? 'healthy' : 'degraded', latency, models_available: models.length }; } catch (error) { return { status: 'unavailable', latency: undefined, models_available: 0 }; } } } //# sourceMappingURL=anthropic-provider.js.map