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