-
Notifications
You must be signed in to change notification settings - Fork 7
Open
Description
一、问题描述 (Summary)
在一个支持多协议(如 OpenAI, Anthropic)的 Provider下,如果存在两个“模型标识符”相同但“协议”不同的模型,当前的智能路由机制仅根据“模型标识符”或“模型名称”进行模糊匹配。这导致路由无法区分协议,可能会将一个使用 OpenAI 协议的客户端请求错误地路由到 Anthropic 协议的模型上,从而引发协议不兼容的错误。
二、复现步骤 (Steps to Reproduce)
-
创建 Provider:
- 名称:
org-a - 支持的协议:
OpenAI,Anthropic
- 名称:
-
添加两个模型:
- 模型 A:
- 模型名称:
openai/claude-sonnet-4-5 - 模型标识符:
claude-sonnet-4-5-20250929 - 协议: OpenAI
- 模型名称:
- 模型 B:
- 模型名称:
anthropic/claude-sonnet-4-5 - 模型标识符:
claude-sonnet-4-5-20250929 - 协议: Anthropic
- 模型名称:
- 注意:这两个模型拥有完全相同的
模型标识符。
- 模型 A:
-
配置智能路由:
- 路由名称:
claude-sonnet-4-5 - 路由目标: 选择所有包含
claude-sonnet-4-5-20250929标识符的模型。
- 路由名称:
-
发起请求:
- 使用一个标准的 OpenAI 客户端(例如,遵循 OpenAI API 格式的请求),向智能路由
claude-sonnet-4-5发起调用。
- 使用一个标准的 OpenAI 客户端(例如,遵循 OpenAI API 格式的请求),向智能路由
三、当前行为 (Current Behavior)
-
执行逻辑: 当智能路由接收到请求后,它会使用 Array.prototype.find() 方法在 providerModels 列表中查找匹配的模型。
-
匹配条件: 匹配的条件是模型的 model_identifier 或 name 与路由目标中指定的模型字符串相等。
-
选取结果: 会选择列表中第一个满足条件的对象。
resolvedModel = providerModels.find(m => m.is_virtual !== 1 && ( m.model_identifier === selectedTarget.override_params!.model || m.name === selectedTarget.override_params!.model ) );
我们需要在该查找过程补充模型的 protocol 属性校验吗?或者 复现步骤 中是否存在不合理, 不符合项目设计预期的内容?
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels