naisys
Version:
NAISYS - Autonomous AI agent runner with built-in context management and cost tracking
65 lines • 2.36 kB
JavaScript
import { getAllImageModels, getAllLlmModels } from "@naisys/common";
import { loadCustomModels } from "@naisys/common-node";
import { HubEvents, ModelsResponseSchema } from "@naisys/hub-protocol";
/** Provides model lookups, populated from hub (push) or disk (standalone) */
export function createModelService(hubClient) {
let llmModels = [];
let imageModels = [];
let modelsReadyPromise;
init();
function init() {
if (hubClient) {
let resolveModels;
let rejectModels;
modelsReadyPromise = new Promise((resolve, reject) => {
resolveModels = resolve;
rejectModels = reject;
});
hubClient.registerEvent(HubEvents.MODELS_UPDATED, (data) => {
try {
const response = ModelsResponseSchema.parse(data);
if (!response.success) {
rejectModels(new Error(response.error || "Failed to get models from hub"));
return;
}
llmModels = response.llmModels ?? [];
imageModels = response.imageModels ?? [];
resolveModels();
}
catch (error) {
rejectModels(error instanceof Error ? error : new Error(String(error)));
}
});
}
else {
// Standalone mode: load from disk
const custom = loadCustomModels(process.env.NAISYS_FOLDER || "");
llmModels = getAllLlmModels(custom.llmModels);
imageModels = getAllImageModels(custom.imageModels);
modelsReadyPromise = Promise.resolve();
}
}
function waitForModels() {
return modelsReadyPromise;
}
function getLlmModel(key) {
const model = llmModels.find((m) => m.key === key);
if (!model) {
throw new Error(`LLM model not found: ${key}`);
}
return model;
}
function getImageModel(key) {
const model = imageModels.find((m) => m.key === key);
if (!model) {
throw new Error(`Image model not found: ${key}`);
}
return model;
}
return {
waitForModels,
getLlmModel,
getImageModel,
};
}
//# sourceMappingURL=modelService.js.map