Skip to content

webui 版本功能请求:为模型供应商增加 Chat Completions 协议支持 #557

Description

@wanggxi

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

具体要求:

  1. 先检查项目结构,找到以下代码:

    • WireApi 枚举和配置解析
    • 模型供应商配置结构
    • Responses 请求构造逻辑
    • HTTP 流式响应解析逻辑
    • 工具调用处理逻辑
    • 现有测试和配置文档
  2. 扩展协议枚举,支持:

    • responses
    • chat
  3. 配置解析器必须接受:

    [model_providers.my-provider]
    name = "My Provider"
    base_url = "https://provider.example/v1"
    env_key = "OPENAI_API_KEY"
    wire_api = "chat"

  4. 保持 Responses 协议完全兼容:

    • responses 继续作为默认值。
    • 现有 Responses 请求路径、请求格式和流式解析行为不能改变。
    • 不要删除或重写无关代码。
  5. 实现 Chat Completions 请求:

    • 将内部输入转换为 messages
    • 正确处理 system、developer、user、assistant、tool 消息。
    • 将内部工具定义转换为 Chat Completions 的 tools 格式。
    • 支持 modelstreamtemperaturemax_tokens 等兼容字段。
    • 对 Chat 不支持的 Responses 专属字段进行合理忽略、转换或明确报错。
    • 正确拼接 base_url,避免重复添加 /v1/chat/completions
  6. 实现 Chat 非流式响应转换:

    • choices[0].message.content 转换为内部文本输出。
    • choices[0].message.tool_calls 转换为内部工具调用。
    • 处理 finish_reasonusage、请求 ID 和错误响应。
  7. 实现 Chat 流式响应转换:

    • 解析 Chat Completions SSE。
    • delta.content 转换为内部文本增量事件。
    • 正确拼接工具调用名称和参数分片。
    • 正确处理 [DONE]、usage、连接中断和错误事件。
  8. 增加测试,至少覆盖:

    • wire_api = "chat" 配置解析。
    • Chat 非流式文本响应。
    • Chat 流式文本响应。
    • 单个工具调用。
    • 多个工具调用。
    • 工具参数分片拼接。
    • Chat 服务端错误。
    • Responses 协议回归测试。
  9. 更新配置文档和示例配置,说明:

    • wire_api = "responses"wire_api = "chat" 的区别。
    • Chat 协议的限制。
    • base_url 应填写 API 根路径。
  10. 执行项目现有的格式化、静态检查和测试命令。若某些测试无法执行,请说明原因。

重要约束:

  • 请直接编辑代码并完成实现,不要停留在分析或计划阶段。
  • 先读取并理解现有实现,再按照项目已有风格修改。
  • 不要使用破坏性 Git 命令。
  • 不要覆盖用户已有的无关修改。
  • 不要修改 API Key、凭证或环境配置。
  • 不要通过简单替换 URL 的方式伪装实现 Chat 协议。
  • 保持现有 Responses 功能不回归。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions