1
0
Files
nex/openspec/changes/refine-conversion-proxy-behavior/tasks.md

52 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 1. 路径与 Adapter 映射
- [x] 1.0 对照 docs/api_reference/openai忽略 responses 目录)和 docs/api_reference/anthropic 确认本次涉及接口的协议原生路径,并将确认结果写入对应 adapter 测试用例
- [x] 1.1 确认 OpenAI adapter 识别剥离协议前缀后的 `/chat/completions``/models``/embeddings``/rerank` 路径并补充测试
- [x] 1.2 确认 Anthropic adapter 识别剥离协议前缀后的 `/v1/messages``/v1/models``/v1/models/{id}` 路径并补充测试
- [x] 1.3 补充 BuildUrl 测试,确认 OpenAI `base_url=http://xxx.com/v1` 组合为 `/v1/chat/completions`Anthropic `base_url=http://xxx.com` 组合为 `/v1/messages`
- [x] 1.4 修改 ConversionEngine 同协议请求 URL 构建逻辑,统一使用 providerAdapter.BuildUrl(nativePath, interfaceType)
- [x] 1.5 更新 ProxyHandler 和路由测试,确认网关只剥离协议前缀,不对 nativePath 添加或移除 `/v1`
## 2. 错误响应与上游透传
- [x] 2.1 增加网关层代理错误响应工具,统一输出 `{error, code}` 和对应 HTTP 状态码
- [x] 2.2 将路由失败、JSON 解析失败、转换失败、上游不可达等网关错误改为应用统一错误格式
- [x] 2.3 在非流式 handler 中对上游非 2xx 响应绕过 ConvertHttpResponse 并透传 status、过滤后的 headers、body
- [x] 2.4 实现 hop-by-hop response header 过滤并补充单元测试
- [x] 2.5 调整 ProviderClient 或调用方错误返回,使未收到上游 HTTP 响应时可返回 `UPSTREAM_UNAVAILABLE`
## 3. 流式链路
- [x] 3.1 调整 ProviderClient 流式能力,使 handler 可区分上游 2xx 流、上游非 2xx 响应和上游不可达错误
- [x] 3.2 实现同协议无 model 改写时的 raw SSE passthrough保留 frame 边界和 `[DONE]`
- [x] 3.3 实现 SSE frame 解析与重建工具,覆盖 LF、CRLF、多 data 行和空 frame
- [x] 3.4 实现同协议流式 Smart Passthrough在 SSE data JSON 内改写 model失败时输出原 frame 并继续
- [x] 3.5 确保跨协议流式仍走 provider StreamDecoder 到 client StreamEncoder 的 CanonicalStreamConverter
## 4. 路由与能力边界
- [x] 4.1 明确 adapter 的 ExtractModelName 只支持已适配接口PASSTHROUGH 或未适配接口返回错误或空结果
- [x] 4.2 修改 ProxyHandler未知接口不做通用顶层 model 猜测,按无 model 请求走 forwardPassthrough
- [x] 4.3 保留原始模型名兼容透传逻辑,有效统一模型 ID 但路由失败时返回 `MODEL_NOT_FOUND`
- [x] 4.4 在跨协议转换中检测 image、audio、video、file 内容块并返回 `UNSUPPORTED_MULTIMODAL`
- [x] 4.5 确保同协议 Smart Passthrough 不因多模态字段存在而拒绝请求
## 5. 测试
- [x] 5.1 补充 OpenAI `/openai/chat/completions` 和 Anthropic `/anthropic/v1/messages` 的 handler、E2E 测试
- [x] 5.2 补充 nativePath 保持协议原生路径的测试,断言 OpenAI adapter 接收 `/chat/completions`、Anthropic adapter 接收 `/v1/messages`
- [x] 5.3 补充同协议流式 raw passthrough 测试,断言 SSE frame 边界和 `[DONE]` 保留
- [x] 5.4 补充同协议流式 Smart Passthrough 测试,断言响应 model 改写为统一模型 ID
- [x] 5.5 补充非流式和流式上游非 2xx 错误透传测试
- [x] 5.6 补充网关层错误统一格式测试,覆盖 `INVALID_JSON``MODEL_NOT_FOUND``CONVERSION_FAILED``UPSTREAM_UNAVAILABLE`
- [x] 5.7 补充未知接口不提取 model 的透传测试
- [x] 5.8 补充跨协议多模态返回 `UNSUPPORTED_MULTIMODAL` 测试
## 6. 文档与验证
- [x] 6.1 更新 README.md 的代理接口路径、错误边界和 base_url 约定说明
- [x] 6.2 更新 backend/README.md 的代理接口路径、错误边界和流式透传说明
- [x] 6.3 更新 docs/conversion_design.md使路径、三车道流式行为、错误处理和 adapter 模型提取边界与实现一致
- [x] 6.4 运行 `go test ./internal/conversion/...` 并确保通过
- [x] 6.5 运行 `go test ./tests/integration` 并确保通过