1
0

fix: Anthropic 流式编码器补全 message_start/message_delta 必填字段

跨协议流式转换时,Anthropic 客户端 Zod 校验因 SSE 事件缺少必填字段报错。
由 Anthropic encoder 层(而非 OpenAI decoder 层)负责补全协议默认值,保持权责分离。

- encodeMessageStart 补全 type/content/stop_reason/stop_sequence,usage nil 时输出零值
- encodeMessageDelta usage nil 时输出零值
- 更新相关测试覆盖新增行为
This commit is contained in:
2026-04-26 23:27:34 +08:00
parent 9622d44aac
commit 38a2555c7b
3 changed files with 90 additions and 7 deletions

View File

@@ -239,6 +239,26 @@ Decoder 几乎 1:1 映射,维护最小状态机:
- **WHEN** delta.type == "thinking_delta"
- **THEN** SHALL 编码为 Anthropic thinking_delta
#### Scenario: message_start 事件编码完整 message 字段
- **WHEN** 编码 MessageStartEvent
- **THEN** SHALL 输出 `message` 对象包含以下字段:
- `id`: 来自 event.Message.ID
- `type`: 固定值 `"message"`
- `role`: 固定值 `"assistant"`
- `content`: 固定值 `[]`(空数组)
- `model`: 来自 event.Message.Model
- `stop_reason`: 固定值 `null`
- `stop_sequence`: 固定值 `null`
- `usage`: 来自 event.Message.Usage若 Usage 为 nilSHALL 输出 `{"input_tokens": 0, "output_tokens": 0}`
#### Scenario: message_delta 事件编码包含 usage 字段
- **WHEN** 编码 MessageDeltaEvent
- **THEN** SHALL 输出 `usage` 字段
- **WHEN** event.Usage 为 nil
- **THEN** SHALL 输出 `{"output_tokens": 0}`
### Requirement: Anthropic 错误编码
系统 SHALL 实现 Anthropic 协议的错误编码。