Project Files
dist / index.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.isTransientStartupInventoryError = isTransientStartupInventoryError;
exports.refreshStartupInventory = refreshStartupInventory;
exports.main = main;
const config_1 = require("./config");
const generator_1 = require("./generator");
const inventory_1 = require("./inventory");
const modelCache_1 = require("./modelCache");
const STARTUP_REFRESH_ATTEMPTS = 5;
const STARTUP_REFRESH_RETRY_DELAY_MS = 1000;
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
function isTransientStartupInventoryError(error) {
const message = error instanceof Error ? error.message : String(error ?? "");
return /ECONNREFUSED|ECONNRESET|socket hang up|timed out|HTTP 502|HTTP 503|HTTP 504/i.test(message);
}
const defaultStartupInventoryDeps = {
fetchGeneratorModelIds: inventory_1.fetchGeneratorModelIds,
fetchEmbedModelIds: inventory_1.fetchEmbedModelIds,
fetchPreferredHostedModelId: inventory_1.fetchPreferredHostedModelId,
updateEmbedModelOptions: config_1.updateEmbedModelOptions,
updateModelOptions: config_1.updateModelOptions,
writeCachedState: modelCache_1.writeCachedState,
sleep,
};
async function refreshStartupInventory(cachedBaseUrl, cachedInventoryMode, cachedLastSelected, cachedLastSelectedEmbed, deps = defaultStartupInventoryDeps) {
let lastError;
for (let attempt = 1; attempt <= STARTUP_REFRESH_ATTEMPTS; attempt += 1) {
try {
const { models } = await deps.fetchGeneratorModelIds(cachedBaseUrl, cachedInventoryMode);
const { models: embedModels } = await deps.fetchEmbedModelIds(cachedBaseUrl, cachedInventoryMode);
const modelIds = models.map(model => model.id);
const embedModelIds = embedModels.map(model => model.id);
const preferredHostedModel = await deps.fetchPreferredHostedModelId(cachedBaseUrl).catch(() => undefined);
const defaultModel = cachedLastSelected && modelIds.includes(cachedLastSelected)
? cachedLastSelected
: preferredHostedModel && modelIds.includes(preferredHostedModel)
? preferredHostedModel
: modelIds[0];
const defaultEmbedModel = cachedLastSelectedEmbed && embedModelIds.includes(cachedLastSelectedEmbed)
? cachedLastSelectedEmbed
: embedModelIds[0];
deps.updateModelOptions(models, defaultModel ?? "");
deps.updateEmbedModelOptions(embedModels, defaultEmbedModel ?? "");
await deps.writeCachedState(models, embedModels, defaultModel, defaultEmbedModel, cachedInventoryMode, cachedBaseUrl);
return true;
}
catch (error) {
lastError = error;
if (!isTransientStartupInventoryError(error) || attempt >= STARTUP_REFRESH_ATTEMPTS) {
throw error;
}
await deps.sleep(STARTUP_REFRESH_RETRY_DELAY_MS);
}
}
throw lastError instanceof Error ? lastError : new Error(String(lastError ?? "Unknown startup inventory failure"));
}
async function main(context) {
const cachedState = (0, modelCache_1.readCachedState)();
const cachedLastSelected = cachedState.lastSelected && cachedState.lastSelected.length > 0 ? cachedState.lastSelected : undefined;
const cachedLastSelectedEmbed = cachedState.lastSelectedEmbed && cachedState.lastSelectedEmbed.length > 0
? cachedState.lastSelectedEmbed
: undefined;
const cachedBaseUrl = cachedState.shimBaseUrl || "http://127.0.0.1:9000/v1";
const cachedInventoryMode = cachedState.inventoryMode || "health";
let schematicsLoadedFromInventory = false;
try {
schematicsLoadedFromInventory = await refreshStartupInventory(cachedBaseUrl, cachedInventoryMode, cachedLastSelected, cachedLastSelectedEmbed);
}
catch (error) {
console.warn("Startup inventory refresh failed; falling back to cached plugin state.", error);
}
if (!schematicsLoadedFromInventory) {
(0, config_1.loadConfigSchematicsFromCache)();
}
context.withConfigSchematics(config_1.configSchematics);
context.withConfigSchematics(config_1.embedConfigSchematics);
context.withGlobalConfigSchematics(config_1.globalConfigSchematics);
context.withGenerator(generator_1.generate);
}
//# sourceMappingURL=index.js.map