/v1
chat
text
images
image_generate
openai_provider_model.txt
.git/info/exclude
真实请求可能产生少量上游费用。回退时停用本任务创建的路由、模型和 Provider,不删除审计或生成记录,不恢复已退役凭据。
用户已于 2026-08-25 明确授权:允许对本机 chorus 数据库执行 migration 5 → 8。将先备份并停止 Portal/Admin API,迁移后核对版本,再继续配置与单次真实验证。
chorus
route_unavailable / upstream request failed
/models
当前工单明确不修改 SSRF。建议另建高风险单元工单:增加显式的 CHORUS_PROVIDER_ALLOWED_PORTS 环境配置,默认保持 80,443,本机设为 80,443,8080;Portal worker 与管理端连通性探针共用此配置,现有 DNS 后/Dial 前私网拦截、重定向和结果 URL 校验保持不变。需要用户确认该安全边界变化后才能实施。完成后仍需先解决或确认上游模型标识,再各做至多一次受控复验。
CHORUS_PROVIDER_ALLOWED_PORTS
80,443
80,443,8080
retryable=false
upstream_unknown / upstream request failed
route_unavailable
不再提交真实生成请求。需要 Provider 方提供该地址实际支持的精确文本模型、图片模型,以及图片是否实现 OpenAI-compatible /images/generations 和 b64_json/URL 响应契约。若该地址没有图片能力,则应停用 image_generate 路由并改用另一个 Provider。
/images/generations
b64_json
gpt-image-2
gpt-5.6-sol
若继续使用当前地址,只能从其 /models 公布列表中选择一个文本模型做 chat 验证;图片生成需要 Provider 方提供另一个明确支持 /images/generations 的地址和精确模型 ID。不得猜测图片模型或继续反复试错。
bearer
需要先修正系统 Provider 的地址/Key 配对,使 /models 返回 200,再检查精确模型 ID。
API Key 更新为 credential version 3 后,使用系统当前 Provider 配置查询 /models 返回 HTTP 200,共 21 个模型;已确认精确包含 gpt-image-2,同时公布 gpt-image-1 和 gpt-image-1.5。本次仅查询模型元数据,未发起生成请求,未记录凭据。
gpt-image-1
gpt-image-1.5
retryable=true
CHORUS_PROVIDER_HTTP_TIMEOUT_SECONDS
结论:本次失败是等待上游响应超时。建议把 Provider HTTP timeout 调到 120 秒,同时把 worker lease 调到至少 126 秒(建议 150 秒),满足“lease 必须比 HTTP timeout 多 5 秒以上”;重启 Portal 后只做一次图片复验。该配置变化尚未执行,等待用户确认。
--config portal/config/settings.yml
gpt-image-2 / images
timeout_ms=120000
直接原因是上游在 120 秒内没有返回。客户端侧无法区分正常生成较慢、上游排队或图片端点挂起。建议下一次受控验证同时把 YAML provider.http_timeout_seconds 调到 300、worker.lease_seconds 调到 360,并把管理端 ProviderModel timeout_ms 调到 300000;重启 Portal 后只提交一次图片任务。若仍在 300 秒整超时,应停止客户端扩时并检查 Provider 网关日志/图片协议支持。
provider.http_timeout_seconds
worker.lease_seconds
timeout_ms
本轮只读诊断,没有自动提交生成请求或修改配置。
#58 受控复验结果:generation #8 仅调用上游 1 次并成功,Provider 审计耗时 70331 ms,生成 1 个受保护输出。由此确认 gpt-image-2、当前凭据和 OpenAI-compatible 图片链路可用;此前 45/120 秒失败属于超时窗口过短。#58 已进入待验收,未重复消耗上游额度。
--config
extra_body
latency_ms=300014
upstream_timeout
max_failover=0
upstream request failed
/v1/images/generations
model
prompt
n=1
response_format=b64_json
size
quality
/images/edits
response_format
补充对照结论(2026-08-25,已按用户更正核对 D:\chengma\cmhub,未执行真实上游调用):
D:\chengma\cmhub
images_edits
/v1/images/edits
api_type=auto
/v1/chat/completions
upstream_timeout/upstream_error
结论:用户观察到 cmhub 多数 150 秒内成功,不能据此判断 Chorus 本地处理慢。当前首要差异是 API 类型/请求体,其次是重试和超时策略。由于本机无法连接 cmhub 当前数据库,尚不能只读确认其线上该模型的实际 api_type;后续诊断需先确认这一字段并对齐一次脱敏请求元数据,禁止记录 URL、密钥、prompt、图片或 Provider 原始响应。
api_type
用户于 2026-08-25 确认:cmhub 中该模型的实际 api_type=auto。结合配置使用的是仅到 /v1 的基础地址,cmhub 的 detect_api_type() 会将其解析为 chat,最终通过 ChatCompletionsProvider.generate_image() 调用 /v1/chat/completions。因此已确认 cmhub 与 Chorus 当前 /v1/images/generations + response_format=b64_json 的调用协议不同,这是两边耗时和成功率不可直接比较的首要原因。
detect_api_type()
ChatCompletionsProvider.generate_image()
更正上一条判断:用户确认 cmhub 的模型 URL 路径已经包含 /v1/images/edits(此处不记录具体主机)。因此 api_type=auto 会在 detect_api_type() 中优先解析为 images_edits,不会解析为 chat。
已确认的实际差异:
POST /v1/images/edits
POST /v1/images/generations
因此 cmhub 多数 150 秒内成功与 Chorus 本次 300 秒超时并非同一种上游请求;首要诊断结论仍是协议/输入形态不一致,而不是 Chorus 本地排队慢。上一条关于 cmhub 实际走 chat/completions 的结论作废。
chat/completions
2026-08-27:前置安全工单 #55 已由用户验收并关闭,原阻塞条件解除。#54 仍缺少一次生文和一次文生图受控终态验证,现恢复为“待实施”;本次不自动发起真实 Provider 请求。
No dependencies set.
The note is not visible to the blocked user.
基本信息
原始需求
已确认方案
/v1端点,Bearer 凭据仅从本地未跟踪文件读取。chat协议,能力text。images协议,能力image_generate。做什么 / 不做什么
安全边界
openai_provider_model.txt已加入本仓库本地.git/info/exclude,不提交到 Git。验收标准
文档影响
风险与回退
真实请求可能产生少量上游费用。回退时停用本任务创建的路由、模型和 Provider,不删除审计或生成记录,不恢复已退役凭据。
用户已于 2026-08-25 明确授权:允许对本机
chorus数据库执行 migration 5 → 8。将先备份并停止 Portal/Admin API,迁移后核对版本,再继续配置与单次真实验证。2026-08-25 受控验证结果与阻塞
chorus数据库从 migration 5 升级到 8;升级前已创建仓库外备份,up 执行成功。route_unavailable / upstream request failed,没有输出结果。/models返回 HTTP 200,说明地址与凭据有效;配置文件中的两个精确模型名不在该列表中。停止原因
当前工单明确不修改 SSRF。建议另建高风险单元工单:增加显式的
CHORUS_PROVIDER_ALLOWED_PORTS环境配置,默认保持80,443,本机设为80,443,8080;Portal worker 与管理端连通性探针共用此配置,现有 DNS 后/Dial 前私网拦截、重定向和结果 URL 校验保持不变。需要用户确认该安全边界变化后才能实施。完成后仍需先解决或确认上游模型标识,再各做至多一次受控复验。2026-08-25 用户端复现后的进一步诊断
retryable=false,脱敏错误为upstream_unknown / upstream request failed。route_unavailable不同,这次已经越过出站端口白名单并到达上游,证明 #55 的本机配置生效。/models元数据比对:HTTP 200,共公布 10 个模型;当前配置的文本、图片模型均不存在,公布列表中也没有名称可识别的图片生成模型。停止条件
不再提交真实生成请求。需要 Provider 方提供该地址实际支持的精确文本模型、图片模型,以及图片是否实现 OpenAI-compatible
/images/generations和b64_json/URL 响应契约。若该地址没有图片能力,则应停用 image_generate 路由并改用另一个 Provider。2026-08-25 模型改名后核对
gpt-image-2;本地受保护源文件仍保留旧拼写,二者当前不一致。/models实际公布的 10 个 ID 全部是 Claude 文本模型(fable/opus/sonnet/haiku 系列),没有任何 GPT 或图片模型。因此gpt-image-2与gpt-5.6-sol都不是该地址公布的模型,不能继续按这两个 ID 验证。需要确认的配置变化
若继续使用当前地址,只能从其
/models公布列表中选择一个文本模型做 chat 验证;图片生成需要 Provider 方提供另一个明确支持/images/generations的地址和精确模型 ID。不得猜测图片模型或继续反复试错。2026-08-25 API Key 更新后
/models核对/models查询;Provider 保持bearer且启用。gpt-image-2。需要先修正系统 Provider 的地址/Key 配对,使
/models返回 200,再检查精确模型 ID。API Key 更新为 credential version 3 后,使用系统当前 Provider 配置查询
/models返回 HTTP 200,共 21 个模型;已确认精确包含gpt-image-2,同时公布gpt-image-1和gpt-image-1.5。本次仅查询模型元数据,未发起生成请求,未记录凭据。2026-08-25 credential v3 后最新图片失败诊断
retryable=true,终态route_unavailable。/models已返回 200 并精确公布gpt-image-2,因此本次不是模型不存在或 400/401。CHORUS_PROVIDER_HTTP_TIMEOUT_SECONDS默认值完全吻合;ProviderModel 虽配置更长 timeout_ms,但共享 SafeHTTP 的 45 秒总超时先触发。结论:本次失败是等待上游响应超时。建议把 Provider HTTP timeout 调到 120 秒,同时把 worker lease 调到至少 126 秒(建议 150 秒),满足“lease 必须比 HTTP timeout 多 5 秒以上”;重启 Portal 后只做一次图片复验。该配置变化尚未执行,等待用户确认。
2026-08-25 Portal YAML 重启后图片任务 #7 诊断
--config portal/config/settings.yml启动;generation #7 于 15:17:42 创建,确定使用新 YAML 和 credential version 3。retryable=true,终态route_unavailable;相较 #6 的 45,002ms,证明全局 HTTP timeout 已从 45 秒变为 120 秒。gpt-image-2 / images,启用,模型级timeout_ms=120000。因此全局 SafeHTTP 与模型请求上下文都在 120 秒到期。/models已确认模型存在,当前凭据能返回 200;本次没有 400/401/模型不存在证据。结论与下一步
直接原因是上游在 120 秒内没有返回。客户端侧无法区分正常生成较慢、上游排队或图片端点挂起。建议下一次受控验证同时把 YAML
provider.http_timeout_seconds调到 300、worker.lease_seconds调到 360,并把管理端 ProviderModeltimeout_ms调到 300000;重启 Portal 后只提交一次图片任务。若仍在 300 秒整超时,应停止客户端扩时并检查 Provider 网关日志/图片协议支持。本轮只读诊断,没有自动提交生成请求或修改配置。
#58 受控复验结果:generation #8 仅调用上游 1 次并成功,Provider 审计耗时 70331 ms,生成 1 个受保护输出。由此确认
gpt-image-2、当前凭据和 OpenAI-compatible 图片链路可用;此前 45/120 秒失败属于超时窗口过短。#58 已进入待验收,未重复消耗上游额度。重启后 generation #9 失败诊断(2026-08-25)
--config,实际 YAML 仍为 Provider HTTP 300 秒、worker lease 360 秒;ProviderModel #4 仍为 300000 ms。extra_body为空。latency_ms=300014、retryable=true、底层错误upstream_timeout,无输出。max_failover=0,所以超时后没有第二家可切换,生成最终错误被汇总为route_unavailable;页面显示通用upstream request failed。补充对比结论(2026-08-25)
/v1/images/generations,JSON 字段为model、prompt、n=1、response_format=b64_json;当前模型没有size、quality等 extra_body。/images/edits图片编辑端点且默认 600 秒超时,不能作为同条件对照。本机未找到另一个使用当前主机和/images/generations的实现。response_format、size/quality、代理和并发都可能改变耗时。现有安全审计没有 DNS/连接/TTFB/响应体分段,因此精确定位需要先增加不记录凭据或正文的 HTTP 阶段计时,再由用户授权一次同请求 A/B。补充对照结论(2026-08-25,已按用户更正核对
D:\chengma\cmhub,未执行真实上游调用):gpt-image-2配置为images_edits,调用/v1/images/edits,使用 multipart 并要求原图;Chorus 当前任务调用/v1/images/generations,JSON 请求且固定response_format=b64_json。两者不是同一种生成请求。api_type=auto且 URL 仅到/v1,其代码会将其解析为chat并调用/v1/chat/completions,同样不会走 Chorus 当前的 images generations 路径。upstream_timeout/upstream_error默认最多重试 2 次(最多 3 次调用,退避 10/30 秒);Chorus 当前 route 只有一个成员且max_failover=0,本次只调用一次。upstream_timeout,因此不是本地队列或 Portal HTTP 超时导致,时间几乎全部消耗在上游响应等待。结论:用户观察到 cmhub 多数 150 秒内成功,不能据此判断 Chorus 本地处理慢。当前首要差异是 API 类型/请求体,其次是重试和超时策略。由于本机无法连接 cmhub 当前数据库,尚不能只读确认其线上该模型的实际
api_type;后续诊断需先确认这一字段并对齐一次脱敏请求元数据,禁止记录 URL、密钥、prompt、图片或 Provider 原始响应。用户于 2026-08-25 确认:cmhub 中该模型的实际
api_type=auto。结合配置使用的是仅到/v1的基础地址,cmhub 的detect_api_type()会将其解析为chat,最终通过ChatCompletionsProvider.generate_image()调用/v1/chat/completions。因此已确认 cmhub 与 Chorus 当前/v1/images/generations+response_format=b64_json的调用协议不同,这是两边耗时和成功率不可直接比较的首要原因。更正上一条判断:用户确认 cmhub 的模型 URL 路径已经包含
/v1/images/edits(此处不记录具体主机)。因此api_type=auto会在detect_api_type()中优先解析为images_edits,不会解析为chat。已确认的实际差异:
POST /v1/images/edits,multipart,包含原图、prompt、model、n、size。POST /v1/images/generations,JSON,当前任务无原图,包含 model、prompt、n、response_format=b64_json。因此 cmhub 多数 150 秒内成功与 Chorus 本次 300 秒超时并非同一种上游请求;首要诊断结论仍是协议/输入形态不一致,而不是 Chorus 本地排队慢。上一条关于 cmhub 实际走
chat/completions的结论作废。2026-08-27:前置安全工单 #55 已由用户验收并关闭,原阻塞条件解除。#54 仍缺少一次生文和一次文生图受控终态验证,现恢复为“待实施”;本次不自动发起真实 Provider 请求。