@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.
Files changed (36) hide show
  1. package/dist/access/index.d.ts +3 -3
  2. package/dist/access/index.mjs +4 -4
  3. package/dist/{catalog-DRGEICKV.d.ts → catalog-DLa4soLN.d.ts} +8 -0
  4. package/dist/{chunk-XJUZ5X3W.mjs → chunk-2P2R2XLK.mjs} +5 -5
  5. package/dist/{chunk-XJUZ5X3W.mjs.map → chunk-2P2R2XLK.mjs.map} +1 -1
  6. package/dist/{chunk-TVXNRUJM.mjs → chunk-5E34CLTH.mjs} +66 -76
  7. package/dist/chunk-5E34CLTH.mjs.map +1 -0
  8. package/dist/{chunk-5EX3V7QZ.mjs → chunk-5GIH3O6I.mjs} +4 -4
  9. package/dist/{chunk-5EX3V7QZ.mjs.map → chunk-5GIH3O6I.mjs.map} +1 -1
  10. package/dist/{chunk-UOOTUH6N.mjs → chunk-FPTLINCV.mjs} +3 -3
  11. package/dist/{chunk-UOOTUH6N.mjs.map → chunk-FPTLINCV.mjs.map} +1 -1
  12. package/dist/{chunk-6TZ6WIM3.mjs → chunk-ORWNAAFP.mjs} +4 -4
  13. package/dist/{chunk-6TZ6WIM3.mjs.map → chunk-ORWNAAFP.mjs.map} +1 -1
  14. package/dist/{chunk-ALUIW3QO.mjs → chunk-P5PQS3SJ.mjs} +197 -116
  15. package/dist/chunk-P5PQS3SJ.mjs.map +1 -0
  16. package/dist/{chunk-NNV3NYUE.mjs → chunk-PKFRG2DA.mjs} +3 -3
  17. package/dist/{chunk-NNV3NYUE.mjs.map → chunk-PKFRG2DA.mjs.map} +1 -1
  18. package/dist/{chunk-TZ5LNR5F.mjs → chunk-POKSD3S3.mjs} +3 -3
  19. package/dist/{chunk-TZ5LNR5F.mjs.map → chunk-POKSD3S3.mjs.map} +1 -1
  20. package/dist/cost/index.mjs +6 -6
  21. package/dist/curation/index.d.ts +2 -2
  22. package/dist/curation/index.mjs +6 -6
  23. package/dist/{evaluate-B-irutMW.d.ts → evaluate-DYz38I9t.d.ts} +1 -1
  24. package/dist/{index-VuUTv1ft.d.ts → index-BZlWH9br.d.ts} +1 -1
  25. package/dist/{index-kbLggJk1.d.ts → index-CwIGbZai.d.ts} +2 -2
  26. package/dist/index.d.ts +5 -5
  27. package/dist/index.mjs +10 -10
  28. package/dist/llm/index.d.ts +1 -1
  29. package/dist/llm/index.mjs +2 -2
  30. package/dist/overlay/index.d.ts +1 -1
  31. package/dist/picker/index.d.ts +4 -4
  32. package/dist/route-identity/index.d.ts +1 -1
  33. package/dist/route-identity/index.mjs +2 -2
  34. package/package.json +1 -1
  35. package/dist/chunk-ALUIW3QO.mjs.map +0 -1
  36. package/dist/chunk-TVXNRUJM.mjs.map +0 -1
@@ -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-B-irutMW.js';
2
- import { R as ResolvedModel } from '../index-VuUTv1ft.js';
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-DRGEICKV.js';
5
+ import '../catalog-DLa4soLN.js';
6
6
  import '../image/index.js';
7
7
  import '../video/index.js';
8
8
  import '../audio/index.js';
@@ -1,7 +1,7 @@
1
- export { evaluateAccess, evaluateCatalogDefaults } from '../chunk-TZ5LNR5F.mjs';
2
- import '../chunk-NNV3NYUE.mjs';
3
- import '../chunk-UOOTUH6N.mjs';
4
- import '../chunk-TVXNRUJM.mjs';
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-ALUIW3QO.mjs';
2
- import { modelHasTag } from './chunk-NNV3NYUE.mjs';
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-TVXNRUJM.mjs';
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-XJUZ5X3W.mjs.map
206
- //# sourceMappingURL=chunk-XJUZ5X3W.mjs.map
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":"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","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.32,
483
- outputPer1M: 0.89,
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.15,
544
- outputPer1M: 0.15,
545
- cacheReadMultiplier: 0.28,
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.95526,
560
- outputPer1M: 1.91052,
561
- cacheReadMultiplier: 0.083333,
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.04,
576
- outputPer1M: 0.08,
577
- cacheReadMultiplier: 0.04,
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.05,
932
- outputPer1M: 0.1,
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.1,
1611
- outputPer1M: 0.4,
1612
- cacheReadMultiplier: 0.8,
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.5,
2784
- outputPer1M: 3.6,
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.15,
2831
- outputPer1M: 1,
2832
- cacheReadMultiplier: 0.333333,
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.24,
2901
- outputPer1M: 2.2,
2902
- cacheReadMultiplier: 0.208333,
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: 1,
2941
- outputPer1M: 3,
2942
- cacheReadMultiplier: 0.1,
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.09,
3199
- outputPer1M: 0.36,
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.05,
3506
- outputPer1M: 0.15,
3507
- cacheReadMultiplier: 0.24,
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.225,
3504
+ inputPer1M: 0.1307,
3514
3505
  outputPer1M: 8,
3515
- cacheReadMultiplier: 1.022222,
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: 65e-4,
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: 13,
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.047,
3629
- outputPer1M: 6,
3630
- cacheReadMultiplier: 0.617021,
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-TVXNRUJM.mjs.map
5373
- //# sourceMappingURL=chunk-TVXNRUJM.mjs.map
5362
+ //# sourceMappingURL=chunk-5E34CLTH.mjs.map
5363
+ //# sourceMappingURL=chunk-5E34CLTH.mjs.map