web版本目前 codeg 的模型供应商默认使用 Responses 协议:
config.toml
wire_api = "responses"
当前行为
使用以下配置时,codeg 会因为不支持 chat 而启动失败:
[model_providers.my-provider]
name = "My Provider"
base_url = "https://provider.example/v1"
env_key = "OPENAI_API_KEY"
wire_api = "chat"
目标:
当前配置只支持:
wire_api = "responses"
请新增:
wire_api = "chat"
当供应商配置为 chat 时,客户端应请求:
POST {base_url}/chat/completions
其中 base_url 仍然表示 API 根路径,例如:
https://provider.example/v1
具体要求:
-
先检查项目结构,找到以下代码:
- WireApi 枚举和配置解析
- 模型供应商配置结构
- Responses 请求构造逻辑
- HTTP 流式响应解析逻辑
- 工具调用处理逻辑
- 现有测试和配置文档
-
扩展协议枚举,支持:
-
配置解析器必须接受:
[model_providers.my-provider]
name = "My Provider"
base_url = "https://provider.example/v1"
env_key = "OPENAI_API_KEY"
wire_api = "chat"
-
保持 Responses 协议完全兼容:
responses 继续作为默认值。
- 现有 Responses 请求路径、请求格式和流式解析行为不能改变。
- 不要删除或重写无关代码。
-
实现 Chat Completions 请求:
- 将内部输入转换为
messages。
- 正确处理 system、developer、user、assistant、tool 消息。
- 将内部工具定义转换为 Chat Completions 的
tools 格式。
- 支持
model、stream、temperature、max_tokens 等兼容字段。
- 对 Chat 不支持的 Responses 专属字段进行合理忽略、转换或明确报错。
- 正确拼接
base_url,避免重复添加 /v1 或 /chat/completions。
-
实现 Chat 非流式响应转换:
- 将
choices[0].message.content 转换为内部文本输出。
- 将
choices[0].message.tool_calls 转换为内部工具调用。
- 处理
finish_reason、usage、请求 ID 和错误响应。
-
实现 Chat 流式响应转换:
- 解析 Chat Completions SSE。
- 将
delta.content 转换为内部文本增量事件。
- 正确拼接工具调用名称和参数分片。
- 正确处理
[DONE]、usage、连接中断和错误事件。
-
增加测试,至少覆盖:
wire_api = "chat" 配置解析。
- Chat 非流式文本响应。
- Chat 流式文本响应。
- 单个工具调用。
- 多个工具调用。
- 工具参数分片拼接。
- Chat 服务端错误。
- Responses 协议回归测试。
-
更新配置文档和示例配置,说明:
wire_api = "responses" 和 wire_api = "chat" 的区别。
- Chat 协议的限制。
base_url 应填写 API 根路径。
-
执行项目现有的格式化、静态检查和测试命令。若某些测试无法执行,请说明原因。
重要约束:
- 请直接编辑代码并完成实现,不要停留在分析或计划阶段。
- 先读取并理解现有实现,再按照项目已有风格修改。
- 不要使用破坏性 Git 命令。
- 不要覆盖用户已有的无关修改。
- 不要修改 API Key、凭证或环境配置。
- 不要通过简单替换 URL 的方式伪装实现 Chat 协议。
- 保持现有 Responses 功能不回归。
web版本目前 codeg 的模型供应商默认使用 Responses 协议:
config.toml
wire_api = "responses"
当前行为
使用以下配置时,codeg 会因为不支持 chat 而启动失败:
[model_providers.my-provider]
name = "My Provider"
base_url = "https://provider.example/v1"
env_key = "OPENAI_API_KEY"
wire_api = "chat"
目标:
当前配置只支持:
wire_api = "responses"
请新增:
wire_api = "chat"
当供应商配置为
chat时,客户端应请求:POST {base_url}/chat/completions
其中
base_url仍然表示 API 根路径,例如:https://provider.example/v1
具体要求:
先检查项目结构,找到以下代码:
扩展协议枚举,支持:
responseschat配置解析器必须接受:
[model_providers.my-provider]
name = "My Provider"
base_url = "https://provider.example/v1"
env_key = "OPENAI_API_KEY"
wire_api = "chat"
保持 Responses 协议完全兼容:
responses继续作为默认值。实现 Chat Completions 请求:
messages。tools格式。model、stream、temperature、max_tokens等兼容字段。base_url,避免重复添加/v1或/chat/completions。实现 Chat 非流式响应转换:
choices[0].message.content转换为内部文本输出。choices[0].message.tool_calls转换为内部工具调用。finish_reason、usage、请求 ID 和错误响应。实现 Chat 流式响应转换:
delta.content转换为内部文本增量事件。[DONE]、usage、连接中断和错误事件。增加测试,至少覆盖:
wire_api = "chat"配置解析。更新配置文档和示例配置,说明:
wire_api = "responses"和wire_api = "chat"的区别。base_url应填写 API 根路径。执行项目现有的格式化、静态检查和测试命令。若某些测试无法执行,请说明原因。
重要约束: