## ADDED Requirements ### Requirement: 网关层代理错误使用应用统一格式 系统 SHALL 对代理接口中由网关自身产生的错误使用应用统一错误响应格式。 #### Scenario: 标准网关错误格式 - **WHEN** 代理接口返回网关层错误 - **THEN** SHALL 使用以下 JSON 格式: ```json { "error": "错误描述", "code": "ERROR_CODE" } ``` - **THEN** `error` 字段 SHALL 包含人类可读的错误描述 - **THEN** `code` 字段 SHALL 包含机器可读的错误码 #### Scenario: 网关错误码集合 - **WHEN** 代理接口返回网关层错误 - **THEN** code SHALL 使用以下枚举之一:`INVALID_JSON`、`INVALID_REQUEST`、`INVALID_MODEL_ID`、`MODEL_NOT_FOUND`、`PROVIDER_NOT_FOUND`、`UNSUPPORTED_INTERFACE`、`UNSUPPORTED_MULTIMODAL`、`CONVERSION_FAILED`、`UPSTREAM_UNAVAILABLE` ### Requirement: 代理接口上游错误透传 系统 SHALL 对代理接口中已经收到的上游 HTTP 错误响应执行透明透传。 #### Scenario: 非流式上游非 2xx 响应 - **WHEN** 非流式代理请求收到上游 HTTP 响应且状态码不是 2xx - **THEN** SHALL 透传上游 status code - **THEN** SHALL 透传过滤 hop-by-hop header 后的上游 headers - **THEN** SHALL 透传上游 body - **THEN** SHALL NOT 将上游错误包装为应用统一错误 - **THEN** SHALL NOT 将上游错误转换为客户端协议错误格式 #### Scenario: 流式上游非 2xx 响应 - **WHEN** 流式代理请求收到上游 HTTP 响应且状态码不是 2xx - **THEN** SHALL 透传上游 status code - **THEN** SHALL 透传过滤 hop-by-hop header 后的上游 headers - **THEN** SHALL 透传上游 body - **THEN** SHALL NOT 创建 StreamConverter ### Requirement: 上游不可达错误 系统 SHALL 在没有收到上游 HTTP 响应时返回网关层错误。 #### Scenario: 上游连接失败 - **WHEN** ProviderClient 因 DNS、连接失败、TLS、超时或上下文取消等原因无法获得上游 HTTP 响应 - **THEN** SHALL 返回 HTTP 502 或合适的 5xx 状态码 - **THEN** SHALL 返回应用统一错误格式 - **THEN** code SHALL 为 `UPSTREAM_UNAVAILABLE` ### Requirement: Hop-by-hop header 过滤 系统 SHALL 在透传上游错误响应时过滤 hop-by-hop headers。 #### Scenario: 过滤连接级 header - **WHEN** 透传上游错误响应 headers - **THEN** SHALL 过滤 `Connection`、`Transfer-Encoding`、`Keep-Alive`、`Proxy-Authenticate`、`Proxy-Authorization`、`TE`、`Trailer`、`Upgrade` - **THEN** SHALL 保留 `Content-Type` 等普通响应 header ## MODIFIED Requirements ### Requirement: JSON 格式错误 系统 SHALL 对请求体 JSON 格式错误返回明确的错误信息。 #### Scenario: 请求体 JSON 格式错误 - **WHEN** 代理请求的请求体不是有效的 JSON 格式,且该接口需要网关解析请求体 - **THEN** SHALL 返回 HTTP 400 Bad Request - **THEN** SHALL 返回以下 JSON 格式: ```json { "error": "请求体 JSON 格式错误", "code": "INVALID_JSON" } ``` #### Scenario: Smart Passthrough 时请求体 JSON 格式错误 - **WHEN** 同协议 Smart Passthrough 场景下,请求体 JSON 格式不正确 - **THEN** SHALL 返回 HTTP 400 Bad Request - **THEN** SHALL 返回以下 JSON 格式: ```json { "error": "请求体 JSON 格式错误", "code": "INVALID_JSON" } ```