feat(models): unifyllm 再加 gpt-5.5 / gpt-5.4-mini 进 pro 档(bump 0.58.1)
- config/models/unifyllm.yaml 新增 gpt55 / gpt54_mini variant(照 gpt56_sol 模板,temp 硬约束 1.0;mini 档 quality 记 good、max_iterations 100) - agent.yaml model_tiers.pro 加 2 条 - diag_unifyllm.py 默认冒烟清单 5→7 个模型(RUN.md 同步),两模型 tool-calling 实测均过 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
5a8f5bd930
commit
86f50ff133
|
|
@ -5,6 +5,10 @@
|
||||||
> 所以不是每个版本号都有条目。条目格式 `## <版本> — <日期>`,新条目加在最上面。
|
> 所以不是每个版本号都有条目。条目格式 `## <版本> — <日期>`,新条目加在最上面。
|
||||||
> 工程口径的完整记录见 `PROGRESS.md` / git log。
|
> 工程口径的完整记录见 `PROGRESS.md` / git log。
|
||||||
|
|
||||||
|
## 0.58.1 — 2026-07-10
|
||||||
|
|
||||||
|
- Pro 档模型选单再新增 2 个国际模型(一个旗舰档、一个轻量快速档),按任务需要选用。
|
||||||
|
|
||||||
## 0.58.0 — 2026-07-10
|
## 0.58.0 — 2026-07-10
|
||||||
|
|
||||||
- Pro 档图像生成新增国际模型后端「GPT 生图」:顶栏图像模型下拉可切换。仅支持文字描述生图(改图、指定尺寸/比例请切回豆包 Seedream),单张约 1 分钟,与豆包共用每日图片配额。
|
- Pro 档图像生成新增国际模型后端「GPT 生图」:顶栏图像模型下拉可切换。仅支持文字描述生图(改图、指定尺寸/比例请切回豆包 Seedream),单张约 1 分钟,与豆包共用每日图片配额。
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
### 2026-07
|
### 2026-07
|
||||||
|
|
||||||
|
- **07-10 / 0.58.1**:**unifyllm 文本模型再加 2 个进 pro 档**——`gpt55`(gpt-5.5)/`gpt54_mini`(gpt-5.4-mini),参数照 gpt56_sol 模板(temp 硬约束 1.0),mini 档 tool_calling/code_quality 记 good、max_iterations 100;网关 `GET /v1/models` 确认模型 ID + diag 冒烟(tool-calling)两模型均过 + `ModelCapabilities.load` 线上路径验证;`diag_unifyllm.py` 默认清单 5→7 个(RUN.md 同步)。
|
||||||
- **07-10 / 0.58.0**:**第二图像后端 gpt_image(unifyllm 网关,pro 档)**——媒体 provider 从豆包单家泛化为多家:新 `config/media/unifyllm.yaml`(image 段 `gpt_image` variant,model=gpt-5.6-sol 渠道)+ 新 tool `tools/gpt_image.py`(仅 prompt 参数——网关实测忽略 size/quality,尺寸上游自动定,不支持 i2i;b64 直落 `figures/`,banner 协议同 seedream,价目未知期 cost 记 0、usage tokens 进 units 留对账)。装配泛化:`ArkConfig.load` 支持通用键名 `api_key_env`/`base_url`(ark_* 旧键兜底);`agent_builder._choose_image_variant` 跨 provider 选 image variant(豆包在前 = 默认仍 seedream_5,本 run 只挂选中的一个图像工具),`_MEDIA_TOOLS_BLOCK` 拆分段按实挂工具拼装(`_media_tools_block`,gpt_image 段自带"不支持改图/尺寸→建议切回 Seedream"红线);web `_list_media_variants` 扫 `config/media/*.yaml`(image/video 清单、admin 门控 catalog 同步泛化,variant key 跨文件唯一、撞名先读生效);`media.js` 三处白名单加 gpt_image(banner/产物 chip/摘要行);prompt 润色 hint 无 default_size 时不再谎报 2048。`gpt_image` 进 pro 档(与 seedream 共享 images_per_day 配额,kind=image 同口径)。手工验证 `scripts/test_gpt_image_manual.py`(variant 选择 4 例 + prompt 块 3 例 + 真调网关落图)全过,unittest 全量 201 过。
|
- **07-10 / 0.58.0**:**第二图像后端 gpt_image(unifyllm 网关,pro 档)**——媒体 provider 从豆包单家泛化为多家:新 `config/media/unifyllm.yaml`(image 段 `gpt_image` variant,model=gpt-5.6-sol 渠道)+ 新 tool `tools/gpt_image.py`(仅 prompt 参数——网关实测忽略 size/quality,尺寸上游自动定,不支持 i2i;b64 直落 `figures/`,banner 协议同 seedream,价目未知期 cost 记 0、usage tokens 进 units 留对账)。装配泛化:`ArkConfig.load` 支持通用键名 `api_key_env`/`base_url`(ark_* 旧键兜底);`agent_builder._choose_image_variant` 跨 provider 选 image variant(豆包在前 = 默认仍 seedream_5,本 run 只挂选中的一个图像工具),`_MEDIA_TOOLS_BLOCK` 拆分段按实挂工具拼装(`_media_tools_block`,gpt_image 段自带"不支持改图/尺寸→建议切回 Seedream"红线);web `_list_media_variants` 扫 `config/media/*.yaml`(image/video 清单、admin 门控 catalog 同步泛化,variant key 跨文件唯一、撞名先读生效);`media.js` 三处白名单加 gpt_image(banner/产物 chip/摘要行);prompt 润色 hint 无 default_size 时不再谎报 2048。`gpt_image` 进 pro 档(与 seedream 共享 images_per_day 配额,kind=image 同口径)。手工验证 `scripts/test_gpt_image_manual.py`(variant 选择 4 例 + prompt 块 3 例 + 真调网关落图)全过,unittest 全量 201 过。
|
||||||
- **07-10 / 0.57.0**:**unifyllm 网关接入(5 个国际旗舰模型进 pro 档)**:新档案 `config/models/unifyllm.yaml`(fable5/opus48/sonnet46/gpt56_sol/gemini31_pro,litellm `openai/` 前缀 + `api_base=https://unifyllm.ai/v1` + `UNIFYLLM_API_KEY`,零代码改动),`agent.yaml model_tiers.pro` 加 5 条。实测坑(全记在 yaml 头注释):gpt-5.x 被 litellm 硬拦 temp≠1、gemini-3.1-pro temp=0.3 返回空 → 两者 `optimal_temperature: 1.0`;`parallel_tool_calls` 参数网关接受(claude 实测 2 并行);流式 + include_usage 5 模型全通。新 `scripts/diag_unifyllm.py`(--stream/--temp,列模型 GET /v1/models)。**部署注意:服务器直连 unifyllm.ai TLS 握手失败,需代理出口(HTTPS_PROXY),部署前先跑 diag 验证**。价格字段暂 0(网关价目未知,成本先记 0)。
|
- **07-10 / 0.57.0**:**unifyllm 网关接入(5 个国际旗舰模型进 pro 档)**:新档案 `config/models/unifyllm.yaml`(fable5/opus48/sonnet46/gpt56_sol/gemini31_pro,litellm `openai/` 前缀 + `api_base=https://unifyllm.ai/v1` + `UNIFYLLM_API_KEY`,零代码改动),`agent.yaml model_tiers.pro` 加 5 条。实测坑(全记在 yaml 头注释):gpt-5.x 被 litellm 硬拦 temp≠1、gemini-3.1-pro temp=0.3 返回空 → 两者 `optimal_temperature: 1.0`;`parallel_tool_calls` 参数网关接受(claude 实测 2 并行);流式 + include_usage 5 模型全通。新 `scripts/diag_unifyllm.py`(--stream/--temp,列模型 GET /v1/models)。**部署注意:服务器直连 unifyllm.ai TLS 握手失败,需代理出口(HTTPS_PROXY),部署前先跑 diag 验证**。价格字段暂 0(网关价目未知,成本先记 0)。
|
||||||
- **07-10 / 0.56.0**:**后台进程 bg proc(DESIGN §8.12)**——解掉"长脚本被工具超时掐死 / 占死 run / 蓝绿切换陪葬"三连:`shell`/`run_python` 加 `background=true`(模型按预计时长自选,前台超时报错里提示改走后台;默认上限 7200s、cap 86400s、每用户并发 3 个 `ZCBOT_MAX_BG_PROCS`),新 `check_process` 工具查状态/日志尾部/kill。状态协议纯文件(`<user_root>/.zcbot_procs/<task_id>/<proc_id>/{proc.json,output.log,exit_code}`,dotfile 用户不可见,exit_code 出现即终态),无 DB 无队列组件。host 模式 detach 独立 wrapper(`core/proc_wrapper.py`,stdlib-only,限时+杀树+截尾 10MB);docker 模式**专用容器** `zcbot-proc-<id>`(`pool.run_proc_container`,同款硬化/iptables init,product=proc + 无 instance label → 与 sandbox 的 idle reaper/shutdown_all 生命周期解耦,dockerd 托管扛蓝绿)。回收:check_process 见终态顺手 rm 容器 + web lifespan 每小时 `procs.sweep`(终态目录 7d TTL、exited 孤儿容器)。**前端可视 + 通知**:`GET /v1/procs`(用户级)+ `POST /v1/tasks/{id}/procs/{pid}/kill` 两端点(纯文件读取无 DB);`procs.js` 把 `[Background]` 工具结果卡活化(spinner+summary 跳秒+停止按钮,与前台工具卡同体验;历史重渲同样恢复活态/终态定格 exit·耗时)+ running→终态弹 toast(右下角,跨 task 也提醒、点击跳转对应任务)+ **对话锁**(bg proc 运行期 composer 发送→停止、Enter 拦截,观感与前台执行一致,完成的那次轮询解锁;锁仅前端,服务端不 409——停止入口须可达);轮询式(仅有 running proc 时 5s 一拉,触发点:登录/选 task/run 收尾/[Background] 工具结果)——不走 SSE,proc 完成时刻往往没有活跃 run。LLM 超时最终定为**显式化默认 600s + env 可调**(长工具已走后台,LLM 单调用无正当 600s 静默;被掐再调 `ZCBOT_LLM_TIMEOUT_S`)。手工验证 `scripts/test_bgproc_manual.py` 全过(win host 模式:启动/探活/exit 0/日志/kill 137/sweep),unittest 全量 201 过。同批带上:**seedance `resume_task_id` 续查**(超时/中断后拿 cgt_id 跳过提交直接续轮询,不过配额闸不重复计费;fast/pro poll_timeout 统一 1200s)+ **LLM 超时显式化**(`core/llm.py` 显式传 litellm timeout,env `ZCBOT_LLM_TIMEOUT_S` 可调,见后)。
|
- **07-10 / 0.56.0**:**后台进程 bg proc(DESIGN §8.12)**——解掉"长脚本被工具超时掐死 / 占死 run / 蓝绿切换陪葬"三连:`shell`/`run_python` 加 `background=true`(模型按预计时长自选,前台超时报错里提示改走后台;默认上限 7200s、cap 86400s、每用户并发 3 个 `ZCBOT_MAX_BG_PROCS`),新 `check_process` 工具查状态/日志尾部/kill。状态协议纯文件(`<user_root>/.zcbot_procs/<task_id>/<proc_id>/{proc.json,output.log,exit_code}`,dotfile 用户不可见,exit_code 出现即终态),无 DB 无队列组件。host 模式 detach 独立 wrapper(`core/proc_wrapper.py`,stdlib-only,限时+杀树+截尾 10MB);docker 模式**专用容器** `zcbot-proc-<id>`(`pool.run_proc_container`,同款硬化/iptables init,product=proc + 无 instance label → 与 sandbox 的 idle reaper/shutdown_all 生命周期解耦,dockerd 托管扛蓝绿)。回收:check_process 见终态顺手 rm 容器 + web lifespan 每小时 `procs.sweep`(终态目录 7d TTL、exited 孤儿容器)。**前端可视 + 通知**:`GET /v1/procs`(用户级)+ `POST /v1/tasks/{id}/procs/{pid}/kill` 两端点(纯文件读取无 DB);`procs.js` 把 `[Background]` 工具结果卡活化(spinner+summary 跳秒+停止按钮,与前台工具卡同体验;历史重渲同样恢复活态/终态定格 exit·耗时)+ running→终态弹 toast(右下角,跨 task 也提醒、点击跳转对应任务)+ **对话锁**(bg proc 运行期 composer 发送→停止、Enter 拦截,观感与前台执行一致,完成的那次轮询解锁;锁仅前端,服务端不 409——停止入口须可达);轮询式(仅有 running proc 时 5s 一拉,触发点:登录/选 task/run 收尾/[Background] 工具结果)——不走 SSE,proc 完成时刻往往没有活跃 run。LLM 超时最终定为**显式化默认 600s + env 可调**(长工具已走后台,LLM 单调用无正当 600s 静默;被掐再调 `ZCBOT_LLM_TIMEOUT_S`)。手工验证 `scripts/test_bgproc_manual.py` 全过(win host 模式:启动/探活/exit 0/日志/kill 137/sweep),unittest 全量 201 过。同批带上:**seedance `resume_task_id` 续查**(超时/中断后拿 cgt_id 跳过提交直接续轮询,不过配额闸不重复计费;fast/pro poll_timeout 统一 1200s)+ **LLM 超时显式化**(`core/llm.py` 显式传 litellm timeout,env `ZCBOT_LLM_TIMEOUT_S` 可调,见后)。
|
||||||
|
|
|
||||||
2
RUN.md
2
RUN.md
|
|
@ -47,7 +47,7 @@
|
||||||
# 未设:unifyllm.* 文本 variant 调用即抛 RuntimeError;gpt_image tool 不注册、
|
# 未设:unifyllm.* 文本 variant 调用即抛 RuntimeError;gpt_image tool 不注册、
|
||||||
# 图像模型下拉仍列出但选了也 fallback 回 seedream(其他模型不影响)。
|
# 图像模型下拉仍列出但选了也 fallback 回 seedream(其他模型不影响)。
|
||||||
# ★ 服务器直连 unifyllm.ai TLS 握手失败,需代理出口(HTTPS_PROXY);
|
# ★ 服务器直连 unifyllm.ai TLS 握手失败,需代理出口(HTTPS_PROXY);
|
||||||
# 部署前 `.venv/Scripts/python.exe scripts/diag_unifyllm.py` 冒烟验证(5 模型 tool-calling)
|
# 部署前 `.venv/Scripts/python.exe scripts/diag_unifyllm.py` 冒烟验证(7 模型 tool-calling)
|
||||||
UNIFYLLM_API_KEY=sk-...
|
UNIFYLLM_API_KEY=sk-...
|
||||||
ZCBOT_DB_URL=postgresql://user:pass@host:5432/zcbot
|
ZCBOT_DB_URL=postgresql://user:pass@host:5432/zcbot
|
||||||
# main.py web 必填(probe/db/user 不验)
|
# main.py web 必填(probe/db/user 不验)
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,8 @@ model_tiers:
|
||||||
- unifyllm.opus48
|
- unifyllm.opus48
|
||||||
- unifyllm.sonnet46
|
- unifyllm.sonnet46
|
||||||
- unifyllm.gpt56_sol
|
- unifyllm.gpt56_sol
|
||||||
|
- unifyllm.gpt55
|
||||||
|
- unifyllm.gpt54_mini
|
||||||
- unifyllm.gemini31_pro
|
- unifyllm.gemini31_pro
|
||||||
- seedream_5
|
- seedream_5
|
||||||
- gpt_image # 图(config/media/unifyllm.yaml image 段,GPT 生图)
|
- gpt_image # 图(config/media/unifyllm.yaml image 段,GPT 生图)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# unifyllm 网关模型档案(https://unifyllm.ai,多协议 LLM 网关)
|
# unifyllm 网关模型档案(https://unifyllm.ai,多协议 LLM 网关)
|
||||||
# 走 OpenAI 兼容端点:litellm `openai/` 前缀 + api_base 覆盖,key 用 Bearer 认证。
|
# 走 OpenAI 兼容端点:litellm `openai/` 前缀 + api_base 覆盖,key 用 Bearer 认证。
|
||||||
# 网关上还有 claude-sonnet-5 / opus 4-5~4-7 / gpt-5.4/5.5 / gemini-3.5-flash 等,
|
# 网关上还有 claude-sonnet-5 / opus 4-5~4-7 / gpt-5.4 / gemini-3.5-flash 等,
|
||||||
# 按需加 variant 即可(GET /v1/models 可拉全量,见 scripts/diag_unifyllm.py)。
|
# 按需加 variant 即可(GET /v1/models 可拉全量,见 scripts/diag_unifyllm.py)。
|
||||||
#
|
#
|
||||||
# 注意事项(2026-07-10 实测,见 diag_unifyllm.py):
|
# 注意事项(2026-07-10 实测,见 diag_unifyllm.py):
|
||||||
|
|
@ -93,6 +93,46 @@ variants:
|
||||||
prompt_caching: false
|
prompt_caching: false
|
||||||
extended_thinking: false
|
extended_thinking: false
|
||||||
|
|
||||||
|
gpt55:
|
||||||
|
display_name: GPT-5.5
|
||||||
|
model_id: openai/gpt-5.5
|
||||||
|
api_base: https://unifyllm.ai/v1
|
||||||
|
api_key_env: UNIFYLLM_API_KEY
|
||||||
|
max_context: 262144
|
||||||
|
reliable_context: 131072
|
||||||
|
max_output: 8192
|
||||||
|
parallel_tools: true
|
||||||
|
tool_calling_quality: excellent
|
||||||
|
thinking_mode: false
|
||||||
|
reasoning_effort_levels: []
|
||||||
|
default_reasoning_effort: ""
|
||||||
|
code_quality: excellent
|
||||||
|
enable_run_python: true
|
||||||
|
max_iterations: 120
|
||||||
|
optimal_temperature: 1.0 # 硬约束:litellm 拦 gpt-5* 的 temp != 1
|
||||||
|
prompt_caching: false
|
||||||
|
extended_thinking: false
|
||||||
|
|
||||||
|
gpt54_mini:
|
||||||
|
display_name: GPT-5.4 Mini
|
||||||
|
model_id: openai/gpt-5.4-mini
|
||||||
|
api_base: https://unifyllm.ai/v1
|
||||||
|
api_key_env: UNIFYLLM_API_KEY
|
||||||
|
max_context: 262144
|
||||||
|
reliable_context: 131072
|
||||||
|
max_output: 8192
|
||||||
|
parallel_tools: true
|
||||||
|
tool_calling_quality: good
|
||||||
|
thinking_mode: false
|
||||||
|
reasoning_effort_levels: []
|
||||||
|
default_reasoning_effort: ""
|
||||||
|
code_quality: good
|
||||||
|
enable_run_python: true
|
||||||
|
max_iterations: 100
|
||||||
|
optimal_temperature: 1.0 # 硬约束:litellm 拦 gpt-5* 的 temp != 1
|
||||||
|
prompt_caching: false
|
||||||
|
extended_thinking: false
|
||||||
|
|
||||||
gemini31_pro:
|
gemini31_pro:
|
||||||
display_name: Gemini 3.1 Pro
|
display_name: Gemini 3.1 Pro
|
||||||
model_id: openai/gemini-3.1-pro-preview
|
model_id: openai/gemini-3.1-pro-preview
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
# zcbot 版本号单一事实源:web/app.py 的 FastAPI version、/healthz 返回、前端展示都引这里。
|
# zcbot 版本号单一事实源:web/app.py 的 FastAPI version、/healthz 返回、前端展示都引这里。
|
||||||
# 改版本只动这一行。
|
# 改版本只动这一行。
|
||||||
__version__ = "0.58.0"
|
__version__ = "0.58.1"
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
用法(.env 在仓库根, 含 UNIFYLLM_API_KEY):
|
用法(.env 在仓库根, 含 UNIFYLLM_API_KEY):
|
||||||
.venv/Scripts/python.exe scripts/diag_unifyllm.py [model_id ...]
|
.venv/Scripts/python.exe scripts/diag_unifyllm.py [model_id ...]
|
||||||
|
|
||||||
不带参数时测默认 5 个精选模型。走 litellm openai/ 前缀 + api_base,
|
不带参数时测默认 7 个精选模型。走 litellm openai/ 前缀 + api_base,
|
||||||
与 core/llm.py 线上路径一致。输出一律 ASCII(Windows 控制台 GBK)。
|
与 core/llm.py 线上路径一致。输出一律 ASCII(Windows 控制台 GBK)。
|
||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
|
|
@ -27,6 +27,8 @@ DEFAULT_MODELS = [
|
||||||
"claude-opus-4-8",
|
"claude-opus-4-8",
|
||||||
"claude-sonnet-4-6",
|
"claude-sonnet-4-6",
|
||||||
"gpt-5.6-sol",
|
"gpt-5.6-sol",
|
||||||
|
"gpt-5.5",
|
||||||
|
"gpt-5.4-mini",
|
||||||
"gemini-3.1-pro-preview",
|
"gemini-3.1-pro-preview",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue