@agentproto/model-catalog 0.13.1 → 0.13.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/access/index.d.ts +3 -3
- package/dist/access/index.mjs +4 -4
- package/dist/{catalog-DRGEICKV.d.ts → catalog-DLa4soLN.d.ts} +8 -0
- package/dist/{chunk-XJUZ5X3W.mjs → chunk-2P2R2XLK.mjs} +5 -5
- package/dist/{chunk-XJUZ5X3W.mjs.map → chunk-2P2R2XLK.mjs.map} +1 -1
- package/dist/{chunk-TVXNRUJM.mjs → chunk-5E34CLTH.mjs} +66 -76
- package/dist/chunk-5E34CLTH.mjs.map +1 -0
- package/dist/{chunk-5EX3V7QZ.mjs → chunk-5GIH3O6I.mjs} +4 -4
- package/dist/{chunk-5EX3V7QZ.mjs.map → chunk-5GIH3O6I.mjs.map} +1 -1
- package/dist/{chunk-UOOTUH6N.mjs → chunk-FPTLINCV.mjs} +3 -3
- package/dist/{chunk-UOOTUH6N.mjs.map → chunk-FPTLINCV.mjs.map} +1 -1
- package/dist/{chunk-6TZ6WIM3.mjs → chunk-ORWNAAFP.mjs} +4 -4
- package/dist/{chunk-6TZ6WIM3.mjs.map → chunk-ORWNAAFP.mjs.map} +1 -1
- package/dist/{chunk-ALUIW3QO.mjs → chunk-P5PQS3SJ.mjs} +197 -116
- package/dist/chunk-P5PQS3SJ.mjs.map +1 -0
- package/dist/{chunk-NNV3NYUE.mjs → chunk-PKFRG2DA.mjs} +3 -3
- package/dist/{chunk-NNV3NYUE.mjs.map → chunk-PKFRG2DA.mjs.map} +1 -1
- package/dist/{chunk-TZ5LNR5F.mjs → chunk-POKSD3S3.mjs} +3 -3
- package/dist/{chunk-TZ5LNR5F.mjs.map → chunk-POKSD3S3.mjs.map} +1 -1
- package/dist/cost/index.mjs +6 -6
- package/dist/curation/index.d.ts +2 -2
- package/dist/curation/index.mjs +6 -6
- package/dist/{evaluate-B-irutMW.d.ts → evaluate-DYz38I9t.d.ts} +1 -1
- package/dist/{index-VuUTv1ft.d.ts → index-BZlWH9br.d.ts} +1 -1
- package/dist/{index-kbLggJk1.d.ts → index-CwIGbZai.d.ts} +2 -2
- package/dist/index.d.ts +5 -5
- package/dist/index.mjs +10 -10
- package/dist/llm/index.d.ts +1 -1
- package/dist/llm/index.mjs +2 -2
- package/dist/overlay/index.d.ts +1 -1
- package/dist/picker/index.d.ts +4 -4
- package/dist/route-identity/index.d.ts +1 -1
- package/dist/route-identity/index.mjs +2 -2
- package/package.json +1 -1
- package/dist/chunk-ALUIW3QO.mjs.map +0 -1
- package/dist/chunk-TVXNRUJM.mjs.map +0 -1
package/dist/access/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { A as AccessDecision, a as AccessEffect, b as AccessEvalInput, c as AccessRule, d as AccessTarget, e as AppScope, f as evaluateAccess } from '../evaluate-
|
|
2
|
-
import { R as ResolvedModel } from '../index-
|
|
1
|
+
export { A as AccessDecision, a as AccessEffect, b as AccessEvalInput, c as AccessRule, d as AccessTarget, e as AppScope, f as evaluateAccess } from '../evaluate-DYz38I9t.js';
|
|
2
|
+
import { R as ResolvedModel } from '../index-BZlWH9br.js';
|
|
3
3
|
import '../base-BaiI72Da.js';
|
|
4
4
|
import 'zod';
|
|
5
|
-
import '../catalog-
|
|
5
|
+
import '../catalog-DLa4soLN.js';
|
|
6
6
|
import '../image/index.js';
|
|
7
7
|
import '../video/index.js';
|
|
8
8
|
import '../audio/index.js';
|
package/dist/access/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { evaluateAccess, evaluateCatalogDefaults } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
1
|
+
export { evaluateAccess, evaluateCatalogDefaults } from '../chunk-POKSD3S3.mjs';
|
|
2
|
+
import '../chunk-PKFRG2DA.mjs';
|
|
3
|
+
import '../chunk-FPTLINCV.mjs';
|
|
4
|
+
import '../chunk-5E34CLTH.mjs';
|
|
5
5
|
import '../chunk-QHELXPSL.mjs';
|
|
6
6
|
//# sourceMappingURL=index.mjs.map
|
|
7
7
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -832,6 +832,14 @@ declare const LLM_PRICING_CATALOG: {
|
|
|
832
832
|
readonly vendor: "minimax";
|
|
833
833
|
readonly provider: "minimax";
|
|
834
834
|
};
|
|
835
|
+
"MiniMax-M3.1-Flash": {
|
|
836
|
+
readonly inputPer1M: 0.15;
|
|
837
|
+
readonly outputPer1M: 0.6;
|
|
838
|
+
readonly cacheReadMultiplier: 0.1;
|
|
839
|
+
readonly priceSource: "minimax";
|
|
840
|
+
readonly vendor: "minimax";
|
|
841
|
+
readonly provider: "minimax";
|
|
842
|
+
};
|
|
835
843
|
"gpt-3.5-turbo": {
|
|
836
844
|
readonly inputPer1M: 0.5;
|
|
837
845
|
readonly outputPer1M: 1.5;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { listRouterLlmRoutes, formatModelRef } from './chunk-
|
|
2
|
-
import { modelHasTag } from './chunk-
|
|
1
|
+
import { listRouterLlmRoutes, formatModelRef } from './chunk-P5PQS3SJ.mjs';
|
|
2
|
+
import { modelHasTag } from './chunk-PKFRG2DA.mjs';
|
|
3
3
|
import { getMergedOverlay } from './chunk-H6JUTF3U.mjs';
|
|
4
|
-
import { resolvePricing, resolveAlias, isKnownLlmId, getModelProvider, LLM_PRICING_CATALOG, listUnpricedKnownLlmIds } from './chunk-
|
|
4
|
+
import { resolvePricing, resolveAlias, isKnownLlmId, getModelProvider, LLM_PRICING_CATALOG, listUnpricedKnownLlmIds } from './chunk-5E34CLTH.mjs';
|
|
5
5
|
import { IMAGE_MODEL_CATALOG } from './chunk-2LWYZOWB.mjs';
|
|
6
6
|
import { VIDEO_MODEL_CATALOG } from './chunk-IJZ4XPO2.mjs';
|
|
7
7
|
import { AUDIO_MODEL_CATALOG } from './chunk-WRUWNKDB.mjs';
|
|
@@ -202,5 +202,5 @@ function resolveAlias2(id) {
|
|
|
202
202
|
}
|
|
203
203
|
|
|
204
204
|
export { getModel, getModelsByProvider, getStaticModelProvider, isAgentVisible, listModels, resolveAlias2 as resolveAlias };
|
|
205
|
-
//# sourceMappingURL=chunk-
|
|
206
|
-
//# sourceMappingURL=chunk-
|
|
205
|
+
//# sourceMappingURL=chunk-2P2R2XLK.mjs.map
|
|
206
|
+
//# sourceMappingURL=chunk-2P2R2XLK.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/registry/index.ts"],"names":["resolveAlias"],"mappings":"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","file":"chunk-XJUZ5X3W.mjs","sourcesContent":["/**\n * Cross-kind registry. Resolves a model id against every catalog (LLM,\n * image, video, audio) and returns a discriminated `ResolvedModel`.\n *\n * v1 returns the legacy per-kind data shapes verbatim — image/video keep\n * `*ModelDefinition`, LLM keeps `LLMPricing`, audio surfaces voices.\n * Callers (cost dispatcher, access evaluator) match on `.kind` and dig\n * into the per-kind payload as needed.\n */\n\nimport {\n LLM_PRICING_CATALOG,\n resolveAlias as resolveLlmAlias,\n resolvePricing,\n isKnownLlmId,\n listUnpricedKnownLlmIds,\n getModelProvider,\n type LLMPricing,\n} from \"../llm/index.js\"\nimport {\n IMAGE_MODEL_CATALOG,\n type ImageModelDefinition,\n} from \"../image/index.js\"\nimport {\n VIDEO_MODEL_CATALOG,\n type VideoModelDefinition,\n} from \"../video/index.js\"\nimport {\n AUDIO_MODEL_CATALOG,\n type AudioModelDefinition,\n} from \"../audio/index.js\"\nimport { VOICE_CATALOG, type CatalogVoice } from \"../voice/index.js\"\nimport { modelHasTag } from \"../enrichment/index.js\"\nimport { getMergedOverlay, type MergedOverlay } from \"../overlay/index.js\"\nimport { listRouterLlmRoutes, formatModelRef } from \"../route-identity/index.js\"\n\n/** Follow consumer-overlay alias hops to a concrete id (cycle-guarded).\n * Ids with no overlay alias pass through unchanged. */\nfunction followAlias(id: string, ov: MergedOverlay): string {\n let cur = id\n const seen = new Set<string>()\n for (;;) {\n const next = ov.aliases[cur]\n if (next === undefined || seen.has(cur)) break\n seen.add(cur)\n cur = next\n }\n return cur\n}\n\n/** Find an overlay voice by catalogId / providerVoiceId / alias. */\nfunction overlayVoice(ov: MergedOverlay, key: string): CatalogVoice | undefined {\n return ov.voice.find(\n v =>\n v.catalogId === key ||\n v.providerVoiceId === key ||\n (v.aliases ?? []).includes(key),\n )\n}\n\n/**\n * `audio` resolves to either an audio MODEL (priced TTS/STT) or a\n * voice (downstream metadata). Most call sites care about the model\n * (pricing, capabilities); a few (voice pickers) want the voice. They\n * share the resolver but discriminate on the inner payload.\n */\nexport type ResolvedModel =\n | {\n kind: \"llm\"\n id: string\n canonicalId: string\n /** Undefined for a real, known id with no pricing row yet — existence\n * and pricing are independent, see `LlmModelId`'s doc comment in\n * `llm/catalog.ts`. Every reader MUST handle the absent case; never\n * assume a `kind: \"llm\"` result is priced. */\n pricing: LLMPricing | undefined\n /** Best-effort provider even when `pricing` is absent (falls back to\n * `CONTEXT_WINDOWS`'s own provider field — see `getModelProvider`).\n * Prefer this over `pricing?.provider` when you only need routing. */\n provider: string | undefined\n }\n | { kind: \"image\"; id: string; def: ImageModelDefinition }\n | { kind: \"video\"; id: string; def: VideoModelDefinition }\n | { kind: \"audio\"; id: string; def: AudioModelDefinition }\n | { kind: \"voice\"; id: string; voice: CatalogVoice }\n\n/**\n * Every kind the registry can resolve. Broader than the catalog\n * `ModelKind` (llm/image/video/audio) because voices are a first-class\n * registry kind but not a priced model family. Derived from\n * `ResolvedModel` so it can never drift.\n */\nexport type CatalogKind = ResolvedModel[\"kind\"]\n\n// Voices resolve by canonical id (\"minimax-french-female-anchor\"), native\n// provider id (\"French_FemaleAnchor\"), or a consumer-overlay alias — index\n// all three so new slugs, native ids, and persisted operator rows all hit.\nconst VOICE_INDEX: Map<string, CatalogVoice> = new Map([\n ...VOICE_CATALOG.map(v => [v.providerVoiceId, v] as const),\n ...VOICE_CATALOG.map(v => [v.catalogId, v] as const),\n ...VOICE_CATALOG.flatMap((v: CatalogVoice) =>\n (v.aliases ?? []).map(a => [a, v] as const)\n ),\n])\n\n/**\n * Resolves a model id across every catalog.\n *\n * Lookup order: image → video → audio → LLM (last because LLM has the\n * partial-prefix fallback that can match other strings if probed first).\n *\n * Returns `undefined` for unknown ids — callers decide whether to throw\n * or fall back. LLM uses fallback pricing inside its own dispatcher\n * (preserves existing behavior at the orchestrator).\n */\nexport function getModel(id: string): ResolvedModel | undefined {\n // Consumer overlays first: resolve any overlay alias to a concrete id,\n // then let overlay entries override/extend the generated catalogs. The\n // returned `id` echoes what the caller asked for (alias-preserving), as\n // the legacy voice-alias path already did.\n const ov = getMergedOverlay()\n const key = followAlias(id, ov)\n\n if (ov.image[key]) return { kind: \"image\", id, def: ov.image[key]! }\n if (ov.video[key]) return { kind: \"video\", id, def: ov.video[key]! }\n if (ov.audio[key]) return { kind: \"audio\", id, def: ov.audio[key]! }\n const ovVoice = overlayVoice(ov, key)\n if (ovVoice) return { kind: \"voice\", id, voice: ovVoice }\n if (ov.llm[key]) {\n const pricing = ov.llm[key]!\n return { kind: \"llm\", id, canonicalId: key, pricing, provider: pricing.provider }\n }\n\n const imageDef = IMAGE_MODEL_CATALOG[key]\n if (imageDef) return { kind: \"image\", id, def: imageDef }\n\n const videoDef = VIDEO_MODEL_CATALOG[key]\n if (videoDef) return { kind: \"video\", id, def: videoDef }\n\n // Audio MODEL (priced TTS/STT) — checked before voice lookup so an\n // id that exists in both maps lands on the priced entry.\n const audioDef = AUDIO_MODEL_CATALOG[key]\n if (audioDef) return { kind: \"audio\", id, def: audioDef }\n\n const voice = VOICE_INDEX.get(key)\n if (voice) return { kind: \"voice\", id, voice }\n\n const llmPricing = resolvePricing(key)\n if (llmPricing) {\n const canonicalId = resolveLlmAlias(key)\n return { kind: \"llm\", id, canonicalId, pricing: llmPricing, provider: llmPricing.provider }\n }\n // Known id, no pricing row yet (see `LlmModelId`'s doc comment in\n // llm/catalog.ts) — still resolves, just unpriced. This is the case that\n // used to make a real, live, provider-published model (e.g. a brand-new\n // Anthropic release the day it ships, before the next pricing sync)\n // disappear from every downstream surface instead of showing up unpriced.\n if (isKnownLlmId(key)) {\n return { kind: \"llm\", id, canonicalId: key, pricing: undefined, provider: getModelProvider(key) }\n }\n\n return undefined\n}\n\n/**\n * Returns true iff the id is exposed to agents.\n *\n * - LLM: every entry in `LLM_PRICING_CATALOG` is considered visible\n * (legacy convention; refine in v2 with per-entry `agentVisible`).\n * - Image / Video: respects the `agentVisible` flag.\n * - Audio voices: all voices are visible (catalog itself is curated).\n */\nexport function isAgentVisible(id: string): boolean {\n const m = getModel(id)\n if (!m) return false\n switch (m.kind) {\n case \"image\":\n return m.def.agentVisible\n case \"video\":\n return m.def.agentVisible\n case \"audio\":\n return m.def.agentVisible\n case \"llm\":\n return (\n id in LLM_PRICING_CATALOG || resolveLlmAlias(id) in LLM_PRICING_CATALOG\n )\n case \"voice\":\n return true\n }\n}\n\nexport interface ListModelsFilter {\n kind?: CatalogKind\n /** Single provider (back-compat). Folded into `providers` internally. */\n provider?: string\n /** Provider OR-set — a model matches if its provider is any of these. */\n providers?: string[]\n /**\n * Capability tags a model must carry (ALL of them). Capabilities are\n * emitted as tags by enrichment — audio `tts`/`stt`/`s2s`, image\n * `edit`/`upscale`, video `i2v`/`t2v` — so this filters on the same\n * vocabulary `listModels({capabilities:[\"s2s\"]})` would expect.\n */\n capabilities?: string[]\n /** Arbitrary tags a model must carry (ALL of them). */\n tags?: string[]\n agentVisibleOnly?: boolean\n}\n\n/**\n * Cross-kind listing. Useful for catalog browsers and capability search.\n * Returns `ResolvedModel[]` (discriminated by kind).\n *\n * Provider is an OR-set (`providers` ∪ the singular `provider`); capability\n * and tag filters are AND-sets (a model must carry every listed value).\n * Composed: `listModels({ kind:\"audio\", capabilities:[\"s2s\"],\n * providers:[\"gemini-live\",\"openai-realtime\"] })` → all s2s models from\n * Gemini OR OpenAI.\n */\nexport function listModels(filter: ListModelsFilter = {}): ResolvedModel[] {\n const providerSet =\n filter.provider || filter.providers\n ? new Set([\n ...(filter.provider ? [filter.provider] : []),\n ...(filter.providers ?? []),\n ])\n : undefined\n const providerMatches = (provider: string | undefined): boolean =>\n !providerSet || (provider !== undefined && providerSet.has(provider))\n\n const ov = getMergedOverlay()\n const out: ResolvedModel[] = []\n // Overlay entries override core ones with the same id, so collect ids the\n // overlay has already supplied per kind and skip the core duplicate.\n const seen = { image: new Set<string>(), video: new Set<string>(), audio: new Set<string>(), voice: new Set<string>(), llm: new Set<string>() }\n\n if (!filter.kind || filter.kind === \"image\") {\n for (const [id, def] of Object.entries(ov.image)) {\n if (!providerMatches(def.provider)) continue\n if (filter.agentVisibleOnly && !def.agentVisible) continue\n seen.image.add(id)\n out.push({ kind: \"image\", id, def })\n }\n for (const [id, def] of Object.entries(IMAGE_MODEL_CATALOG)) {\n if (seen.image.has(id) || !providerMatches(def.provider)) continue\n if (filter.agentVisibleOnly && !def.agentVisible) continue\n out.push({ kind: \"image\", id, def })\n }\n }\n if (!filter.kind || filter.kind === \"video\") {\n for (const [id, def] of Object.entries(ov.video)) {\n if (!providerMatches(def.provider)) continue\n if (filter.agentVisibleOnly && !def.agentVisible) continue\n seen.video.add(id)\n out.push({ kind: \"video\", id, def })\n }\n for (const [id, def] of Object.entries(VIDEO_MODEL_CATALOG)) {\n if (seen.video.has(id) || !providerMatches(def.provider)) continue\n if (filter.agentVisibleOnly && !def.agentVisible) continue\n out.push({ kind: \"video\", id, def })\n }\n }\n if (!filter.kind || filter.kind === \"audio\") {\n for (const [id, def] of Object.entries(ov.audio)) {\n if (!providerMatches(def.provider)) continue\n if (filter.agentVisibleOnly && !def.agentVisible) continue\n seen.audio.add(id)\n out.push({ kind: \"audio\", id, def })\n }\n for (const [id, def] of Object.entries(AUDIO_MODEL_CATALOG)) {\n if (seen.audio.has(id) || !providerMatches(def.provider)) continue\n if (filter.agentVisibleOnly && !def.agentVisible) continue\n out.push({ kind: \"audio\", id, def })\n }\n }\n if (!filter.kind || filter.kind === \"voice\") {\n for (const v of ov.voice) {\n if (!providerMatches(v.provider)) continue\n seen.voice.add(v.catalogId)\n out.push({ kind: \"voice\", id: v.catalogId, voice: v })\n }\n for (const v of VOICE_CATALOG) {\n if (seen.voice.has(v.catalogId) || !providerMatches(v.provider)) continue\n out.push({ kind: \"voice\", id: v.catalogId, voice: v })\n }\n }\n if (!filter.kind || filter.kind === \"llm\") {\n for (const [id, pricing] of Object.entries(ov.llm)) {\n if (!providerMatches(pricing.provider)) continue\n seen.llm.add(id)\n out.push({ kind: \"llm\", id, canonicalId: id, pricing, provider: pricing.provider })\n }\n for (const [id, pricing] of Object.entries(LLM_PRICING_CATALOG)) {\n if (seen.llm.has(id) || !providerMatches(pricing.provider)) continue\n seen.llm.add(id)\n out.push({ kind: \"llm\", id, canonicalId: id, pricing, provider: pricing.provider })\n }\n // Known ids with no pricing row yet (see `LlmModelId`'s doc comment in\n // llm/catalog.ts) — surfaced unpriced rather than silently dropped.\n for (const { id, provider } of listUnpricedKnownLlmIds()) {\n if (seen.llm.has(id) || !providerMatches(provider)) continue\n out.push({ kind: \"llm\", id, canonicalId: id, pricing: undefined, provider })\n }\n }\n\n // Capability + tag filters are AND-sets, applied over the enrichment tag\n // vocabulary (capabilities are emitted as tags). Skipped entirely when\n // unset so the common path stays allocation-free.\n const required = [...(filter.capabilities ?? []), ...(filter.tags ?? [])]\n if (required.length === 0) return out\n return out.filter(model => required.every(tag => modelHasTag(model, tag)))\n}\n\n/**\n * Provider-centric view — every model a provider offers across all kinds\n * (llm / image / video / audio incl. tts/stt/s2s). This is the \"provider\n * catalog\" (openai, google, anthropic, replicate, openrouter, …): a\n * derived query over the kind-organized catalogs, NOT a parallel store.\n *\n * When `provider` names a router or a routed endpoint (openrouter, requesty,\n * huggingface, opencode, opencode-go), this also folds in that provider's\n * generated route table (`listRouterLlmRoutes`) — the provider's full\n * surface, not just what happens to be curated into `LLM_PRICING_CATALOG`.\n * The emitted id is whatever `formatModelRef` produces for the resolved ref:\n * `vendor/product@router` for the vendor-namespacing routers, and the bare\n * `opencode-go/glm-5.3` / `opencode/claude-sonnet-4-6` form for the two\n * OpenCode endpoints, whose route IS the id's leading segment (so there is no\n * `@route` to append). OpenRouter's routes are already spread into\n * `LLM_PRICING_CATALOG` (bare `vendor/product` ids, `llm/catalog.ts`), so its\n * router-table entries are deduped against the bare ids `listModels` already\n * returned; Requesty, HuggingFace and the two OpenCode endpoints have no such\n * overlap, so their route table entries are added in full. Deliberately NOT\n * achieved by spreading `REQUESTY_ROUTES`/`HUGGINGFACE_ROUTES`/\n * `OPENCODE_*_ROUTES` into `LLM_PRICING_CATALOG` itself — that catalog is the\n * legacy bare-id path, and a bare id must keep meaning direct-vendor pricing\n * (`route-identity/index.ts`).\n */\nexport function getModelsByProvider(provider: string): ResolvedModel[] {\n const models = listModels({ provider })\n const routerRoutes = listRouterLlmRoutes(provider)\n if (routerRoutes.length === 0) return models\n\n const existingIds = new Set(models.map(m => m.id))\n const routed: ResolvedModel[] = []\n for (const route of routerRoutes) {\n const bareId = `${route.vendor}/${route.product}`\n if (existingIds.has(bareId)) continue\n const id = formatModelRef(route.ref)\n routed.push({ kind: \"llm\", id, canonicalId: id, pricing: route.pricing, provider: route.pricing.provider })\n }\n return [...models, ...routed]\n}\n\n/**\n * Returns the platform a model's adapter is **statically pinned** to,\n * if known. ONLY meaningful for image / video / audio — those adapters\n * are constructed per-platform (Replicate adapter, MiniMax adapter…),\n * so the model's `def.provider` IS the runtime connector.\n *\n * For LLM, returns `undefined` — the runtime connector is determined\n * at call time by `pickLlmConnector(connectors, parseModelId(id).provider)`\n * against the guild's installed connectors, NOT by the model id alone.\n * The same `anthropic/claude-sonnet-4-5` can route through OpenRouter\n * OR direct Anthropic depending on which connectors the guild has\n * installed. Recording call sites MUST pass the actual `connectorUsed`\n * they invoked; do not infer from id.\n *\n * Use case: image/video workflow steps fetch `model.def.provider`\n * directly (no ambiguity). LLM call sites use the runtime resolver.\n */\nexport function getStaticModelProvider(\n model: ResolvedModel\n): string | undefined {\n switch (model.kind) {\n case \"image\":\n case \"video\":\n case \"audio\":\n return model.def.provider\n case \"voice\":\n return model.voice.provider\n case \"llm\":\n // Runtime routing — caller knows, we don't.\n return undefined\n }\n}\n\n/**\n * Resolves an id to its canonical catalog key across kinds. For ids that\n * have no alias, returns the id unchanged. Used by callers that want to\n * normalize before persisting (e.g., `byok_usage` rows).\n */\nexport function resolveAlias(id: string): string {\n const ov = getMergedOverlay()\n const key = followAlias(id, ov)\n if (ov.image[key] || ov.video[key] || ov.audio[key]) return key\n if (overlayVoice(ov, key)) return key\n if (ov.llm[key]) return key\n if (IMAGE_MODEL_CATALOG[key]) return key\n if (VIDEO_MODEL_CATALOG[key]) return key\n if (AUDIO_MODEL_CATALOG[key]) return key\n if (VOICE_INDEX.has(key)) return key\n return resolveLlmAlias(key)\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/registry/index.ts"],"names":["resolveAlias"],"mappings":";;;;;;;;;;;;;;;;AAsCA,SAAS,WAAA,CAAY,IAAY,EAAA,EAA2B;AAC1D,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,WAAS;AACP,IAAA,MAAM,IAAA,GAAO,EAAA,CAAG,OAAA,CAAQ,GAAG,CAAA;AAC3B,IAAA,IAAI,IAAA,KAAS,MAAA,IAAa,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AACzC,IAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AACZ,IAAA,GAAA,GAAM,IAAA;AAAA,EACR;AACA,EAAA,OAAO,GAAA;AACT;AAGA,SAAS,YAAA,CAAa,IAAmB,GAAA,EAAuC;AAC9E,EAAA,OAAO,GAAG,KAAA,CAAM,IAAA;AAAA,IACd,CAAA,CAAA,KACE,CAAA,CAAE,SAAA,KAAc,GAAA,IAChB,CAAA,CAAE,eAAA,KAAoB,GAAA,IAAA,CACrB,CAAA,CAAE,OAAA,IAAW,EAAC,EAAG,QAAA,CAAS,GAAG;AAAA,GAClC;AACF;AAuCA,IAAM,WAAA,GAAyC,IAAI,GAAA,CAAI;AAAA,EACrD,GAAG,cAAc,GAAA,CAAI,CAAA,CAAA,KAAK,CAAC,CAAA,CAAE,eAAA,EAAiB,CAAC,CAAU,CAAA;AAAA,EACzD,GAAG,cAAc,GAAA,CAAI,CAAA,CAAA,KAAK,CAAC,CAAA,CAAE,SAAA,EAAW,CAAC,CAAU,CAAA;AAAA,EACnD,GAAG,aAAA,CAAc,OAAA;AAAA,IAAQ,CAAC,CAAA,KAAA,CACvB,CAAA,CAAE,OAAA,IAAW,EAAC,EAAG,GAAA,CAAI,CAAA,CAAA,KAAK,CAAC,CAAA,EAAG,CAAC,CAAU;AAAA;AAE9C,CAAC,CAAA;AAYM,SAAS,SAAS,EAAA,EAAuC;AAK9D,EAAA,MAAM,KAAK,gBAAA,EAAiB;AAC5B,EAAA,MAAM,GAAA,GAAM,WAAA,CAAY,EAAA,EAAI,EAAE,CAAA;AAE9B,EAAA,IAAI,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA,EAAG,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,EAAA,EAAI,GAAA,EAAK,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA,EAAG;AACnE,EAAA,IAAI,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA,EAAG,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,EAAA,EAAI,GAAA,EAAK,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA,EAAG;AACnE,EAAA,IAAI,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA,EAAG,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,EAAA,EAAI,GAAA,EAAK,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA,EAAG;AACnE,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,EAAA,EAAI,GAAG,CAAA;AACpC,EAAA,IAAI,SAAS,OAAO,EAAE,MAAM,OAAA,EAAS,EAAA,EAAI,OAAO,OAAA,EAAQ;AACxD,EAAA,IAAI,EAAA,CAAG,GAAA,CAAI,GAAG,CAAA,EAAG;AACf,IAAA,MAAM,OAAA,GAAU,EAAA,CAAG,GAAA,CAAI,GAAG,CAAA;AAC1B,IAAA,OAAO,EAAE,MAAM,KAAA,EAAO,EAAA,EAAI,aAAa,GAAA,EAAK,OAAA,EAAS,QAAA,EAAU,OAAA,CAAQ,QAAA,EAAS;AAAA,EAClF;AAEA,EAAA,MAAM,QAAA,GAAW,oBAAoB,GAAG,CAAA;AACxC,EAAA,IAAI,UAAU,OAAO,EAAE,MAAM,OAAA,EAAS,EAAA,EAAI,KAAK,QAAA,EAAS;AAExD,EAAA,MAAM,QAAA,GAAW,oBAAoB,GAAG,CAAA;AACxC,EAAA,IAAI,UAAU,OAAO,EAAE,MAAM,OAAA,EAAS,EAAA,EAAI,KAAK,QAAA,EAAS;AAIxD,EAAA,MAAM,QAAA,GAAW,oBAAoB,GAAG,CAAA;AACxC,EAAA,IAAI,UAAU,OAAO,EAAE,MAAM,OAAA,EAAS,EAAA,EAAI,KAAK,QAAA,EAAS;AAExD,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,GAAA,CAAI,GAAG,CAAA;AACjC,EAAA,IAAI,OAAO,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,IAAI,KAAA,EAAM;AAE7C,EAAA,MAAM,UAAA,GAAa,eAAe,GAAG,CAAA;AACrC,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAM,WAAA,GAAc,aAAgB,GAAG,CAAA;AACvC,IAAA,OAAO,EAAE,MAAM,KAAA,EAAO,EAAA,EAAI,aAAa,OAAA,EAAS,UAAA,EAAY,QAAA,EAAU,UAAA,CAAW,QAAA,EAAS;AAAA,EAC5F;AAMA,EAAA,IAAI,YAAA,CAAa,GAAG,CAAA,EAAG;AACrB,IAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,EAAA,EAAI,WAAA,EAAa,GAAA,EAAK,OAAA,EAAS,MAAA,EAAW,QAAA,EAAU,gBAAA,CAAiB,GAAG,CAAA,EAAE;AAAA,EAClG;AAEA,EAAA,OAAO,MAAA;AACT;AAUO,SAAS,eAAe,EAAA,EAAqB;AAClD,EAAA,MAAM,CAAA,GAAI,SAAS,EAAE,CAAA;AACrB,EAAA,IAAI,CAAC,GAAG,OAAO,KAAA;AACf,EAAA,QAAQ,EAAE,IAAA;AAAM,IACd,KAAK,OAAA;AACH,MAAA,OAAO,EAAE,GAAA,CAAI,YAAA;AAAA,IACf,KAAK,OAAA;AACH,MAAA,OAAO,EAAE,GAAA,CAAI,YAAA;AAAA,IACf,KAAK,OAAA;AACH,MAAA,OAAO,EAAE,GAAA,CAAI,YAAA;AAAA,IACf,KAAK,KAAA;AACH,MAAA,OACE,EAAA,IAAM,mBAAA,IAAuB,YAAA,CAAgB,EAAE,CAAA,IAAK,mBAAA;AAAA,IAExD,KAAK,OAAA;AACH,MAAA,OAAO,IAAA;AAAA;AAEb;AA8BO,SAAS,UAAA,CAAW,MAAA,GAA2B,EAAC,EAAoB;AACzE,EAAA,MAAM,cACJ,MAAA,CAAO,QAAA,IAAY,MAAA,CAAO,SAAA,uBAClB,GAAA,CAAI;AAAA,IACN,GAAI,MAAA,CAAO,QAAA,GAAW,CAAC,MAAA,CAAO,QAAQ,IAAI,EAAC;AAAA,IAC3C,GAAI,MAAA,CAAO,SAAA,IAAa;AAAC,GAC1B,CAAA,GACD,MAAA;AACN,EAAA,MAAM,eAAA,GAAkB,CAAC,QAAA,KACvB,CAAC,eAAgB,QAAA,KAAa,MAAA,IAAa,WAAA,CAAY,GAAA,CAAI,QAAQ,CAAA;AAErE,EAAA,MAAM,KAAK,gBAAA,EAAiB;AAC5B,EAAA,MAAM,MAAuB,EAAC;AAG9B,EAAA,MAAM,IAAA,GAAO,EAAE,KAAA,kBAAO,IAAI,KAAY,EAAG,KAAA,sBAAW,GAAA,EAAY,EAAG,uBAAO,IAAI,GAAA,IAAe,KAAA,kBAAO,IAAI,KAAY,EAAG,GAAA,kBAAK,IAAI,GAAA,EAAY,EAAE;AAE9I,EAAA,IAAI,CAAC,MAAA,CAAO,IAAA,IAAQ,MAAA,CAAO,SAAS,OAAA,EAAS;AAC3C,IAAA,KAAA,MAAW,CAAC,IAAI,GAAG,CAAA,IAAK,OAAO,OAAA,CAAQ,EAAA,CAAG,KAAK,CAAA,EAAG;AAChD,MAAA,IAAI,CAAC,eAAA,CAAgB,GAAA,CAAI,QAAQ,CAAA,EAAG;AACpC,MAAA,IAAI,MAAA,CAAO,gBAAA,IAAoB,CAAC,GAAA,CAAI,YAAA,EAAc;AAClD,MAAA,IAAA,CAAK,KAAA,CAAM,IAAI,EAAE,CAAA;AACjB,MAAA,GAAA,CAAI,KAAK,EAAE,IAAA,EAAM,OAAA,EAAS,EAAA,EAAI,KAAK,CAAA;AAAA,IACrC;AACA,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,GAAG,KAAK,MAAA,CAAO,OAAA,CAAQ,mBAAmB,CAAA,EAAG;AAC3D,MAAA,IAAI,IAAA,CAAK,MAAM,GAAA,CAAI,EAAE,KAAK,CAAC,eAAA,CAAgB,GAAA,CAAI,QAAQ,CAAA,EAAG;AAC1D,MAAA,IAAI,MAAA,CAAO,gBAAA,IAAoB,CAAC,GAAA,CAAI,YAAA,EAAc;AAClD,MAAA,GAAA,CAAI,KAAK,EAAE,IAAA,EAAM,OAAA,EAAS,EAAA,EAAI,KAAK,CAAA;AAAA,IACrC;AAAA,EACF;AACA,EAAA,IAAI,CAAC,MAAA,CAAO,IAAA,IAAQ,MAAA,CAAO,SAAS,OAAA,EAAS;AAC3C,IAAA,KAAA,MAAW,CAAC,IAAI,GAAG,CAAA,IAAK,OAAO,OAAA,CAAQ,EAAA,CAAG,KAAK,CAAA,EAAG;AAChD,MAAA,IAAI,CAAC,eAAA,CAAgB,GAAA,CAAI,QAAQ,CAAA,EAAG;AACpC,MAAA,IAAI,MAAA,CAAO,gBAAA,IAAoB,CAAC,GAAA,CAAI,YAAA,EAAc;AAClD,MAAA,IAAA,CAAK,KAAA,CAAM,IAAI,EAAE,CAAA;AACjB,MAAA,GAAA,CAAI,KAAK,EAAE,IAAA,EAAM,OAAA,EAAS,EAAA,EAAI,KAAK,CAAA;AAAA,IACrC;AACA,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,GAAG,KAAK,MAAA,CAAO,OAAA,CAAQ,mBAAmB,CAAA,EAAG;AAC3D,MAAA,IAAI,IAAA,CAAK,MAAM,GAAA,CAAI,EAAE,KAAK,CAAC,eAAA,CAAgB,GAAA,CAAI,QAAQ,CAAA,EAAG;AAC1D,MAAA,IAAI,MAAA,CAAO,gBAAA,IAAoB,CAAC,GAAA,CAAI,YAAA,EAAc;AAClD,MAAA,GAAA,CAAI,KAAK,EAAE,IAAA,EAAM,OAAA,EAAS,EAAA,EAAI,KAAK,CAAA;AAAA,IACrC;AAAA,EACF;AACA,EAAA,IAAI,CAAC,MAAA,CAAO,IAAA,IAAQ,MAAA,CAAO,SAAS,OAAA,EAAS;AAC3C,IAAA,KAAA,MAAW,CAAC,IAAI,GAAG,CAAA,IAAK,OAAO,OAAA,CAAQ,EAAA,CAAG,KAAK,CAAA,EAAG;AAChD,MAAA,IAAI,CAAC,eAAA,CAAgB,GAAA,CAAI,QAAQ,CAAA,EAAG;AACpC,MAAA,IAAI,MAAA,CAAO,gBAAA,IAAoB,CAAC,GAAA,CAAI,YAAA,EAAc;AAClD,MAAA,IAAA,CAAK,KAAA,CAAM,IAAI,EAAE,CAAA;AACjB,MAAA,GAAA,CAAI,KAAK,EAAE,IAAA,EAAM,OAAA,EAAS,EAAA,EAAI,KAAK,CAAA;AAAA,IACrC;AACA,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,GAAG,KAAK,MAAA,CAAO,OAAA,CAAQ,mBAAmB,CAAA,EAAG;AAC3D,MAAA,IAAI,IAAA,CAAK,MAAM,GAAA,CAAI,EAAE,KAAK,CAAC,eAAA,CAAgB,GAAA,CAAI,QAAQ,CAAA,EAAG;AAC1D,MAAA,IAAI,MAAA,CAAO,gBAAA,IAAoB,CAAC,GAAA,CAAI,YAAA,EAAc;AAClD,MAAA,GAAA,CAAI,KAAK,EAAE,IAAA,EAAM,OAAA,EAAS,EAAA,EAAI,KAAK,CAAA;AAAA,IACrC;AAAA,EACF;AACA,EAAA,IAAI,CAAC,MAAA,CAAO,IAAA,IAAQ,MAAA,CAAO,SAAS,OAAA,EAAS;AAC3C,IAAA,KAAA,MAAW,CAAA,IAAK,GAAG,KAAA,EAAO;AACxB,MAAA,IAAI,CAAC,eAAA,CAAgB,CAAA,CAAE,QAAQ,CAAA,EAAG;AAClC,MAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,SAAS,CAAA;AAC1B,MAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,OAAA,EAAS,IAAI,CAAA,CAAE,SAAA,EAAW,KAAA,EAAO,CAAA,EAAG,CAAA;AAAA,IACvD;AACA,IAAA,KAAA,MAAW,KAAK,aAAA,EAAe;AAC7B,MAAA,IAAI,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,SAAS,KAAK,CAAC,eAAA,CAAgB,CAAA,CAAE,QAAQ,CAAA,EAAG;AACjE,MAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,OAAA,EAAS,IAAI,CAAA,CAAE,SAAA,EAAW,KAAA,EAAO,CAAA,EAAG,CAAA;AAAA,IACvD;AAAA,EACF;AACA,EAAA,IAAI,CAAC,MAAA,CAAO,IAAA,IAAQ,MAAA,CAAO,SAAS,KAAA,EAAO;AACzC,IAAA,KAAA,MAAW,CAAC,IAAI,OAAO,CAAA,IAAK,OAAO,OAAA,CAAQ,EAAA,CAAG,GAAG,CAAA,EAAG;AAClD,MAAA,IAAI,CAAC,eAAA,CAAgB,OAAA,CAAQ,QAAQ,CAAA,EAAG;AACxC,MAAA,IAAA,CAAK,GAAA,CAAI,IAAI,EAAE,CAAA;AACf,MAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,EAAO,EAAA,EAAI,WAAA,EAAa,EAAA,EAAI,OAAA,EAAS,QAAA,EAAU,OAAA,CAAQ,QAAA,EAAU,CAAA;AAAA,IACpF;AACA,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,OAAO,KAAK,MAAA,CAAO,OAAA,CAAQ,mBAAmB,CAAA,EAAG;AAC/D,MAAA,IAAI,IAAA,CAAK,IAAI,GAAA,CAAI,EAAE,KAAK,CAAC,eAAA,CAAgB,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC5D,MAAA,IAAA,CAAK,GAAA,CAAI,IAAI,EAAE,CAAA;AACf,MAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,EAAO,EAAA,EAAI,WAAA,EAAa,EAAA,EAAI,OAAA,EAAS,QAAA,EAAU,OAAA,CAAQ,QAAA,EAAU,CAAA;AAAA,IACpF;AAGA,IAAA,KAAA,MAAW,EAAE,EAAA,EAAI,QAAA,EAAS,IAAK,yBAAwB,EAAG;AACxD,MAAA,IAAI,IAAA,CAAK,IAAI,GAAA,CAAI,EAAE,KAAK,CAAC,eAAA,CAAgB,QAAQ,CAAA,EAAG;AACpD,MAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,EAAO,EAAA,EAAI,aAAa,EAAA,EAAI,OAAA,EAAS,MAAA,EAAW,QAAA,EAAU,CAAA;AAAA,IAC7E;AAAA,EACF;AAKA,EAAA,MAAM,QAAA,GAAW,CAAC,GAAI,MAAA,CAAO,YAAA,IAAgB,EAAC,EAAI,GAAI,MAAA,CAAO,IAAA,IAAQ,EAAG,CAAA;AACxE,EAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG,OAAO,GAAA;AAClC,EAAA,OAAO,GAAA,CAAI,MAAA,CAAO,CAAA,KAAA,KAAS,QAAA,CAAS,KAAA,CAAM,SAAO,WAAA,CAAY,KAAA,EAAO,GAAG,CAAC,CAAC,CAAA;AAC3E;AA0BO,SAAS,oBAAoB,QAAA,EAAmC;AACrE,EAAA,MAAM,MAAA,GAAS,UAAA,CAAW,EAAE,QAAA,EAAU,CAAA;AACtC,EAAA,MAAM,YAAA,GAAe,oBAAoB,QAAQ,CAAA;AACjD,EAAA,IAAI,YAAA,CAAa,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AAEtC,EAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA,CAAA,KAAK,CAAA,CAAE,EAAE,CAAC,CAAA;AACjD,EAAA,MAAM,SAA0B,EAAC;AACjC,EAAA,KAAA,MAAW,SAAS,YAAA,EAAc;AAChC,IAAA,MAAM,SAAS,CAAA,EAAG,KAAA,CAAM,MAAM,CAAA,CAAA,EAAI,MAAM,OAAO,CAAA,CAAA;AAC/C,IAAA,IAAI,WAAA,CAAY,GAAA,CAAI,MAAM,CAAA,EAAG;AAC7B,IAAA,MAAM,EAAA,GAAK,cAAA,CAAe,KAAA,CAAM,GAAG,CAAA;AACnC,IAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,EAAO,IAAI,WAAA,EAAa,EAAA,EAAI,OAAA,EAAS,KAAA,CAAM,OAAA,EAAS,QAAA,EAAU,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA;AAAA,EAC5G;AACA,EAAA,OAAO,CAAC,GAAG,MAAA,EAAQ,GAAG,MAAM,CAAA;AAC9B;AAmBO,SAAS,uBACd,KAAA,EACoB;AACpB,EAAA,QAAQ,MAAM,IAAA;AAAM,IAClB,KAAK,OAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,OAAA;AACH,MAAA,OAAO,MAAM,GAAA,CAAI,QAAA;AAAA,IACnB,KAAK,OAAA;AACH,MAAA,OAAO,MAAM,KAAA,CAAM,QAAA;AAAA,IACrB,KAAK,KAAA;AAEH,MAAA,OAAO,MAAA;AAAA;AAEb;AAOO,SAASA,cAAa,EAAA,EAAoB;AAC/C,EAAA,MAAM,KAAK,gBAAA,EAAiB;AAC5B,EAAA,MAAM,GAAA,GAAM,WAAA,CAAY,EAAA,EAAI,EAAE,CAAA;AAC9B,EAAA,IAAI,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA,IAAK,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA,IAAK,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA,EAAG,OAAO,GAAA;AAC5D,EAAA,IAAI,YAAA,CAAa,EAAA,EAAI,GAAG,CAAA,EAAG,OAAO,GAAA;AAClC,EAAA,IAAI,EAAA,CAAG,GAAA,CAAI,GAAG,CAAA,EAAG,OAAO,GAAA;AACxB,EAAA,IAAI,mBAAA,CAAoB,GAAG,CAAA,EAAG,OAAO,GAAA;AACrC,EAAA,IAAI,mBAAA,CAAoB,GAAG,CAAA,EAAG,OAAO,GAAA;AACrC,EAAA,IAAI,mBAAA,CAAoB,GAAG,CAAA,EAAG,OAAO,GAAA;AACrC,EAAA,IAAI,WAAA,CAAY,GAAA,CAAI,GAAG,CAAA,EAAG,OAAO,GAAA;AACjC,EAAA,OAAO,aAAgB,GAAG,CAAA;AAC5B","file":"chunk-2P2R2XLK.mjs","sourcesContent":["/**\n * Cross-kind registry. Resolves a model id against every catalog (LLM,\n * image, video, audio) and returns a discriminated `ResolvedModel`.\n *\n * v1 returns the legacy per-kind data shapes verbatim — image/video keep\n * `*ModelDefinition`, LLM keeps `LLMPricing`, audio surfaces voices.\n * Callers (cost dispatcher, access evaluator) match on `.kind` and dig\n * into the per-kind payload as needed.\n */\n\nimport {\n LLM_PRICING_CATALOG,\n resolveAlias as resolveLlmAlias,\n resolvePricing,\n isKnownLlmId,\n listUnpricedKnownLlmIds,\n getModelProvider,\n type LLMPricing,\n} from \"../llm/index.js\"\nimport {\n IMAGE_MODEL_CATALOG,\n type ImageModelDefinition,\n} from \"../image/index.js\"\nimport {\n VIDEO_MODEL_CATALOG,\n type VideoModelDefinition,\n} from \"../video/index.js\"\nimport {\n AUDIO_MODEL_CATALOG,\n type AudioModelDefinition,\n} from \"../audio/index.js\"\nimport { VOICE_CATALOG, type CatalogVoice } from \"../voice/index.js\"\nimport { modelHasTag } from \"../enrichment/index.js\"\nimport { getMergedOverlay, type MergedOverlay } from \"../overlay/index.js\"\nimport { listRouterLlmRoutes, formatModelRef } from \"../route-identity/index.js\"\n\n/** Follow consumer-overlay alias hops to a concrete id (cycle-guarded).\n * Ids with no overlay alias pass through unchanged. */\nfunction followAlias(id: string, ov: MergedOverlay): string {\n let cur = id\n const seen = new Set<string>()\n for (;;) {\n const next = ov.aliases[cur]\n if (next === undefined || seen.has(cur)) break\n seen.add(cur)\n cur = next\n }\n return cur\n}\n\n/** Find an overlay voice by catalogId / providerVoiceId / alias. */\nfunction overlayVoice(ov: MergedOverlay, key: string): CatalogVoice | undefined {\n return ov.voice.find(\n v =>\n v.catalogId === key ||\n v.providerVoiceId === key ||\n (v.aliases ?? []).includes(key),\n )\n}\n\n/**\n * `audio` resolves to either an audio MODEL (priced TTS/STT) or a\n * voice (downstream metadata). Most call sites care about the model\n * (pricing, capabilities); a few (voice pickers) want the voice. They\n * share the resolver but discriminate on the inner payload.\n */\nexport type ResolvedModel =\n | {\n kind: \"llm\"\n id: string\n canonicalId: string\n /** Undefined for a real, known id with no pricing row yet — existence\n * and pricing are independent, see `LlmModelId`'s doc comment in\n * `llm/catalog.ts`. Every reader MUST handle the absent case; never\n * assume a `kind: \"llm\"` result is priced. */\n pricing: LLMPricing | undefined\n /** Best-effort provider even when `pricing` is absent (falls back to\n * `CONTEXT_WINDOWS`'s own provider field — see `getModelProvider`).\n * Prefer this over `pricing?.provider` when you only need routing. */\n provider: string | undefined\n }\n | { kind: \"image\"; id: string; def: ImageModelDefinition }\n | { kind: \"video\"; id: string; def: VideoModelDefinition }\n | { kind: \"audio\"; id: string; def: AudioModelDefinition }\n | { kind: \"voice\"; id: string; voice: CatalogVoice }\n\n/**\n * Every kind the registry can resolve. Broader than the catalog\n * `ModelKind` (llm/image/video/audio) because voices are a first-class\n * registry kind but not a priced model family. Derived from\n * `ResolvedModel` so it can never drift.\n */\nexport type CatalogKind = ResolvedModel[\"kind\"]\n\n// Voices resolve by canonical id (\"minimax-french-female-anchor\"), native\n// provider id (\"French_FemaleAnchor\"), or a consumer-overlay alias — index\n// all three so new slugs, native ids, and persisted operator rows all hit.\nconst VOICE_INDEX: Map<string, CatalogVoice> = new Map([\n ...VOICE_CATALOG.map(v => [v.providerVoiceId, v] as const),\n ...VOICE_CATALOG.map(v => [v.catalogId, v] as const),\n ...VOICE_CATALOG.flatMap((v: CatalogVoice) =>\n (v.aliases ?? []).map(a => [a, v] as const)\n ),\n])\n\n/**\n * Resolves a model id across every catalog.\n *\n * Lookup order: image → video → audio → LLM (last because LLM has the\n * partial-prefix fallback that can match other strings if probed first).\n *\n * Returns `undefined` for unknown ids — callers decide whether to throw\n * or fall back. LLM uses fallback pricing inside its own dispatcher\n * (preserves existing behavior at the orchestrator).\n */\nexport function getModel(id: string): ResolvedModel | undefined {\n // Consumer overlays first: resolve any overlay alias to a concrete id,\n // then let overlay entries override/extend the generated catalogs. The\n // returned `id` echoes what the caller asked for (alias-preserving), as\n // the legacy voice-alias path already did.\n const ov = getMergedOverlay()\n const key = followAlias(id, ov)\n\n if (ov.image[key]) return { kind: \"image\", id, def: ov.image[key]! }\n if (ov.video[key]) return { kind: \"video\", id, def: ov.video[key]! }\n if (ov.audio[key]) return { kind: \"audio\", id, def: ov.audio[key]! }\n const ovVoice = overlayVoice(ov, key)\n if (ovVoice) return { kind: \"voice\", id, voice: ovVoice }\n if (ov.llm[key]) {\n const pricing = ov.llm[key]!\n return { kind: \"llm\", id, canonicalId: key, pricing, provider: pricing.provider }\n }\n\n const imageDef = IMAGE_MODEL_CATALOG[key]\n if (imageDef) return { kind: \"image\", id, def: imageDef }\n\n const videoDef = VIDEO_MODEL_CATALOG[key]\n if (videoDef) return { kind: \"video\", id, def: videoDef }\n\n // Audio MODEL (priced TTS/STT) — checked before voice lookup so an\n // id that exists in both maps lands on the priced entry.\n const audioDef = AUDIO_MODEL_CATALOG[key]\n if (audioDef) return { kind: \"audio\", id, def: audioDef }\n\n const voice = VOICE_INDEX.get(key)\n if (voice) return { kind: \"voice\", id, voice }\n\n const llmPricing = resolvePricing(key)\n if (llmPricing) {\n const canonicalId = resolveLlmAlias(key)\n return { kind: \"llm\", id, canonicalId, pricing: llmPricing, provider: llmPricing.provider }\n }\n // Known id, no pricing row yet (see `LlmModelId`'s doc comment in\n // llm/catalog.ts) — still resolves, just unpriced. This is the case that\n // used to make a real, live, provider-published model (e.g. a brand-new\n // Anthropic release the day it ships, before the next pricing sync)\n // disappear from every downstream surface instead of showing up unpriced.\n if (isKnownLlmId(key)) {\n return { kind: \"llm\", id, canonicalId: key, pricing: undefined, provider: getModelProvider(key) }\n }\n\n return undefined\n}\n\n/**\n * Returns true iff the id is exposed to agents.\n *\n * - LLM: every entry in `LLM_PRICING_CATALOG` is considered visible\n * (legacy convention; refine in v2 with per-entry `agentVisible`).\n * - Image / Video: respects the `agentVisible` flag.\n * - Audio voices: all voices are visible (catalog itself is curated).\n */\nexport function isAgentVisible(id: string): boolean {\n const m = getModel(id)\n if (!m) return false\n switch (m.kind) {\n case \"image\":\n return m.def.agentVisible\n case \"video\":\n return m.def.agentVisible\n case \"audio\":\n return m.def.agentVisible\n case \"llm\":\n return (\n id in LLM_PRICING_CATALOG || resolveLlmAlias(id) in LLM_PRICING_CATALOG\n )\n case \"voice\":\n return true\n }\n}\n\nexport interface ListModelsFilter {\n kind?: CatalogKind\n /** Single provider (back-compat). Folded into `providers` internally. */\n provider?: string\n /** Provider OR-set — a model matches if its provider is any of these. */\n providers?: string[]\n /**\n * Capability tags a model must carry (ALL of them). Capabilities are\n * emitted as tags by enrichment — audio `tts`/`stt`/`s2s`, image\n * `edit`/`upscale`, video `i2v`/`t2v` — so this filters on the same\n * vocabulary `listModels({capabilities:[\"s2s\"]})` would expect.\n */\n capabilities?: string[]\n /** Arbitrary tags a model must carry (ALL of them). */\n tags?: string[]\n agentVisibleOnly?: boolean\n}\n\n/**\n * Cross-kind listing. Useful for catalog browsers and capability search.\n * Returns `ResolvedModel[]` (discriminated by kind).\n *\n * Provider is an OR-set (`providers` ∪ the singular `provider`); capability\n * and tag filters are AND-sets (a model must carry every listed value).\n * Composed: `listModels({ kind:\"audio\", capabilities:[\"s2s\"],\n * providers:[\"gemini-live\",\"openai-realtime\"] })` → all s2s models from\n * Gemini OR OpenAI.\n */\nexport function listModels(filter: ListModelsFilter = {}): ResolvedModel[] {\n const providerSet =\n filter.provider || filter.providers\n ? new Set([\n ...(filter.provider ? [filter.provider] : []),\n ...(filter.providers ?? []),\n ])\n : undefined\n const providerMatches = (provider: string | undefined): boolean =>\n !providerSet || (provider !== undefined && providerSet.has(provider))\n\n const ov = getMergedOverlay()\n const out: ResolvedModel[] = []\n // Overlay entries override core ones with the same id, so collect ids the\n // overlay has already supplied per kind and skip the core duplicate.\n const seen = { image: new Set<string>(), video: new Set<string>(), audio: new Set<string>(), voice: new Set<string>(), llm: new Set<string>() }\n\n if (!filter.kind || filter.kind === \"image\") {\n for (const [id, def] of Object.entries(ov.image)) {\n if (!providerMatches(def.provider)) continue\n if (filter.agentVisibleOnly && !def.agentVisible) continue\n seen.image.add(id)\n out.push({ kind: \"image\", id, def })\n }\n for (const [id, def] of Object.entries(IMAGE_MODEL_CATALOG)) {\n if (seen.image.has(id) || !providerMatches(def.provider)) continue\n if (filter.agentVisibleOnly && !def.agentVisible) continue\n out.push({ kind: \"image\", id, def })\n }\n }\n if (!filter.kind || filter.kind === \"video\") {\n for (const [id, def] of Object.entries(ov.video)) {\n if (!providerMatches(def.provider)) continue\n if (filter.agentVisibleOnly && !def.agentVisible) continue\n seen.video.add(id)\n out.push({ kind: \"video\", id, def })\n }\n for (const [id, def] of Object.entries(VIDEO_MODEL_CATALOG)) {\n if (seen.video.has(id) || !providerMatches(def.provider)) continue\n if (filter.agentVisibleOnly && !def.agentVisible) continue\n out.push({ kind: \"video\", id, def })\n }\n }\n if (!filter.kind || filter.kind === \"audio\") {\n for (const [id, def] of Object.entries(ov.audio)) {\n if (!providerMatches(def.provider)) continue\n if (filter.agentVisibleOnly && !def.agentVisible) continue\n seen.audio.add(id)\n out.push({ kind: \"audio\", id, def })\n }\n for (const [id, def] of Object.entries(AUDIO_MODEL_CATALOG)) {\n if (seen.audio.has(id) || !providerMatches(def.provider)) continue\n if (filter.agentVisibleOnly && !def.agentVisible) continue\n out.push({ kind: \"audio\", id, def })\n }\n }\n if (!filter.kind || filter.kind === \"voice\") {\n for (const v of ov.voice) {\n if (!providerMatches(v.provider)) continue\n seen.voice.add(v.catalogId)\n out.push({ kind: \"voice\", id: v.catalogId, voice: v })\n }\n for (const v of VOICE_CATALOG) {\n if (seen.voice.has(v.catalogId) || !providerMatches(v.provider)) continue\n out.push({ kind: \"voice\", id: v.catalogId, voice: v })\n }\n }\n if (!filter.kind || filter.kind === \"llm\") {\n for (const [id, pricing] of Object.entries(ov.llm)) {\n if (!providerMatches(pricing.provider)) continue\n seen.llm.add(id)\n out.push({ kind: \"llm\", id, canonicalId: id, pricing, provider: pricing.provider })\n }\n for (const [id, pricing] of Object.entries(LLM_PRICING_CATALOG)) {\n if (seen.llm.has(id) || !providerMatches(pricing.provider)) continue\n seen.llm.add(id)\n out.push({ kind: \"llm\", id, canonicalId: id, pricing, provider: pricing.provider })\n }\n // Known ids with no pricing row yet (see `LlmModelId`'s doc comment in\n // llm/catalog.ts) — surfaced unpriced rather than silently dropped.\n for (const { id, provider } of listUnpricedKnownLlmIds()) {\n if (seen.llm.has(id) || !providerMatches(provider)) continue\n out.push({ kind: \"llm\", id, canonicalId: id, pricing: undefined, provider })\n }\n }\n\n // Capability + tag filters are AND-sets, applied over the enrichment tag\n // vocabulary (capabilities are emitted as tags). Skipped entirely when\n // unset so the common path stays allocation-free.\n const required = [...(filter.capabilities ?? []), ...(filter.tags ?? [])]\n if (required.length === 0) return out\n return out.filter(model => required.every(tag => modelHasTag(model, tag)))\n}\n\n/**\n * Provider-centric view — every model a provider offers across all kinds\n * (llm / image / video / audio incl. tts/stt/s2s). This is the \"provider\n * catalog\" (openai, google, anthropic, replicate, openrouter, …): a\n * derived query over the kind-organized catalogs, NOT a parallel store.\n *\n * When `provider` names a router or a routed endpoint (openrouter, requesty,\n * huggingface, opencode, opencode-go), this also folds in that provider's\n * generated route table (`listRouterLlmRoutes`) — the provider's full\n * surface, not just what happens to be curated into `LLM_PRICING_CATALOG`.\n * The emitted id is whatever `formatModelRef` produces for the resolved ref:\n * `vendor/product@router` for the vendor-namespacing routers, and the bare\n * `opencode-go/glm-5.3` / `opencode/claude-sonnet-4-6` form for the two\n * OpenCode endpoints, whose route IS the id's leading segment (so there is no\n * `@route` to append). OpenRouter's routes are already spread into\n * `LLM_PRICING_CATALOG` (bare `vendor/product` ids, `llm/catalog.ts`), so its\n * router-table entries are deduped against the bare ids `listModels` already\n * returned; Requesty, HuggingFace and the two OpenCode endpoints have no such\n * overlap, so their route table entries are added in full. Deliberately NOT\n * achieved by spreading `REQUESTY_ROUTES`/`HUGGINGFACE_ROUTES`/\n * `OPENCODE_*_ROUTES` into `LLM_PRICING_CATALOG` itself — that catalog is the\n * legacy bare-id path, and a bare id must keep meaning direct-vendor pricing\n * (`route-identity/index.ts`).\n */\nexport function getModelsByProvider(provider: string): ResolvedModel[] {\n const models = listModels({ provider })\n const routerRoutes = listRouterLlmRoutes(provider)\n if (routerRoutes.length === 0) return models\n\n const existingIds = new Set(models.map(m => m.id))\n const routed: ResolvedModel[] = []\n for (const route of routerRoutes) {\n const bareId = `${route.vendor}/${route.product}`\n if (existingIds.has(bareId)) continue\n const id = formatModelRef(route.ref)\n routed.push({ kind: \"llm\", id, canonicalId: id, pricing: route.pricing, provider: route.pricing.provider })\n }\n return [...models, ...routed]\n}\n\n/**\n * Returns the platform a model's adapter is **statically pinned** to,\n * if known. ONLY meaningful for image / video / audio — those adapters\n * are constructed per-platform (Replicate adapter, MiniMax adapter…),\n * so the model's `def.provider` IS the runtime connector.\n *\n * For LLM, returns `undefined` — the runtime connector is determined\n * at call time by `pickLlmConnector(connectors, parseModelId(id).provider)`\n * against the guild's installed connectors, NOT by the model id alone.\n * The same `anthropic/claude-sonnet-4-5` can route through OpenRouter\n * OR direct Anthropic depending on which connectors the guild has\n * installed. Recording call sites MUST pass the actual `connectorUsed`\n * they invoked; do not infer from id.\n *\n * Use case: image/video workflow steps fetch `model.def.provider`\n * directly (no ambiguity). LLM call sites use the runtime resolver.\n */\nexport function getStaticModelProvider(\n model: ResolvedModel\n): string | undefined {\n switch (model.kind) {\n case \"image\":\n case \"video\":\n case \"audio\":\n return model.def.provider\n case \"voice\":\n return model.voice.provider\n case \"llm\":\n // Runtime routing — caller knows, we don't.\n return undefined\n }\n}\n\n/**\n * Resolves an id to its canonical catalog key across kinds. For ids that\n * have no alias, returns the id unchanged. Used by callers that want to\n * normalize before persisting (e.g., `byok_usage` rows).\n */\nexport function resolveAlias(id: string): string {\n const ov = getMergedOverlay()\n const key = followAlias(id, ov)\n if (ov.image[key] || ov.video[key] || ov.audio[key]) return key\n if (overlayVoice(ov, key)) return key\n if (ov.llm[key]) return key\n if (IMAGE_MODEL_CATALOG[key]) return key\n if (VIDEO_MODEL_CATALOG[key]) return key\n if (AUDIO_MODEL_CATALOG[key]) return key\n if (VOICE_INDEX.has(key)) return key\n return resolveLlmAlias(key)\n}\n"]}
|
|
@@ -479,8 +479,8 @@ var OPENROUTER_ROUTES = {
|
|
|
479
479
|
provider: "openrouter"
|
|
480
480
|
},
|
|
481
481
|
"deepseek/deepseek-chat": {
|
|
482
|
-
inputPer1M: 0.
|
|
483
|
-
outputPer1M:
|
|
482
|
+
inputPer1M: 0.2574,
|
|
483
|
+
outputPer1M: 1.0287,
|
|
484
484
|
addedAt: "2024-12-26",
|
|
485
485
|
vendor: "deepseek",
|
|
486
486
|
provider: "openrouter"
|
|
@@ -540,9 +540,9 @@ var OPENROUTER_ROUTES = {
|
|
|
540
540
|
provider: "openrouter"
|
|
541
541
|
},
|
|
542
542
|
"deepseek/deepseek-v4-flash-0731": {
|
|
543
|
-
inputPer1M: 0.
|
|
544
|
-
outputPer1M: 0.
|
|
545
|
-
cacheReadMultiplier: 0.
|
|
543
|
+
inputPer1M: 0.1298,
|
|
544
|
+
outputPer1M: 0.3894,
|
|
545
|
+
cacheReadMultiplier: 0.031818,
|
|
546
546
|
addedAt: "2026-07-31",
|
|
547
547
|
vendor: "deepseek",
|
|
548
548
|
provider: "openrouter"
|
|
@@ -556,9 +556,9 @@ var OPENROUTER_ROUTES = {
|
|
|
556
556
|
provider: "openrouter"
|
|
557
557
|
},
|
|
558
558
|
"deepseek/deepseek-v4-pro": {
|
|
559
|
-
inputPer1M: 0.
|
|
560
|
-
outputPer1M:
|
|
561
|
-
cacheReadMultiplier: 0.
|
|
559
|
+
inputPer1M: 0.415686,
|
|
560
|
+
outputPer1M: 0.831372,
|
|
561
|
+
cacheReadMultiplier: 0.083335,
|
|
562
562
|
addedAt: "2026-04-24",
|
|
563
563
|
vendor: "deepseek",
|
|
564
564
|
provider: "openrouter"
|
|
@@ -572,9 +572,9 @@ var OPENROUTER_ROUTES = {
|
|
|
572
572
|
provider: "openrouter"
|
|
573
573
|
},
|
|
574
574
|
"deepseek/deepseek-v4.1-flash": {
|
|
575
|
-
inputPer1M: 0.
|
|
576
|
-
outputPer1M: 0.
|
|
577
|
-
cacheReadMultiplier: 0.
|
|
575
|
+
inputPer1M: 0.03552,
|
|
576
|
+
outputPer1M: 0.12,
|
|
577
|
+
cacheReadMultiplier: 0.019989,
|
|
578
578
|
addedAt: "2026-09-10",
|
|
579
579
|
vendor: "deepseek",
|
|
580
580
|
provider: "openrouter"
|
|
@@ -646,14 +646,6 @@ var OPENROUTER_ROUTES = {
|
|
|
646
646
|
vendor: "google",
|
|
647
647
|
provider: "openrouter"
|
|
648
648
|
},
|
|
649
|
-
"google/gemini-2.5-flash:batch": {
|
|
650
|
-
inputPer1M: 0.15,
|
|
651
|
-
outputPer1M: 1.25,
|
|
652
|
-
cacheReadMultiplier: 0.2,
|
|
653
|
-
addedAt: "2025-06-17",
|
|
654
|
-
vendor: "google",
|
|
655
|
-
provider: "openrouter"
|
|
656
|
-
},
|
|
657
649
|
"google/gemini-2.5-pro": {
|
|
658
650
|
inputPer1M: 1.25,
|
|
659
651
|
outputPer1M: 10,
|
|
@@ -674,15 +666,6 @@ var OPENROUTER_ROUTES = {
|
|
|
674
666
|
vendor: "google",
|
|
675
667
|
provider: "openrouter"
|
|
676
668
|
},
|
|
677
|
-
"google/gemini-2.5-pro:batch": {
|
|
678
|
-
inputPer1M: 0.625,
|
|
679
|
-
outputPer1M: 5,
|
|
680
|
-
cacheReadMultiplier: 0.2,
|
|
681
|
-
tiers: [{ aboveInputTokens: 2e5, inputPer1M: 1.25, outputPer1M: 7.5, cacheReadMultiplier: 0.2 }],
|
|
682
|
-
addedAt: "2025-06-17",
|
|
683
|
-
vendor: "google",
|
|
684
|
-
provider: "openrouter"
|
|
685
|
-
},
|
|
686
669
|
"google/gemini-3-flash-preview": {
|
|
687
670
|
inputPer1M: 0.5,
|
|
688
671
|
outputPer1M: 3,
|
|
@@ -928,8 +911,9 @@ var OPENROUTER_ROUTES = {
|
|
|
928
911
|
provider: "openrouter"
|
|
929
912
|
},
|
|
930
913
|
"google/gemma-3-4b-it": {
|
|
931
|
-
inputPer1M: 0.
|
|
932
|
-
outputPer1M: 0.
|
|
914
|
+
inputPer1M: 0.04,
|
|
915
|
+
outputPer1M: 0.05,
|
|
916
|
+
cacheReadMultiplier: 0.5,
|
|
933
917
|
addedAt: "2025-03-13",
|
|
934
918
|
vendor: "google",
|
|
935
919
|
provider: "openrouter"
|
|
@@ -987,6 +971,14 @@ var OPENROUTER_ROUTES = {
|
|
|
987
971
|
vendor: "inception",
|
|
988
972
|
provider: "openrouter"
|
|
989
973
|
},
|
|
974
|
+
"inception/mercury-3": {
|
|
975
|
+
inputPer1M: 0.1,
|
|
976
|
+
outputPer1M: 0.35,
|
|
977
|
+
cacheReadMultiplier: 0.1,
|
|
978
|
+
addedAt: "2026-10-16",
|
|
979
|
+
vendor: "inception",
|
|
980
|
+
provider: "openrouter"
|
|
981
|
+
},
|
|
990
982
|
"inclusionai/ling-3.0-flash": {
|
|
991
983
|
inputPer1M: 0.021,
|
|
992
984
|
outputPer1M: 0.063,
|
|
@@ -1607,9 +1599,9 @@ var OPENROUTER_ROUTES = {
|
|
|
1607
1599
|
provider: "openrouter"
|
|
1608
1600
|
},
|
|
1609
1601
|
"nvidia/nemotron-3.5-super-vl": {
|
|
1610
|
-
inputPer1M: 0.
|
|
1611
|
-
outputPer1M: 0.
|
|
1612
|
-
cacheReadMultiplier: 0.
|
|
1602
|
+
inputPer1M: 0.15,
|
|
1603
|
+
outputPer1M: 0.5,
|
|
1604
|
+
cacheReadMultiplier: 0.133333,
|
|
1613
1605
|
addedAt: "2026-10-15",
|
|
1614
1606
|
vendor: "nvidia",
|
|
1615
1607
|
provider: "openrouter"
|
|
@@ -2780,9 +2772,8 @@ var OPENROUTER_ROUTES = {
|
|
|
2780
2772
|
provider: "openrouter"
|
|
2781
2773
|
},
|
|
2782
2774
|
"qwen/qwen3.5-397b-a17b": {
|
|
2783
|
-
inputPer1M: 0.
|
|
2784
|
-
outputPer1M:
|
|
2785
|
-
cacheReadMultiplier: 0.6,
|
|
2775
|
+
inputPer1M: 0.39,
|
|
2776
|
+
outputPer1M: 2.34,
|
|
2786
2777
|
addedAt: "2026-02-16",
|
|
2787
2778
|
vendor: "qwen",
|
|
2788
2779
|
provider: "openrouter"
|
|
@@ -2827,9 +2818,9 @@ var OPENROUTER_ROUTES = {
|
|
|
2827
2818
|
provider: "openrouter"
|
|
2828
2819
|
},
|
|
2829
2820
|
"qwen/qwen3.6-35b-a3b": {
|
|
2830
|
-
inputPer1M: 0.
|
|
2831
|
-
outputPer1M:
|
|
2832
|
-
cacheReadMultiplier: 0.
|
|
2821
|
+
inputPer1M: 0.1,
|
|
2822
|
+
outputPer1M: 0.95,
|
|
2823
|
+
cacheReadMultiplier: 0.5,
|
|
2833
2824
|
addedAt: "2026-04-27",
|
|
2834
2825
|
vendor: "qwen",
|
|
2835
2826
|
provider: "openrouter"
|
|
@@ -2897,9 +2888,9 @@ var OPENROUTER_ROUTES = {
|
|
|
2897
2888
|
provider: "openrouter"
|
|
2898
2889
|
},
|
|
2899
2890
|
"qwen/qwen3.8-27b": {
|
|
2900
|
-
inputPer1M: 0.
|
|
2901
|
-
outputPer1M:
|
|
2902
|
-
cacheReadMultiplier: 0.
|
|
2891
|
+
inputPer1M: 0.04,
|
|
2892
|
+
outputPer1M: 1.35,
|
|
2893
|
+
cacheReadMultiplier: 0.45,
|
|
2903
2894
|
addedAt: "2026-08-14",
|
|
2904
2895
|
vendor: "qwen",
|
|
2905
2896
|
provider: "openrouter"
|
|
@@ -2937,9 +2928,9 @@ var OPENROUTER_ROUTES = {
|
|
|
2937
2928
|
provider: "openrouter"
|
|
2938
2929
|
},
|
|
2939
2930
|
"reflection/beam-1.0-501b-a23b": {
|
|
2940
|
-
inputPer1M:
|
|
2941
|
-
outputPer1M:
|
|
2942
|
-
cacheReadMultiplier: 0.
|
|
2931
|
+
inputPer1M: 0.3,
|
|
2932
|
+
outputPer1M: 1,
|
|
2933
|
+
cacheReadMultiplier: 0.133333,
|
|
2943
2934
|
addedAt: "2026-10-16",
|
|
2944
2935
|
vendor: "reflection",
|
|
2945
2936
|
provider: "openrouter"
|
|
@@ -3195,8 +3186,8 @@ var OPENROUTER_ROUTES = {
|
|
|
3195
3186
|
provider: "openrouter"
|
|
3196
3187
|
},
|
|
3197
3188
|
"upstage/solar-pro4": {
|
|
3198
|
-
inputPer1M: 0.
|
|
3199
|
-
outputPer1M: 0.
|
|
3189
|
+
inputPer1M: 0.15,
|
|
3190
|
+
outputPer1M: 0.6,
|
|
3200
3191
|
cacheReadMultiplier: 0.2,
|
|
3201
3192
|
addedAt: "2026-08-10",
|
|
3202
3193
|
vendor: "upstage",
|
|
@@ -3502,23 +3493,23 @@ var OPENROUTER_ROUTES = {
|
|
|
3502
3493
|
provider: "openrouter"
|
|
3503
3494
|
},
|
|
3504
3495
|
"~deepseek/deepseek-flash-latest": {
|
|
3505
|
-
inputPer1M: 0.
|
|
3506
|
-
outputPer1M: 0.
|
|
3507
|
-
cacheReadMultiplier: 0.
|
|
3496
|
+
inputPer1M: 0.07,
|
|
3497
|
+
outputPer1M: 0.5,
|
|
3498
|
+
cacheReadMultiplier: 0.114286,
|
|
3508
3499
|
addedAt: "2026-09-14",
|
|
3509
3500
|
vendor: "~deepseek",
|
|
3510
3501
|
provider: "openrouter"
|
|
3511
3502
|
},
|
|
3512
3503
|
"~deepseek/deepseek-pro-latest": {
|
|
3513
|
-
inputPer1M: 0.
|
|
3504
|
+
inputPer1M: 0.1307,
|
|
3514
3505
|
outputPer1M: 8,
|
|
3515
|
-
cacheReadMultiplier:
|
|
3506
|
+
cacheReadMultiplier: 0.994644,
|
|
3516
3507
|
addedAt: "2026-09-14",
|
|
3517
3508
|
vendor: "~deepseek",
|
|
3518
3509
|
provider: "openrouter"
|
|
3519
3510
|
},
|
|
3520
3511
|
"~deepseek/deepseek-v4-flash-latest": {
|
|
3521
|
-
inputPer1M:
|
|
3512
|
+
inputPer1M: 0.0151,
|
|
3522
3513
|
outputPer1M: 0.45,
|
|
3523
3514
|
cacheReadMultiplier: 1,
|
|
3524
3515
|
addedAt: "2026-08-01",
|
|
@@ -3545,7 +3536,7 @@ var OPENROUTER_ROUTES = {
|
|
|
3545
3536
|
},
|
|
3546
3537
|
"~moonshotai/kimi-latest": {
|
|
3547
3538
|
inputPer1M: 0.238,
|
|
3548
|
-
outputPer1M:
|
|
3539
|
+
outputPer1M: 16,
|
|
3549
3540
|
cacheReadMultiplier: 0.957983,
|
|
3550
3541
|
addedAt: "2026-04-27",
|
|
3551
3542
|
vendor: "~moonshotai",
|
|
@@ -3625,9 +3616,9 @@ var OPENROUTER_ROUTES = {
|
|
|
3625
3616
|
provider: "openrouter"
|
|
3626
3617
|
},
|
|
3627
3618
|
"~z-ai/glm-latest": {
|
|
3628
|
-
inputPer1M: 0.
|
|
3629
|
-
outputPer1M:
|
|
3630
|
-
cacheReadMultiplier: 0.
|
|
3619
|
+
inputPer1M: 0.079,
|
|
3620
|
+
outputPer1M: 1.4,
|
|
3621
|
+
cacheReadMultiplier: 0.987342,
|
|
3631
3622
|
addedAt: "2026-08-19",
|
|
3632
3623
|
vendor: "~z-ai",
|
|
3633
3624
|
provider: "openrouter"
|
|
@@ -3918,7 +3909,8 @@ var MINIMAX_GENERATED_PRICING = {
|
|
|
3918
3909
|
"MiniMax-M2.5-highspeed": { inputPer1M: 0.6, outputPer1M: 2.4, cacheReadMultiplier: 0.05, cacheWriteMultiplier: 0.625, priceSource: "minimax", vendor: "minimax", provider: "minimax" },
|
|
3919
3910
|
"MiniMax-M2.7": { inputPer1M: 0.3, outputPer1M: 1.2, cacheReadMultiplier: 0.2, cacheWriteMultiplier: 1.25, priceSource: "minimax", vendor: "minimax", provider: "minimax" },
|
|
3920
3911
|
"MiniMax-M2.7-highspeed": { inputPer1M: 0.6, outputPer1M: 2.4, cacheReadMultiplier: 0.1, cacheWriteMultiplier: 0.625, priceSource: "minimax", vendor: "minimax", provider: "minimax" },
|
|
3921
|
-
"MiniMax-M3": { inputPer1M: 0.3, outputPer1M: 1.2, cacheReadMultiplier: 0.2, tiers: [{ aboveInputTokens: 512e3, inputPer1M: 0.6, outputPer1M: 2.4, cacheReadMultiplier: 0.2 }], priceSource: "minimax", vendor: "minimax", provider: "minimax" }
|
|
3912
|
+
"MiniMax-M3": { inputPer1M: 0.3, outputPer1M: 1.2, cacheReadMultiplier: 0.2, tiers: [{ aboveInputTokens: 512e3, inputPer1M: 0.6, outputPer1M: 2.4, cacheReadMultiplier: 0.2 }], priceSource: "minimax", vendor: "minimax", provider: "minimax" },
|
|
3913
|
+
"MiniMax-M3.1-Flash": { inputPer1M: 0.15, outputPer1M: 0.6, cacheReadMultiplier: 0.1, priceSource: "minimax", vendor: "minimax", provider: "minimax" }
|
|
3922
3914
|
};
|
|
3923
3915
|
|
|
3924
3916
|
// src/llm/xai-pricing.generated.ts
|
|
@@ -4587,6 +4579,13 @@ var OPENCODE_GO_ROUTES = {
|
|
|
4587
4579
|
vendor: "minimax",
|
|
4588
4580
|
provider: "opencode-go"
|
|
4589
4581
|
},
|
|
4582
|
+
"opencode-go/minimax-m3.1-flash-free": {
|
|
4583
|
+
inputPer1M: 0,
|
|
4584
|
+
outputPer1M: 0,
|
|
4585
|
+
addedAt: "2026-10-19",
|
|
4586
|
+
vendor: "minimax",
|
|
4587
|
+
provider: "opencode-go"
|
|
4588
|
+
},
|
|
4590
4589
|
"opencode-go/muse-spark-1.2-contributor": {
|
|
4591
4590
|
inputPer1M: 0.1,
|
|
4592
4591
|
outputPer1M: 0.2,
|
|
@@ -4630,15 +4629,6 @@ var OPENCODE_GO_ROUTES = {
|
|
|
4630
4629
|
vendor: "qwen",
|
|
4631
4630
|
provider: "opencode-go"
|
|
4632
4631
|
},
|
|
4633
|
-
"opencode-go/space-bunny": {
|
|
4634
|
-
inputPer1M: 0.15,
|
|
4635
|
-
outputPer1M: 0.6,
|
|
4636
|
-
cacheReadMultiplier: 0.2,
|
|
4637
|
-
cacheWriteMultiplier: 0,
|
|
4638
|
-
addedAt: "2026-09-23",
|
|
4639
|
-
vendor: "opencode",
|
|
4640
|
-
provider: "opencode-go"
|
|
4641
|
-
},
|
|
4642
4632
|
"opencode-go/step-5-preview": {
|
|
4643
4633
|
inputPer1M: 1,
|
|
4644
4634
|
outputPer1M: 2.7,
|
|
@@ -5258,6 +5248,13 @@ var OPENCODE_ZEN_ROUTES = {
|
|
|
5258
5248
|
vendor: "minimax",
|
|
5259
5249
|
provider: "opencode"
|
|
5260
5250
|
},
|
|
5251
|
+
"opencode/minimax-m3.1-flash-free": {
|
|
5252
|
+
inputPer1M: 0,
|
|
5253
|
+
outputPer1M: 0,
|
|
5254
|
+
addedAt: "2026-10-19",
|
|
5255
|
+
vendor: "minimax",
|
|
5256
|
+
provider: "opencode"
|
|
5257
|
+
},
|
|
5261
5258
|
"opencode/mistral-large-4": {
|
|
5262
5259
|
inputPer1M: 0.68,
|
|
5263
5260
|
outputPer1M: 2.09,
|
|
@@ -5338,13 +5335,6 @@ var OPENCODE_ZEN_ROUTES = {
|
|
|
5338
5335
|
addedAt: "2026-08-03",
|
|
5339
5336
|
vendor: "qwen",
|
|
5340
5337
|
provider: "opencode"
|
|
5341
|
-
},
|
|
5342
|
-
"opencode/space-bunny-free": {
|
|
5343
|
-
inputPer1M: 0,
|
|
5344
|
-
outputPer1M: 0,
|
|
5345
|
-
addedAt: "2026-09-23",
|
|
5346
|
-
vendor: "opencode",
|
|
5347
|
-
provider: "opencode"
|
|
5348
5338
|
}
|
|
5349
5339
|
};
|
|
5350
5340
|
var OPENCODE_ZEN_ANTHROPIC_MODELS = [
|
|
@@ -5369,5 +5359,5 @@ var OPENCODE_ZEN_ANTHROPIC_MODELS = [
|
|
|
5369
5359
|
];
|
|
5370
5360
|
|
|
5371
5361
|
export { DEFAULT_PRICING, LLM_PRICING_CATALOG, MODEL_ALIASES, OPENCODE_GO_ANTHROPIC_MODELS, OPENCODE_GO_ROUTES, OPENCODE_ZEN_ANTHROPIC_MODELS, OPENCODE_ZEN_ROUTES, OPENROUTER_ROUTES, calculateLLMCreditCost, getCacheStats, getModelProvider, isKnownLlmId, listNativeModelIds, listUnpricedKnownLlmIds, resolveAlias, resolveContextWindow, resolveModelRoute, resolvePricing, resolvePricingExact, selectPricingTier, splitContextWindowHint };
|
|
5372
|
-
//# sourceMappingURL=chunk-
|
|
5373
|
-
//# sourceMappingURL=chunk-
|
|
5362
|
+
//# sourceMappingURL=chunk-5E34CLTH.mjs.map
|
|
5363
|
+
//# sourceMappingURL=chunk-5E34CLTH.mjs.map
|