症状
管理端「测试模型」POST /api/v1/llm-models/{id}/test 对形如 组织名/模型名(OpenAI 兼容网关的 namespaced 命名,此处以 example-org/example-29b 指代,真实模型名已脱敏)返回失败:
litellm.BadRequestError: LLM Provider NOT provided. You passed model=<组织名/模型名>
根因
app/services/llm/model_resolver.py::resolve_litellm_model 的早退分支:model_id 含 / 即原样返回,provider 解析逻辑被跳过。「组织/模型」命名(OpenRouter / vLLM / 聚合网关常见格式)被 litellm 按前缀当 provider 路由 → 未知 provider → BadRequestError。代码注释自己已承认该场景应走 OpenAI 兼容路由,但早退分支让它永远到不了。
影响面:所有经 resolver 的调用(model_test、分析管线),凡「配置了 provider(含 custom/openai 预设)+ 模型名含 /」的组合均无法路由。
期望 vs 实际
- 期望:显式配置了 provider 的模型(含
custom 预设),无论模型名是否含 /,都按该 provider 路由(custom → openai/ 前缀);无 provider 信息且首段未知时,应用层兜底 OpenAI 兼容路由;
- 实际:含
/ 即原样透传给 litellm。
边界
llm/model_resolver / 模型目录 / model_test。
严重度 / 复现性
P1 / always(该命名格式必现)。
回归测试候选
resolver 单测:custom + org/model → openai/org/model;显式 provider + 已带同前缀 → 去重不双拼;无 provider + 已知前缀 → 原样;无 provider + 未知前缀 → openai/ 兜底。
症状
管理端「测试模型」
POST /api/v1/llm-models/{id}/test对形如组织名/模型名(OpenAI 兼容网关的 namespaced 命名,此处以example-org/example-29b指代,真实模型名已脱敏)返回失败:根因
app/services/llm/model_resolver.py::resolve_litellm_model的早退分支:model_id含/即原样返回,provider 解析逻辑被跳过。「组织/模型」命名(OpenRouter / vLLM / 聚合网关常见格式)被 litellm 按前缀当 provider 路由 → 未知 provider → BadRequestError。代码注释自己已承认该场景应走 OpenAI 兼容路由,但早退分支让它永远到不了。影响面:所有经 resolver 的调用(model_test、分析管线),凡「配置了 provider(含 custom/openai 预设)+ 模型名含 /」的组合均无法路由。
期望 vs 实际
custom预设),无论模型名是否含/,都按该 provider 路由(custom →openai/前缀);无 provider 信息且首段未知时,应用层兜底 OpenAI 兼容路由;/即原样透传给 litellm。边界
llm/model_resolver / 模型目录 / model_test。
严重度 / 复现性
P1 / always(该命名格式必现)。
回归测试候选
resolver 单测:custom + org/model →
openai/org/model;显式 provider + 已带同前缀 → 去重不双拼;无 provider + 已知前缀 → 原样;无 provider + 未知前缀 →openai/兜底。