UNPKG

@llumiverse/drivers

Version:

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

63 lines 2.48 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.OpenAICompatibleDriver = void 0; const core_1 = require("@llumiverse/core"); const openai_1 = __importDefault(require("openai")); const index_js_1 = require("./index.js"); /** * A generic driver for OpenAI-compatible APIs. * This can be used with any service that implements the OpenAI API spec, * such as xAI (Grok), LM Studio, Ollama, vLLM, LocalAI, etc. */ class OpenAICompatibleDriver extends index_js_1.BaseOpenAIDriver { service; provider = core_1.Providers.openai_compatible; constructor(opts) { super(opts); if (!opts.apiKey) { throw new Error("apiKey is required"); } if (!opts.endpoint) { throw new Error("endpoint is required for OpenAI-compatible driver"); } this.service = new openai_1.default({ apiKey: opts.apiKey, baseURL: opts.endpoint, defaultHeaders: opts.default_headers, }); } async listModels() { try { const result = (await this.service.models.list()).data; const models = result.map((m) => { const modelCapability = (0, core_1.getModelCapabilities)(m.id, "openai"); let owner = m.owned_by; if (owner === "system") { owner = "unknown"; } return { id: m.id, name: m.id, provider: this.provider, owner: owner, type: core_1.ModelType.Text, can_stream: true, is_multimodal: false, input_modalities: (0, core_1.modelModalitiesToArray)(modelCapability.input), output_modalities: (0, core_1.modelModalitiesToArray)(modelCapability.output), tool_support: modelCapability.tool_support, }; }).sort((a, b) => a.id.localeCompare(b.id)); return models; } catch (error) { this.logger.warn({ error }, "[OpenAICompatible] Failed to list models, returning empty list"); return []; } } } exports.OpenAICompatibleDriver = OpenAICompatibleDriver; //# sourceMappingURL=openai_compatible.js.map