Skip to content

Preserve ModelAPI Seedance tasks returned as HTTP 201 - #693

Merged
think-back merged 2 commits into
mainfrom
fix/modelapi-seedance-201-created-20260811
Aug 11, 2026
Merged

Preserve ModelAPI Seedance tasks returned as HTTP 201#693
think-back merged 2 commits into
mainfrom
fix/modelapi-seedance-201-created-20260811

Conversation

@think-back

Copy link
Copy Markdown
Collaborator

⚠️ 提交说明 / PR Notice

📝 变更描述 / Description

生产上的 ModelAPI Seedance 创建接口会以 HTTP 201 Created 表示任务创建成功。公共异步任务 Relay 在调用 provider 的 DoResponse 前只接受 HTTP 200,因此已成功生成的视频会被误判为 fail_to_fetch_task,任务 ID 也不会被 Flatkey 保存。

本 PR 只在 ModelAPI Seedance 适配器内把创建响应的 201 归一化为 200。响应体、error、原有 200、4xx/5xx、proxy 处理、计费、轮询、素材入库、Google 下载代理与白标逻辑均保持不变。公共 Relay 的严格状态码契约不放宽。

该逻辑是请求局部状态转换,多节点之间无共享状态或协调要求。

🚀 变更类型 / Type of change

  • 🐛 Bug 修复 (Bug fix)
  • ✨ 新功能 (New feature)
  • ⚡ 性能优化 / 重构 (Refactor)
  • 📝 文档更新 (Documentation)

🔗 关联任务 / Related Issue

  • 无公开 Issue:来自 2026-08-11 生产事件,修复范围仅为 provider 状态码兼容。

🔎 生产证据 / Root cause evidence

  • 上游创建请求返回 HTTP 201,且任务实际生成完成。
  • Flatkey 在共享 Relay 的非 200 gate 处返回 fail_to_fetch_task,未进入 DoResponse 保存任务 ID。
  • 同一请求的预扣已返还,未产生最终 consume 记录。
  • 接受所有 2xx 会影响全部异步 provider,因此拒绝该方案,采用 provider-local 201 → 200。

✅ 提交前检查项 / Checklist

  • 人工确认: 描述已按实际代码路径整理。
  • 非重复提交: 已搜索 SolveaCX/new-api 的同分支 PR,未发现重复。
  • Bug fix 说明: 本 PR对应已复现的生产错误,不是产品设计偏差。
  • 变更理解: 已核对 DoRequest → 公共 200 gate → DoResponse 的调用顺序。
  • 范围聚焦: 生产代码仅修改 ModelAPI Seedance 的 DoRequest。
  • 本地验证: 已完成临时 RED/GREEN 回归和定向/任务 Relay 验证。
  • 安全合规: 未提交密钥、mock、日志、缓存或生成产物。

📸 运行证明 / Proof of Work

  • 临时本地 HTTP 回归:修复前 201 case 按预期失败(actual 201, want 200)。
  • 修复后同一回归通过:201 → 200,500 保持 500,响应体保持不变。
  • 按运维要求,临时 mock/httptest 代码已在提交前移除。
  • go test ./relay/channel/task/modelapiseedance -count=1:PASS。
  • go test ./relay/channel/task/... -count=1:PASS。
  • go test ./relay/... -run '^$':PASS。
  • go vet ./relay/channel/task/modelapiseedance:PASS。
  • git diff --check:PASS。
  • 未再次发起付费视频生成请求。

🚢 部署建议 / Deployment

  • Router deploy: required,改动位于 /v1/videos provider relay 路径。
  • Other deploy targets: console、website、Terraform、Cloudflare、数据库迁移和运行时配置均不涉及。
  • 最低发布验证:新 Router revision 100% 接流量,https://router.flatkey.ai/api/status 返回 200;不做付费生成 smoke。

Constraint: Production ModelAPI returns 201 Created for successful tasks
Rejected: Accept every 2xx in the shared relay | would change all async providers
Confidence: high
Scope-risk: narrow
Directive: Keep status normalization provider-local unless the shared task contract is deliberately redesigned
Tested: Production log evidence and spec self-review
Not-tested: No additional paid production generation
Constraint: ModelAPI returns 201 Created for successful POST /v1/tasks submissions

Rejected: Accept every 2xx response in the shared task relay | would alter all async providers

Confidence: high

Scope-risk: narrow

Directive: Keep provider-specific success-status normalization inside the adaptor

Tested: temporary local 201/500 HTTP regression, ModelAPI package, task relay suite, relay compile, go vet, diff checks

Not-tested: no second paid production generation; mock regression removed before commit per operator directive
@think-back
think-back merged commit df99ce6 into main Aug 11, 2026
1 check passed
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