UNPKG

manifest

Version:

Self-hosted Manifest LLM router with embedded server, SQLite database, and dashboard

234 lines 9.26 kB
"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