@llumiverse/drivers
Version:
LLM driver implementations. Currently supported are: openai, huggingface, bedrock, replicate.
57 lines • 2.53 kB
JavaScript
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