## 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` 并确保通过