UNPKG

@llumiverse/drivers

Version:

LLM driver implementations. Currently supported are: openai, huggingface, bedrock, replicate.

57 lines 2.53 kB
import Anthropic from '@anthropic-ai/sdk'; import { AbstractDriver, LlumiverseError, ModelType, Providers, } from "@llumiverse/core"; import { buildClaudeStreamingConversation, executeClaudeCompletion, formatAnthropicLlumiverseError, formatClaudePrompt, streamClaudeCompletion, } from "../shared/claude-messages.js"; export class AnthropicDriver extends AbstractDriver { provider = Providers.anthropic; client; constructor(opts) { super(opts); this.client = new Anthropic({ apiKey: opts.apiKey, ...(opts.baseURL ? { baseURL: opts.baseURL } : {}) }); } formatPrompt(segments, opts) { return formatClaudePrompt(segments, opts); } async requestTextCompletion(prompt, options) { const model_options = options.model_options; if (model_options?._option_id !== undefined && model_options?._option_id !== "anthropic-claude") { this.logger.debug({ options: options.model_options }, "Unexpected option id"); } return executeClaudeCompletion(this.client, prompt, options); } async requestTextCompletionStream(prompt, options) { const model_options = options.model_options; if (model_options?._option_id !== undefined && model_options?._option_id !== "anthropic-claude") { this.logger.debug({ options: options.model_options }, "Unexpected option id"); } return streamClaudeCompletion(this.client, prompt, options); } async listModels(_params) { const page = await this.client.models.list({ limit: 1000 }); return page.data.map((m) => ({ id: m.id, name: m.display_name ?? m.id, provider: Providers.anthropic, type: ModelType.Text, can_stream: true, })); } async validateConnection() { try { await this.client.models.list({ limit: 1 }); return true; } catch { return false; } } async generateEmbeddings(_opts) { throw new LlumiverseError('[anthropic] Anthropic does not support embeddings', false, { provider: Providers.anthropic, model: _opts.model ?? 'unknown', operation: 'execute' }, undefined); } buildStreamingConversation(prompt, result, toolUse, options) { return buildClaudeStreamingConversation(prompt, result, toolUse, options); } formatLlumiverseError(error, context) { return formatAnthropicLlumiverseError(error, context); } } //# sourceMappingURL=index.js.map