Skip to content

feat: OpenAI Responses 协议网关 + thinking 透传 + OAuth 双区域 + 部署脚本(2.6.8 后续批次) - #8

Closed
jk-uzi wants to merge 14 commits into
dengyie:mainfrom
jk-uzi:pr/upstream-batch
Closed

jk-uzi wants to merge 14 commits into
dengyie:mainfrom
jk-uzi:pr/upstream-batch

Conversation

@jk-uzi

@jk-uzi jk-uzi commented Oct 5, 2026

Copy link
Copy Markdown

概述

自 bda8ea1(2.6.8)之后的累计变更,共 17 个提交。包含一个新协议网关、若干既有功能增强与部署/工程化改进。全量测试离线可跑(Mock 上游)。

主要内容

1. OpenAI Responses API 网关(新端点 POST /v1/responses)

  • 新增 app/responses_compat.py:responses_to_anthropic / anthropic_to_responses / ResponsesStreamConverter
    • instructions→system;input 条目(message/reasoning/function_call/function_call_output,兼容无 type 的 chat 简写发法)→ Anthropic 消息与块,相邻同角色合并
    • reasoning.effort 映射:minimal/low→low、high→high、xhigh→max(medium 即上游默认档,不带字段)
    • 出站 thinking→reasoning(summary_text)、stop_reason=max_tokens→incomplete
    • 流式为 Responses SSE(event:+data: 帧、sequence_number 递增、无 [DONE] 哨兵、response.completed 收尾)
  • 新增 app/response_store.py:previous_response_id 内存 LRU(256 条、线程锁、重启清零);首轮 input 同样入库,保证第二轮续接不丢首轮 user 内容
  • 路由镜像 chat/completions:鉴权/provider/归一化/reqlog/调度容灾全套复用,_dispatch 与 _try_account 零改动
  • 空映射结果本地 400 早失败(附可读提示),不把空 messages: [] 发上游换语焉不详的 1214
  • 测试:单测 45 + 集成 7(Mock 上游,离线可跑)
  • 真实上游冒烟:非流式 / 流式事件序 / previous_response_id 两轮续接均通过

2. openai-compat thinking 透传(b4bcab3)

  • 请求侧:历史轮 reasoning_content → Anthropic thinking 块(signature 空串可过);reasoning_effort low/high/max 透传上游
  • 响应侧:thinking 块聚合为 message.reasoning_content;流式 thinking_delta → reasoning_content 增量 chunk

3. OAuth 双区域登录入池(025efd7)

  • bigmodel.cn 国内版授权与业务域分域(intl/cn)

4. 部署与工程化

  • Linux/Windows 启动脚本(停止/重启/端口检测/依赖安装/健康检查对齐)+ Docker 部署文件(多阶段镜像:python3.11-slim + node22 + Debian chromium)
  • CI 双平台矩阵(ubuntu+windows)
  • start.sh/start.bat 代理兜底条件化(ALL_PROXY 为非 http(s) scheme 时才剔除);启动前剔除 ALL_PROXY 防 Clash socks:// 注入致 httpx 全量 500
  • 误提交调试残留清理;.gitignore 凭证/杂物兜底(.sg_*、.zcode/ 等)

5. 后台 UI 与文档跟进

  • 设置页布局修复与端点说明补全(居中/全宽、双协议端点清单、网关 Key 提示覆盖范围)
  • README 三协议口径、docs/development/04-api-spec.md 新增 §1.4 端点小节与错误表、测试文档登记 RS-001015 / INT-040045、路线图 M2 对应项打勾

测试

  • 分支 tip 全量 pytest:391 通过(含 Mock 上游集成测试,离线可回归)
  • ruff check app tests 通过;mypy app/constants.py 通过

说明

  • 网关侧新协议不影响既有 /v1/messages(Anthropic 透传语义不变)与 /v1/chat/completions(回归全绿)
  • response_store 为进程内存 LRU(与 reqlog 同哲学:定位续接便利而非持久会话,重启清零,客户端可重发全量 input 兜底)
  • 加密推理(encrypted_content)透传与服务端持久化 store=true 未实现(上游无对应概念),文档已注明

jk-uzi added 14 commits October 4, 2026 12:29
- OAuth flow 按 realm 分域:intl=z.ai(data.zai 会话凭证需 z/login 换业务 token)、
  cn=bigmodel.cn(data.bigmodel 即业务 token,免二次换取);init provider 随区域
- Account 增加 realm 字段并随导出/导入持久化;bigmodel 通道 JWT 凭证自动归位 zai/cn
- 回退 API Key 业务域随区域(cn → open.bigmodel.cn),Plan 通道两端点同域不分
- 后台新增/授权登录支持区域选择;前端账号池展示区域与国内版授权引导
- Mock 上游支持 oauth_poll_realm 场景;新增 realm 单测与 cn 全流程集成测试
- 请求侧:历史轮 reasoning_content → Anthropic thinking 块(signature 空串可过);
  reasoning_effort low/high/max 透传上游,其余值不带(上游不支持关思考)
- 响应侧:thinking 块聚合为 message.reasoning_content(DeepSeek/pi-ai 风格)
- 流式:thinking_delta → reasoning_content 增量 chunk
- start.sh / start.bat:启动/停止/重启语义对齐——停旧实例(serve.pid, 优雅→强杀)、
  端口占用检测、依赖自动安装、后台运行+日志、/meta 健康检查
- .gitattributes:*.bat/*.cmd 强制 CRLF(cmd 对 LF 的 goto/label 有解析怪癖)
- Dockerfile + compose + .dockerignore:多阶段镜像(python3.11-slim + node22 +
  Debian chromium + tini + CJK 字体),数据卷 ./data,.env 不入镜像
- .gitignore:排除 serve.log/pid、.trae_*、.sg_* 等本地运行产物
…cheme(如 Clash 注入的 socks://)时才剔除,正常环境原样启动

- 延迟展开(EnableDelayedExpansion):未定义变量的 %VAR:~0,7% 会在解析期坍缩破坏 if,!VAR! 执行期展开安全
- 扁平顺序判断:管道+|| 嵌套在 if 块内会解析崩坏;输出保持 ASCII(cmd 代码页下中文回显必乱码)
- Windows 变量名不区分大小写,ALL_PROXY 即覆盖 all_proxy
@jk-uzi

jk-uzi commented Oct 5, 2026

Copy link
Copy Markdown
Author

改为拆分提交:本 PR 与已开的 #5/#6/#7 内容大量重叠,将把其后的增量重组为两个独立 PR(/v1/responses 网关、设置页修复)。本 PR 关闭,内容不变。

@jk-uzi jk-uzi closed this Oct 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant