UNPKG

@llumiverse/drivers

Version:

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

65 lines 2.78 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.xAIDriver = void 0; const core_1 = require("@llumiverse/core"); const openai_format_js_1 = require("../openai/openai_format.js"); const api_fetch_client_1 = require("@vertesia/api-fetch-client"); const openai_1 = __importDefault(require("openai")); const index_js_1 = require("../openai/index.js"); class xAIDriver extends index_js_1.BaseOpenAIDriver { service; provider = core_1.Providers.xai; xai_service; DEFAULT_ENDPOINT = "https://api.x.ai/v1"; constructor(opts) { super(opts); if (!opts.apiKey) { throw new Error("apiKey is required"); } this.service = new openai_1.default({ apiKey: opts.apiKey, baseURL: opts.endpoint ?? this.DEFAULT_ENDPOINT, }); this.xai_service = new api_fetch_client_1.FetchClient(opts.endpoint ?? this.DEFAULT_ENDPOINT).withAuthCallback(async () => `Bearer ${opts.apiKey}`); //this.formatPrompt = this._formatPrompt; //TODO: fix xai prompt formatting } async _formatPrompt(segments, opts) { const options = { multimodal: opts.model.includes("vision"), schema: opts.result_schema, useToolForFormatting: false, }; const p = await (0, openai_format_js_1.formatOpenAILikeMultimodalPrompt)(segments, { ...options, ...opts }); return p; } // Note: We intentionally do NOT override extractDataFromResponse here. // The base class implementation properly handles tool_calls extraction. // xAI's API is OpenAI-compatible and returns tool_calls in the same format. async listModels() { const [lm, em] = await Promise.all([ this.xai_service.get("/language-models"), this.xai_service.get("/embedding-models") ]); em.models.forEach(m => { m.output_modalities.push("vectors"); }); const models = [...lm.models, ...em.models].map(model => { return { id: model.id, provider: this.provider, name: model.id, description: `${model.id} by ${model.owned_by}`, is_multimodal: model.input_modalities.length > 1, input_modalities: model.input_modalities, output_modalities: model.output_modalities, tags: [...model.input_modalities.map(m => `i:${m}`), ...model.output_modalities.map(m => `o:${m}`)], }; }); return models; } } exports.xAIDriver = xAIDriver; //# sourceMappingURL=index.js.map