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

3.9 KiB
Raw Blame History

1. 路径与 Adapter 映射

  • 1.0 对照 docs/api_reference/openai忽略 responses 目录)和 docs/api_reference/anthropic 确认本次涉及接口的协议原生路径,并将确认结果写入对应 adapter 测试用例
  • 1.1 确认 OpenAI adapter 识别剥离协议前缀后的 /chat/completions/models/embeddings/rerank 路径并补充测试
  • 1.2 确认 Anthropic adapter 识别剥离协议前缀后的 /v1/messages/v1/models/v1/models/{id} 路径并补充测试
  • 1.3 补充 BuildUrl 测试,确认 OpenAI base_url=http://xxx.com/v1 组合为 /v1/chat/completionsAnthropic base_url=http://xxx.com 组合为 /v1/messages
  • 1.4 修改 ConversionEngine 同协议请求 URL 构建逻辑,统一使用 providerAdapter.BuildUrl(nativePath, interfaceType)
  • 1.5 更新 ProxyHandler 和路由测试,确认网关只剥离协议前缀,不对 nativePath 添加或移除 /v1

2. 错误响应与上游透传

  • 2.1 增加网关层代理错误响应工具,统一输出 {error, code} 和对应 HTTP 状态码
  • 2.2 将路由失败、JSON 解析失败、转换失败、上游不可达等网关错误改为应用统一错误格式
  • 2.3 在非流式 handler 中对上游非 2xx 响应绕过 ConvertHttpResponse 并透传 status、过滤后的 headers、body
  • 2.4 实现 hop-by-hop response header 过滤并补充单元测试
  • 2.5 调整 ProviderClient 或调用方错误返回,使未收到上游 HTTP 响应时可返回 UPSTREAM_UNAVAILABLE

3. 流式链路

  • 3.1 调整 ProviderClient 流式能力,使 handler 可区分上游 2xx 流、上游非 2xx 响应和上游不可达错误
  • 3.2 实现同协议无 model 改写时的 raw SSE passthrough保留 frame 边界和 [DONE]
  • 3.3 实现 SSE frame 解析与重建工具,覆盖 LF、CRLF、多 data 行和空 frame
  • 3.4 实现同协议流式 Smart Passthrough在 SSE data JSON 内改写 model失败时输出原 frame 并继续
  • 3.5 确保跨协议流式仍走 provider StreamDecoder 到 client StreamEncoder 的 CanonicalStreamConverter

4. 路由与能力边界

  • 4.1 明确 adapter 的 ExtractModelName 只支持已适配接口PASSTHROUGH 或未适配接口返回错误或空结果
  • 4.2 修改 ProxyHandler未知接口不做通用顶层 model 猜测,按无 model 请求走 forwardPassthrough
  • 4.3 保留原始模型名兼容透传逻辑,有效统一模型 ID 但路由失败时返回 MODEL_NOT_FOUND
  • 4.4 在跨协议转换中检测 image、audio、video、file 内容块并返回 UNSUPPORTED_MULTIMODAL
  • 4.5 确保同协议 Smart Passthrough 不因多模态字段存在而拒绝请求

5. 测试

  • 5.1 补充 OpenAI /openai/chat/completions 和 Anthropic /anthropic/v1/messages 的 handler、E2E 测试
  • 5.2 补充 nativePath 保持协议原生路径的测试,断言 OpenAI adapter 接收 /chat/completions、Anthropic adapter 接收 /v1/messages
  • 5.3 补充同协议流式 raw passthrough 测试,断言 SSE frame 边界和 [DONE] 保留
  • 5.4 补充同协议流式 Smart Passthrough 测试,断言响应 model 改写为统一模型 ID
  • 5.5 补充非流式和流式上游非 2xx 错误透传测试
  • 5.6 补充网关层错误统一格式测试,覆盖 INVALID_JSONMODEL_NOT_FOUNDCONVERSION_FAILEDUPSTREAM_UNAVAILABLE
  • 5.7 补充未知接口不提取 model 的透传测试
  • 5.8 补充跨协议多模态返回 UNSUPPORTED_MULTIMODAL 测试

6. 文档与验证

  • 6.1 更新 README.md 的代理接口路径、错误边界和 base_url 约定说明
  • 6.2 更新 backend/README.md 的代理接口路径、错误边界和流式透传说明
  • 6.3 更新 docs/conversion_design.md使路径、三车道流式行为、错误处理和 adapter 模型提取边界与实现一致
  • 6.4 运行 go test ./internal/conversion/... 并确保通过
  • 6.5 运行 go test ./tests/integration 并确保通过