Skip to content

fix(image): repair Tuzi routing and image endpoint fallback#200

Merged
ljquan merged 5 commits into
ljquan:developfrom
AiW520:codex/fix-provider-image-cors
Jul 19, 2026
Merged

fix(image): repair Tuzi routing and image endpoint fallback#200
ljquan merged 5 commits into
ljquan:developfrom
AiW520:codex/fix-provider-image-cors

Conversation

@AiW520

@AiW520 AiW520 commented Jul 19, 2026

Copy link
Copy Markdown

背景

新增供应商并选择 gpt-image-2 后,图片生成可能在等待一段时间后报错:

Tuzi GPT Image request failed: 404 (/v1/images...)

本 PR 修复从跨域请求、API 版本路径、历史 binding 到 Tuzi 多节点识别与回退的完整链路。

最终定位

使用相同 API Key 直接请求:

POST https://api.tu-zi.com/v1/images/generations
model=gpt-image-2

供应商返回 HTTP 200 和有效图片。因此 API Key、Tuzi 主站和 /v1/images/generations 均正常,截图中的 404 来自项目内部路由,而不是站点不可用。

实际根因包括:

  1. Tuzi adapter 盲目信任历史 binding.submitPath,旧配置可能把简化 JSON 请求发到 /images/edits
  2. Tuzi default 分组的简化 JSON 格式,无论文生图还是带参考图,都应使用 /images/generations
  3. 美国、广州、深圳等官方备用节点使用 sydney-ai.comourzhishi.top,旧逻辑只识别 *.tu-zi.com,会把备用节点误判为普通 OpenAI 兼容供应商并选错 adapter。
  4. 设置页的站点测速只验证首页连通性,不能证明图片 POST 路由可用。
  5. 供应商 Base URL、endpoint path 和历史 binding 对 /v1 的表达不一致,可能造成根路径请求或重复 /v1/v1
  6. 跨域图片请求曾无条件附加 X-Request-Id,可能因供应商未放行该自定义头而触发 CORS 预检失败。

修改内容

  • 新增统一的 Tuzi 兼容地址识别:
    • 识别可信的六个官方节点。
    • 继续识别合法的 tu-zi.com 子域名。
    • 不把任意伪造域名加入可信 404 回退范围。
  • Tuzi GPT Image JSON adapter 始终把图片请求规范化到 /images/generations,自动修复历史 /images/edits binding。
  • Tuzi GPT Image 显式使用 ensure-v1
    • https://host + /images/generations -> /v1/images/generations
    • https://host/v1 + /images/generations -> /v1/images/generations
    • https://host/v1 + /v1/images/generations -> /v1/images/generations
  • 可信 Tuzi 节点的图片 POST 返回 404 时,保持请求体、鉴权和 API 版本,尝试其它官方节点。
  • 404 节点回退仅用于可信 Tuzi、相对图片 endpoint 和 POST 请求,不影响普通供应商、绝对 URL 或其它协议。
  • 路由推断、设置仓库、legacy adapter 选择和模型健康状态统一使用 Tuzi 兼容地址识别。
  • 错误消息包含安全的 hostname + pathname,便于区分具体失败节点,同时不暴露 query、Authorization 或 API Key。
  • 设置页继续展示简洁 origin,但保存和切换 Tuzi 节点时规范化为带 /v1 的模型 API Base URL。
  • 保持价格 API 为 origin 下的 /api/pricing,不会错误追加 /v1
  • 仅为受信 Tuzi 同源或开发代理图片请求附加 X-Request-Id,避免跨域供应商额外的 CORS 预检失败。
  • 更新 docs/PROVIDER_IMAGE_ENDPOINT_404_LESSONS.md,记录备用域名、历史 binding 修复、测速边界与回退规则。

验证

自动化

  • 6 个相关测试文件、64 条测试通过:
    • provider routing
    • Tuzi endpoint discovery
    • Tuzi GPT Image adapter
    • image adapter integration
    • settings repository
    • model health
  • pnpm nx typecheck drawnix 通过。
  • pnpm nx build drawnix 通过。
  • pnpm nx build web 通过,包括主应用和 Service Worker 生产构建。
  • 精确 ESLint 检查为 0 error,仅剩测试文件中 2 条既有 no-explicit-any warning。
  • git diff --check 和 API Key 精确扫描通过,敏感信息未写入源码、文档或提交。

真实 API 与浏览器

  • 真实 API 请求 /v1/images/generations 返回 HTTP 200 和有效图片。
  • 本地生产构建中,默认 Tuzi 分组成功获取 447 个模型,选择 gpt-image-2 后生成并插入一张 1254 x 1254 图片。
  • 按用户原始场景新建独立 Tuzi 供应商,填写 API 地址和 Key、获取模型、添加并明确选择该供应商的 gpt-image-2,再次成功生成并插入第二张 1254 x 1254 图片。
  • 两轮生成均未出现本次请求相关的 404 或 CORS 错误。
  • 临时供应商已删除,浏览器中的测试凭据已覆盖清理。

兼容性与风险控制

  • URL 版本段折叠仅在 Base URL 尾部和 path 头部版本段完全相同时发生。
  • ensure-v1 只由 Tuzi GPT Image adapter 显式启用。
  • 404 回退严格限制在可信官方 Tuzi 节点和图片 POST 请求。
  • 普通 OpenAI、Gemini、Google、Suno、Kling、绝对 endpoint 等现有协议不受影响。
  • 生产构建仍会显示仓库既有的 Sass deprecation、Browserslist、动态导入和大 chunk 警告,本次未新增构建错误。

CI 说明

旧提交上的 CI 失败包含仓库基线测试环境问题和 Vercel 授权失败;Netlify deploy preview 成功。最新推送会重新触发远程检查,本 PR 的相关测试、类型检查、生产构建和真实浏览器出图均已在本地通过。

@vercel

vercel Bot commented Jul 19, 2026

Copy link
Copy Markdown

@2040725155-star is attempting to deploy a commit to the ljquan's projects Team on Vercel.

A member of the Team first needs to authorize it.

@netlify

netlify Bot commented Jul 19, 2026

Copy link
Copy Markdown

Deploy Preview for ai-tu ready!

Name Link
🔨 Latest commit 7727f2c
🔍 Latest deploy log https://app.netlify.com/projects/ai-tu/deploys/6a5c6954e35e9e00083a0055
😎 Deploy Preview https://deploy-preview-200--ai-tu.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
Lighthouse
Lighthouse
1 paths audited
Performance: 64
Accessibility: 80
Best Practices: 100
SEO: 90
PWA: 100
View the detailed breakdown and full score reports

To edit notification comments on pull requests, go to your Netlify project configuration.

@AiW520 AiW520 changed the title fix(image): stabilize custom provider image generation fix(image): stabilize provider endpoints and image generation Jul 19, 2026
@AiW520

AiW520 commented Jul 19, 2026

Copy link
Copy Markdown
Author

最新 CI 核对

  • 本轮 drawnix:test 仍为 49 failed / 1011 passed;失败用例与上一轮的 49 个仓库基线失败一致,集中在 Blob/FileReader、IndexedDB/crypto、音频、工作区命名、提示词历史、缓存和模型排序等无关模块。
  • 本次新增或直接相关的测试均在 CI 中通过:provider-endpoint-utils 3/3、runtime-model-discovery 10/10、model-pricing-service 10/10。
  • drawnix 和 Web 生产构建已完成;本地 pnpm nx build drawnixpnpm nx build web 均通过。
  • Bundle Size 仍是既有 AI Chat 超限:847.29 kB / 140 kB,与上一轮超限幅度基本一致。
  • Netlify deploy preview 成功;Vercel 状态为仓库授权失败。

因此当前红灯没有显示本次端点或生图修复引入新的失败。

@ljquan
ljquan merged commit e0e31ac into ljquan:develop Jul 19, 2026
5 of 7 checks passed
@AiW520 AiW520 changed the title fix(image): stabilize provider endpoints and image generation fix(image): repair Tuzi routing and image endpoint fallback Jul 19, 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.

3 participants