refactor: 实现 ConversionEngine 协议转换引擎,替代旧 protocol 包
- 新增 ConversionEngine 核心引擎,支持 OpenAI 和 Anthropic 协议转换 - 添加 stream decoder/encoder 实现 - 更新 provider client 支持新引擎 - 补充单元测试和集成测试 - 更新 specs 文档
This commit is contained in:
@@ -20,43 +20,42 @@
|
||||
|
||||
### Requirement: 验证 OpenAI 请求
|
||||
|
||||
系统 SHALL 验证 OpenAI ChatCompletionRequest。
|
||||
系统 SHALL 验证 OpenAI ChatCompletionRequest,验证逻辑位于 ProtocolAdapter 的 decodeRequest 内。
|
||||
|
||||
#### Scenario: 必需字段验证
|
||||
|
||||
- **WHEN** 收到 OpenAI 请求
|
||||
- **WHEN** OpenAI Adapter 的 decodeRequest 解析请求
|
||||
- **THEN** SHALL 验证 model 字段不为空
|
||||
- **THEN** SHALL 验证 messages 字段不为空且至少有一条消息
|
||||
- **THEN** 验证失败 SHALL 返回 INVALID_INPUT 类型的 ConversionError
|
||||
|
||||
#### Scenario: 参数范围验证
|
||||
|
||||
- **WHEN** 收到 OpenAI 请求
|
||||
- **WHEN** OpenAI Adapter 的 decodeRequest 解析参数
|
||||
- **THEN** SHALL 验证 temperature 范围在 [0, 2]
|
||||
- **THEN** SHALL 验证 max_tokens 大于 0
|
||||
- **THEN** SHALL 验证 top_p 范围在 (0, 1]
|
||||
- **THEN** SHALL 验证 frequency_penalty 范围在 [-2, 2]
|
||||
- **THEN** SHALL 验证 presence_penalty 范围在 [-2, 2]
|
||||
|
||||
#### Scenario: 消息内容验证
|
||||
|
||||
- **WHEN** 验证 messages 字段
|
||||
- **THEN** SHALL 验证每条消息的 role 有效(system、user、assistant、tool)
|
||||
- **THEN** SHALL 验证每条消息的 role 有效(system、developer、user、assistant、tool)
|
||||
- **THEN** SHALL 验证 content 不为空
|
||||
|
||||
### Requirement: 验证 Anthropic 请求
|
||||
|
||||
系统 SHALL 验证 Anthropic MessagesRequest。
|
||||
系统 SHALL 验证 Anthropic MessagesRequest,验证逻辑位于 ProtocolAdapter 的 decodeRequest 内。
|
||||
|
||||
#### Scenario: 必需字段验证
|
||||
|
||||
- **WHEN** 收到 Anthropic 请求
|
||||
- **WHEN** Anthropic Adapter 的 decodeRequest 解析请求
|
||||
- **THEN** SHALL 验证 model 字段不为空
|
||||
- **THEN** SHALL 验证 messages 字段不为空且至少有一条消息
|
||||
- **THEN** SHALL 验证 max_tokens 大于 0(或使用默认值)
|
||||
|
||||
#### Scenario: 参数范围验证
|
||||
|
||||
- **WHEN** 收到 Anthropic 请求
|
||||
- **WHEN** Anthropic Adapter 的 decodeRequest 解析参数
|
||||
- **THEN** SHALL 验证 temperature 范围在 [0, 1]
|
||||
- **THEN** SHALL 验证 top_p 范围在 (0, 1]
|
||||
|
||||
@@ -93,26 +92,17 @@
|
||||
|
||||
系统 SHALL 返回友好的验证错误响应。
|
||||
|
||||
#### Scenario: 错误消息格式
|
||||
#### Scenario: 转换错误格式
|
||||
|
||||
- **WHEN** 验证失败
|
||||
- **THEN** SHALL 返回 400 状态码
|
||||
- **THEN** SHALL 返回详细的错误消息
|
||||
- **THEN** SHALL 指示哪些字段验证失败
|
||||
- **WHEN** decodeRequest 验证失败返回 ConversionError
|
||||
- **THEN** ProxyHandler SHALL 使用 clientAdapter.encodeError 编码错误响应
|
||||
- **THEN** 错误 SHALL 使用客户端协议的格式
|
||||
|
||||
#### Scenario: 多字段错误
|
||||
|
||||
- **WHEN** 多个字段验证失败
|
||||
- **THEN** SHALL 返回所有验证错误
|
||||
- **THEN** SHALL 使用结构化格式(字段名 → 错误消息)
|
||||
|
||||
#### Scenario: 国际化支持
|
||||
|
||||
- **WHEN** 返回验证错误(未来)
|
||||
- **THEN** SHALL 支持错误消息国际化
|
||||
- **THEN** SHALL 使用错误码作为国际化 key
|
||||
|
||||
注:当前版本使用中文错误消息。
|
||||
- **THEN** ConversionError.details SHALL 包含所有验证错误
|
||||
- **THEN** 错误响应 SHALL 包含完整的验证错误信息
|
||||
|
||||
### Requirement: 在 handler 中应用验证
|
||||
|
||||
|
||||
Reference in New Issue
Block a user