manifest
Version:
Self-hosted Manifest LLM router with embedded server, SQLite database, and dashboard
234 lines • 9.26 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.findOpenRouterPrefix = findOpenRouterPrefix;
exports.lookupWithVariants = lookupWithVariants;
exports.buildModelsDevFallback = buildModelsDevFallback;
exports.buildFallbackModels = buildFallbackModels;
exports.buildSubscriptionFallbackModels = buildSubscriptionFallbackModels;
exports.supplementWithKnownModels = supplementWithKnownModels;
const providers_1 = require("../common/constants/providers");
const manifest_shared_1 = require("manifest-shared");
const anthropic_model_id_1 = require("../common/utils/anthropic-model-id");
const model_name_normalizer_1 = require("../model-prices/model-name-normalizer");
function normalizeProviderModelId(providerId, modelId) {
return providerId.toLowerCase() === 'anthropic'
? (0, anthropic_model_id_1.normalizeAnthropicShortModelId)(modelId)
: modelId;
}
function findOpenRouterPrefix(providerId) {
const lower = providerId.toLowerCase();
if (providers_1.OPENROUTER_PREFIX_TO_PROVIDER.has(lower))
return lower;
const entry = providers_1.PROVIDER_BY_ID_OR_ALIAS.get(lower);
if (entry) {
for (const prefix of entry.openRouterPrefixes) {
if (providers_1.OPENROUTER_PREFIX_TO_PROVIDER.has(prefix))
return prefix;
}
}
for (const [prefix, displayName] of providers_1.OPENROUTER_PREFIX_TO_PROVIDER) {
if (displayName.toLowerCase() === lower)
return prefix;
}
return null;
}
const OPENROUTER_NAME_ALIASES = new Map([
['voxtral-small', 'voxtral-small-24b'],
['open-mistral-nemo', 'mistral-nemo'],
['mistral-tiny', 'open-mistral-7b'],
]);
function lookupWithVariants(pricingSync, prefix, modelId) {
const exact = pricingSync.lookupPricing(`${prefix}/${modelId}`);
if (exact)
return exact;
for (const [from, to] of OPENROUTER_NAME_ALIASES) {
if (modelId.includes(from)) {
const aliased = modelId.replace(from, to);
const aliasResult = pricingSync.lookupPricing(`${prefix}/${aliased}`);
if (aliasResult)
return aliasResult;
}
}
const dotVariant = modelId.replace(/-(\d+)-(\d)/g, '-$1.$2');
if (dotVariant !== modelId) {
const dotResult = pricingSync.lookupPricing(`${prefix}/${dotVariant}`);
if (dotResult)
return dotResult;
}
const dashVariant = modelId.replace(/\.(\d)/g, '-$1');
if (dashVariant !== modelId) {
const dashResult = pricingSync.lookupPricing(`${prefix}/${dashVariant}`);
if (dashResult)
return dashResult;
}
const noDate = modelId.replace(/-\d{8}$/, '');
if (noDate !== modelId) {
const noDateResult = pricingSync.lookupPricing(`${prefix}/${noDate}`);
if (noDateResult)
return noDateResult;
const noDateDot = noDate.replace(/-(\d+)-(\d)/g, '-$1.$2');
if (noDateDot !== noDate) {
const noDateDotResult = pricingSync.lookupPricing(`${prefix}/${noDateDot}`);
if (noDateDotResult)
return noDateDotResult;
}
}
const freeResult = pricingSync.lookupPricing(`${prefix}/${modelId}:free`);
if (freeResult)
return freeResult;
const noGoogleVariant = modelId.replace(model_name_normalizer_1.GOOGLE_VARIANT_RE, '');
if (noGoogleVariant !== modelId) {
const result = pricingSync.lookupPricing(`${prefix}/${noGoogleVariant}`);
if (result)
return result;
}
if (modelId.endsWith('-latest')) {
const base = modelId.slice(0, -'-latest'.length);
const scanPrefix = `${prefix}/${base}-`;
for (const [key] of pricingSync.getAll()) {
if (key.startsWith(scanPrefix)) {
const found = pricingSync.lookupPricing(key);
if (found)
return found;
}
}
}
return null;
}
function buildModelsDevFallback(modelsDevSync, providerId) {
if (!modelsDevSync)
return [];
const entries = modelsDevSync.getModelsForProvider(providerId);
return entries.map((e) => ({
id: e.id,
displayName: e.name || e.id,
provider: providerId,
contextWindow: e.contextWindow ?? 128000,
inputPricePerToken: e.inputPricePerToken,
outputPricePerToken: e.outputPricePerToken,
capabilityReasoning: e.reasoning ?? false,
capabilityCode: e.toolCall ?? false,
qualityScore: 3,
}));
}
function buildFallbackModels(pricingSync, providerId, confirmedModels) {
if (!pricingSync)
return [];
const models = [];
const seen = new Set();
const hasConfirmed = confirmedModels != null && confirmedModels.size > 0;
const orPrefix = findOpenRouterPrefix(providerId);
if (!orPrefix)
return [];
for (const [fullId, entry] of pricingSync.getAll()) {
if (!fullId.startsWith(`${orPrefix}/`))
continue;
const modelId = normalizeProviderModelId(providerId, fullId.substring(orPrefix.length + 1));
if (seen.has(modelId))
continue;
if (hasConfirmed && !confirmedModels.has(modelId.toLowerCase()))
continue;
seen.add(modelId);
models.push({
id: modelId,
displayName: entry.displayName || modelId,
provider: providerId,
contextWindow: entry.contextWindow ?? 128000,
inputPricePerToken: entry.input,
outputPricePerToken: entry.output,
capabilityReasoning: false,
capabilityCode: false,
qualityScore: 3,
});
}
return models;
}
function buildSubscriptionFallbackModels(pricingSync, providerId) {
const knownPrefixes = (0, manifest_shared_1.getSubscriptionKnownModels)(providerId);
if (!knownPrefixes)
return [];
const normalizedKnownPrefixes = knownPrefixes.map((modelId) => modelId.toLowerCase());
const capabilities = (0, manifest_shared_1.getSubscriptionCapabilities)(providerId);
const models = [];
const seen = new Set();
const orPrefix = pricingSync ? findOpenRouterPrefix(providerId) : null;
if (pricingSync && orPrefix) {
for (const [fullId, entry] of pricingSync.getAll()) {
if (!fullId.startsWith(`${orPrefix}/`))
continue;
const modelId = normalizeProviderModelId(providerId, fullId.substring(orPrefix.length + 1));
if (!normalizedKnownPrefixes.some((p) => modelId.toLowerCase().startsWith(p))) {
continue;
}
if (seen.has(modelId))
continue;
seen.add(modelId);
let contextWindow = entry.contextWindow ?? 128000;
if (capabilities?.maxContextWindow && contextWindow > capabilities.maxContextWindow) {
contextWindow = capabilities.maxContextWindow;
}
models.push({
id: modelId,
displayName: entry.displayName || modelId,
provider: providerId,
contextWindow,
inputPricePerToken: entry.input,
outputPricePerToken: entry.output,
capabilityReasoning: false,
capabilityCode: false,
qualityScore: 3,
});
}
}
const defaultCtx = capabilities?.maxContextWindow ?? 200000;
for (const modelId of knownPrefixes) {
const lowerModelId = modelId.toLowerCase();
const covered = models.some((m) => {
const lowerDiscovered = m.id.toLowerCase();
return lowerDiscovered === lowerModelId || lowerDiscovered.startsWith(`${lowerModelId}-`);
});
if (covered)
continue;
models.push({
id: modelId,
displayName: modelId,
provider: providerId,
contextWindow: defaultCtx,
inputPricePerToken: 0,
outputPricePerToken: 0,
capabilityReasoning: false,
capabilityCode: false,
qualityScore: 3,
});
}
return models;
}
function supplementWithKnownModels(raw, providerId) {
const knownModels = (0, manifest_shared_1.getSubscriptionKnownModels)(providerId);
if (!knownModels)
return raw;
const capabilities = (0, manifest_shared_1.getSubscriptionCapabilities)(providerId);
const defaultCtx = capabilities?.maxContextWindow ?? 200000;
for (const modelId of knownModels) {
const lowerModelId = modelId.toLowerCase();
const covered = raw.some((m) => {
const lowerDiscovered = m.id.toLowerCase();
return lowerDiscovered === lowerModelId || lowerDiscovered.startsWith(`${lowerModelId}-`);
});
if (covered)
continue;
raw.push({
id: modelId,
displayName: modelId,
provider: providerId,
contextWindow: defaultCtx,
inputPricePerToken: 0,
outputPricePerToken: 0,
capabilityReasoning: false,
capabilityCode: false,
qualityScore: 3,
});
}
return raw;
}
//# sourceMappingURL=model-fallback.js.map