Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
150 changes: 148 additions & 2 deletions crates/agent-gateway/web/src/lib/models/catalog.generated.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// Generated by scripts/generate-model-catalog.mjs — DO NOT EDIT.
// Source: https://models.dev/api.json (providers: anthropic, google, openai, xai)
// Source: https://models.dev/api.json (sections: anthropic, google, openai, xai, deepseek, zhipuai, moonshotai, minimax, stepfun, xiaomi, longcat, alibaba, tencent)
// Refresh: make update-model-catalog

export type CatalogModelEntry = {
Expand All @@ -8,7 +8,7 @@ export type CatalogModelEntry = {
maxOutputToken: number;
};

export type CatalogProviderId = "anthropic" | "google" | "openai" | "xai";
export type CatalogProviderId = "anthropic" | "google" | "openai" | "xai" | "deepseek" | "zhipuai" | "moonshotai" | "minimax" | "stepfun" | "xiaomi" | "longcat" | "alibaba" | "tencent";

export const MODEL_CATALOG_SNAPSHOT_DATE = "2026-07-24";

Expand Down Expand Up @@ -126,4 +126,150 @@ export const MODEL_CATALOG: Record<CatalogProviderId, readonly CatalogModelEntry
{ id: "grok-4.5", contextWindow: 500000, maxOutputToken: 32000 },
{ id: "grok-build-0.1", contextWindow: 256000, maxOutputToken: 32000 },
],
deepseek: [
{ id: "deepseek-chat", contextWindow: 1000000, maxOutputToken: 384000 },
{ id: "deepseek-reasoner", contextWindow: 1000000, maxOutputToken: 384000 },
{ id: "deepseek-v4-flash", contextWindow: 1000000, maxOutputToken: 384000 },
{ id: "deepseek-v4-pro", contextWindow: 1000000, maxOutputToken: 384000 },
],
zhipuai: [
{ id: "glm-4.5", contextWindow: 131072, maxOutputToken: 98304 },
{ id: "glm-4.5-air", contextWindow: 131072, maxOutputToken: 98304 },
{ id: "glm-4.5-flash", contextWindow: 131072, maxOutputToken: 98304 },
{ id: "glm-4.5v", contextWindow: 64000, maxOutputToken: 16384 },
{ id: "glm-4.6", contextWindow: 204800, maxOutputToken: 131072 },
{ id: "glm-4.6v", contextWindow: 128000, maxOutputToken: 32768 },
{ id: "glm-4.7", contextWindow: 204800, maxOutputToken: 131072 },
{ id: "glm-4.7-flash", contextWindow: 200000, maxOutputToken: 131072 },
{ id: "glm-4.7-flashx", contextWindow: 200000, maxOutputToken: 131072 },
{ id: "glm-5", contextWindow: 204800, maxOutputToken: 131072 },
{ id: "glm-5-turbo", contextWindow: 200000, maxOutputToken: 131072 },
{ id: "glm-5.1", contextWindow: 200000, maxOutputToken: 131072 },
{ id: "glm-5.2", contextWindow: 1000000, maxOutputToken: 131072 },
{ id: "glm-5v-turbo", contextWindow: 200000, maxOutputToken: 131072 },
],
moonshotai: [
{ id: "kimi-k2-0711-preview", contextWindow: 131072, maxOutputToken: 16384 },
{ id: "kimi-k2-0905-preview", contextWindow: 262144, maxOutputToken: 32000 },
{ id: "kimi-k2-thinking", contextWindow: 262144, maxOutputToken: 32000 },
{ id: "kimi-k2-thinking-turbo", contextWindow: 262144, maxOutputToken: 32000 },
{ id: "kimi-k2-turbo-preview", contextWindow: 262144, maxOutputToken: 32000 },
{ id: "kimi-k2.5", contextWindow: 262144, maxOutputToken: 32000 },
{ id: "kimi-k2.6", contextWindow: 262144, maxOutputToken: 32000 },
{ id: "kimi-k2.7-code", contextWindow: 262144, maxOutputToken: 32000 },
{ id: "kimi-k2.7-code-highspeed", contextWindow: 262144, maxOutputToken: 32000 },
{ id: "kimi-k3", contextWindow: 1048576, maxOutputToken: 131072 },
],
minimax: [
{ id: "MiniMax-M2", contextWindow: 196608, maxOutputToken: 128000 },
{ id: "MiniMax-M2.1", contextWindow: 204800, maxOutputToken: 131072 },
{ id: "MiniMax-M2.5", contextWindow: 204800, maxOutputToken: 131072 },
{ id: "MiniMax-M2.5-highspeed", contextWindow: 204800, maxOutputToken: 131072 },
{ id: "MiniMax-M2.7", contextWindow: 204800, maxOutputToken: 131072 },
{ id: "MiniMax-M2.7-highspeed", contextWindow: 204800, maxOutputToken: 131072 },
{ id: "MiniMax-M3", contextWindow: 1000000, maxOutputToken: 128000 },
],
stepfun: [
{ id: "step-1-32k", contextWindow: 32768, maxOutputToken: 8192 },
{ id: "step-2-16k", contextWindow: 16384, maxOutputToken: 8192 },
{ id: "step-3.5-flash", contextWindow: 256000, maxOutputToken: 32000 },
{ id: "step-3.5-flash-2603", contextWindow: 256000, maxOutputToken: 32000 },
{ id: "step-3.7-flash", contextWindow: 256000, maxOutputToken: 32000 },
],
xiaomi: [
{ id: "mimo-v2-flash", contextWindow: 262144, maxOutputToken: 65536 },
{ id: "mimo-v2-omni", contextWindow: 262144, maxOutputToken: 131072 },
{ id: "mimo-v2-pro", contextWindow: 1048576, maxOutputToken: 131072 },
{ id: "mimo-v2.5", contextWindow: 1048576, maxOutputToken: 131072 },
{ id: "mimo-v2.5-pro", contextWindow: 1048576, maxOutputToken: 131072 },
{ id: "mimo-v2.5-pro-ultraspeed", contextWindow: 1048576, maxOutputToken: 131072 },
],
longcat: [
{ id: "LongCat-2.0", contextWindow: 1000000, maxOutputToken: 131072 },
],
alibaba: [
{ id: "deepseek-r1", contextWindow: 131072, maxOutputToken: 16384 },
{ id: "deepseek-r1-0528", contextWindow: 131072, maxOutputToken: 16384 },
{ id: "deepseek-r1-distill-llama-70b", contextWindow: 32768, maxOutputToken: 16384 },
{ id: "deepseek-r1-distill-llama-8b", contextWindow: 32768, maxOutputToken: 16384 },
{ id: "deepseek-r1-distill-qwen-1-5b", contextWindow: 32768, maxOutputToken: 16384 },
{ id: "deepseek-r1-distill-qwen-14b", contextWindow: 32768, maxOutputToken: 16384 },
{ id: "deepseek-r1-distill-qwen-32b", contextWindow: 32768, maxOutputToken: 16384 },
{ id: "deepseek-r1-distill-qwen-7b", contextWindow: 32768, maxOutputToken: 16384 },
{ id: "deepseek-v3", contextWindow: 65536, maxOutputToken: 8192 },
{ id: "deepseek-v3-1", contextWindow: 131072, maxOutputToken: 65536 },
{ id: "deepseek-v3-2-exp", contextWindow: 131072, maxOutputToken: 65536 },
{ id: "moonshot-kimi-k2-instruct", contextWindow: 131072, maxOutputToken: 8192 },
{ id: "qvq-max", contextWindow: 131072, maxOutputToken: 8192 },
{ id: "qwen-deep-research", contextWindow: 1000000, maxOutputToken: 32768 },
{ id: "qwen-doc-turbo", contextWindow: 131072, maxOutputToken: 8192 },
{ id: "qwen-flash", contextWindow: 1000000, maxOutputToken: 32768 },
{ id: "qwen-long", contextWindow: 10000000, maxOutputToken: 8192 },
{ id: "qwen-math-plus", contextWindow: 4096, maxOutputToken: 3072 },
{ id: "qwen-math-turbo", contextWindow: 4096, maxOutputToken: 3072 },
{ id: "qwen-max", contextWindow: 131072, maxOutputToken: 8192 },
{ id: "qwen-mt-plus", contextWindow: 16384, maxOutputToken: 8192 },
{ id: "qwen-mt-turbo", contextWindow: 16384, maxOutputToken: 8192 },
{ id: "qwen-omni-turbo", contextWindow: 32768, maxOutputToken: 2048 },
{ id: "qwen-omni-turbo-realtime", contextWindow: 32768, maxOutputToken: 2048 },
{ id: "qwen-plus", contextWindow: 1000000, maxOutputToken: 32768 },
{ id: "qwen-plus-character", contextWindow: 32768, maxOutputToken: 4096 },
{ id: "qwen-plus-character-ja", contextWindow: 8192, maxOutputToken: 512 },
{ id: "qwen-turbo", contextWindow: 1000000, maxOutputToken: 16384 },
{ id: "qwen-vl-max", contextWindow: 131072, maxOutputToken: 8192 },
{ id: "qwen-vl-ocr", contextWindow: 34096, maxOutputToken: 4096 },
{ id: "qwen-vl-plus", contextWindow: 131072, maxOutputToken: 8192 },
{ id: "qwen2-5-14b-instruct", contextWindow: 131072, maxOutputToken: 8192 },
{ id: "qwen2-5-32b-instruct", contextWindow: 131072, maxOutputToken: 8192 },
{ id: "qwen2-5-72b-instruct", contextWindow: 131072, maxOutputToken: 8192 },
{ id: "qwen2-5-7b-instruct", contextWindow: 131072, maxOutputToken: 8192 },
{ id: "qwen2-5-coder-32b-instruct", contextWindow: 131072, maxOutputToken: 8192 },
{ id: "qwen2-5-coder-7b-instruct", contextWindow: 131072, maxOutputToken: 8192 },
{ id: "qwen2-5-math-72b-instruct", contextWindow: 4096, maxOutputToken: 3072 },
{ id: "qwen2-5-math-7b-instruct", contextWindow: 4096, maxOutputToken: 3072 },
{ id: "qwen2-5-omni-7b", contextWindow: 32768, maxOutputToken: 2048 },
{ id: "qwen2-5-vl-72b-instruct", contextWindow: 131072, maxOutputToken: 8192 },
{ id: "qwen2-5-vl-7b-instruct", contextWindow: 131072, maxOutputToken: 8192 },
{ id: "qwen3-14b", contextWindow: 131072, maxOutputToken: 8192 },
{ id: "qwen3-235b-a22b", contextWindow: 131072, maxOutputToken: 16384 },
{ id: "qwen3-32b", contextWindow: 131072, maxOutputToken: 16384 },
{ id: "qwen3-8b", contextWindow: 131072, maxOutputToken: 8192 },
{ id: "qwen3-asr-flash", contextWindow: 53248, maxOutputToken: 4096 },
{ id: "qwen3-coder-30b-a3b-instruct", contextWindow: 262144, maxOutputToken: 65536 },
{ id: "qwen3-coder-480b-a35b-instruct", contextWindow: 262144, maxOutputToken: 65536 },
{ id: "qwen3-coder-flash", contextWindow: 1000000, maxOutputToken: 65536 },
{ id: "qwen3-coder-plus", contextWindow: 1048576, maxOutputToken: 65536 },
{ id: "qwen3-livetranslate-flash-realtime", contextWindow: 53248, maxOutputToken: 4096 },
{ id: "qwen3-max", contextWindow: 262144, maxOutputToken: 65536 },
{ id: "qwen3-next-80b-a3b-instruct", contextWindow: 131072, maxOutputToken: 32768 },
{ id: "qwen3-next-80b-a3b-thinking", contextWindow: 131072, maxOutputToken: 32768 },
{ id: "qwen3-omni-flash", contextWindow: 65536, maxOutputToken: 16384 },
{ id: "qwen3-omni-flash-realtime", contextWindow: 65536, maxOutputToken: 16384 },
{ id: "qwen3-vl-235b-a22b", contextWindow: 131072, maxOutputToken: 32768 },
{ id: "qwen3-vl-30b-a3b", contextWindow: 131072, maxOutputToken: 32768 },
{ id: "qwen3-vl-plus", contextWindow: 262144, maxOutputToken: 32768 },
{ id: "qwen3.5-122b-a10b", contextWindow: 262144, maxOutputToken: 65536 },
{ id: "qwen3.5-27b", contextWindow: 262144, maxOutputToken: 65536 },
{ id: "qwen3.5-35b-a3b", contextWindow: 262144, maxOutputToken: 65536 },
{ id: "qwen3.5-397b-a17b", contextWindow: 262144, maxOutputToken: 65536 },
{ id: "qwen3.5-flash", contextWindow: 1000000, maxOutputToken: 65536 },
{ id: "qwen3.5-plus", contextWindow: 1000000, maxOutputToken: 65536 },
{ id: "qwen3.6-27b", contextWindow: 262144, maxOutputToken: 65536 },
{ id: "qwen3.6-35b-a3b", contextWindow: 262144, maxOutputToken: 65536 },
{ id: "qwen3.6-flash", contextWindow: 1000000, maxOutputToken: 65536 },
{ id: "qwen3.6-max-preview", contextWindow: 245800, maxOutputToken: 65536 },
{ id: "qwen3.6-plus", contextWindow: 1000000, maxOutputToken: 65536 },
{ id: "qwen3.7-max", contextWindow: 1000000, maxOutputToken: 65536 },
{ id: "qwen3.7-plus", contextWindow: 1000000, maxOutputToken: 64000 },
{ id: "qwq-32b", contextWindow: 131072, maxOutputToken: 8192 },
{ id: "qwq-plus", contextWindow: 131072, maxOutputToken: 8192 },
{ id: "tongyi-intent-detect-v3", contextWindow: 8192, maxOutputToken: 1024 },
],
tencent: [
{ id: "hunyuan-2.0-instruct", contextWindow: 131072, maxOutputToken: 16384 },
{ id: "hunyuan-2.0-thinking", contextWindow: 131072, maxOutputToken: 16384 },
{ id: "hunyuan-t1", contextWindow: 131072, maxOutputToken: 16384 },
{ id: "hunyuan-turbos", contextWindow: 131072, maxOutputToken: 16384 },
{ id: "tc-code-latest", contextWindow: 131072, maxOutputToken: 16384 },
],
};
19 changes: 14 additions & 5 deletions crates/agent-gateway/web/src/lib/models/modelCatalog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,14 @@ const catalogIndexByProvider = new Map<CatalogProviderId, Map<string, CatalogMod
function getCatalogIndex(catalogProvider: CatalogProviderId): Map<string, CatalogModelEntry> {
let index = catalogIndexByProvider.get(catalogProvider);
if (!index) {
index = new Map(MODEL_CATALOG[catalogProvider].map((entry) => [entry.id, entry]));
index = new Map();
for (const entry of MODEL_CATALOG[catalogProvider]) {
index.set(entry.id, entry);
// 目录含混合大小写 id(MiniMax-M2/LongCat-2.0 等):补小写别名,让候选链
// 的 lower 候选可命中;生成期按小写去重保证别名不会跨条目歧义。
const lower = entry.id.toLowerCase();
if (!index.has(lower)) index.set(lower, entry);
}
catalogIndexByProvider.set(catalogProvider, index);
}
return index;
Expand All @@ -95,10 +102,12 @@ export function findCatalogModel(
return undefined;
}

// 中转聚合常把 A 家模型挂在 B 家供应商类型下(如 Anthropic 兼容中转供 grok),
// 供应商作用域查不到时按 id 跨供应商回查,避免真实限额被本供应商兜底值顶掉。
// 目录 id 无跨供应商重名(目录不变量测试锁死);候选链放外层——更精确的 id
// 形态优先于供应商声明序。
// 中转聚合常把 A 家模型挂在 B 家供应商类型下(grok/deepseek/glm/qwen 等挂在
// Anthropic/OpenAI 兼容中转),供应商作用域查不到时按 id 跨供应商回查,避免
// 真实限额被本供应商兜底值顶掉。国内厂商分区(deepseek/zhipuai/alibaba 等)
// 没有对应的应用供应商类型,只经这里消费。目录 id 全局小写唯一(生成期跨
// 分区去重+目录不变量测试锁死);候选链放外层——更精确的 id 形态优先于
// 供应商声明序。
const CATALOG_PROVIDER_IDS = Object.keys(MODEL_CATALOG) as CatalogProviderId[];

export function findCatalogModelAcrossProviders(
Expand Down
Loading
Loading