Skip to content

refactor(providers): 把视频协议提取为显式接缝 - #562

Merged
johnnyzhang-eng merged 1 commit into
1024XEngineer:mainfrom
johnnyzhang-eng:refactor/video-job-protocol
Aug 24, 2026
Merged

refactor(providers): 把视频协议提取为显式接缝#562
johnnyzhang-eng merged 1 commit into
1024XEngineer:mainfrom
johnnyzhang-eng:refactor/video-job-protocol

Conversation

@johnnyzhang-eng

Copy link
Copy Markdown
Contributor

Closes #561
#332 第 6.2 节的接口实现,本 PR 只做提取,不接新协议面。

新增 providers/protocol/JobProtocol 接口(build_submit / parse_submit / build_poll / parse_poll / build_fetch)与 OpenAI 面实现。协议层只产出纯数据,不发请求、不重试、不休眠;轮询节奏、52x 重发与下载仍归 adapter。鉴权头由协议层产出而不由厂商层统一注入——Key 与 Bearer 写反时的响应与「模型不存在」难以区分。

两处对 #332 原文的偏离,需要评审确认:

  • parse_poll 多收一个 job_id 参数。原文签名是 parse_poll(resp) -> AdapterResult,但错误路径要把单号带回去,否则重试会新开一单、二次计费。
  • AdapterResult 增加可选字段 result_url。OpenAI 面的产物地址在轮询响应里,协议层需要一个交回它的位置;不加就得另造一个平行的结果类型,而 Proposal: 接入 Fal 队列协议面,并把协议表达为显式接缝 #332 明确要求沿用同一个。

edge_fingerprint_DIAGNOSTIC_HEADERS 迁到 gateway.classify:视频面与图像面都要用,留在任一 provider 里会造成循环导入;异常路径的 edge 本来就由 classify_exception 产出,同一处。

行为不变由既有 sufy 视频用例约束。新增 12 条脱网单测覆盖两层之间的契约、鉴权头、以及字段选择。三个 mutation 实测全部转红:

改回什么 结果
鉴权头 BearerKey
未完成的轮询也带上 error_type 红(adapter 会把处理中的任务当失败)
image_list 带上 data: 前缀

还原后文件 sha256 与改动前一致。

本分支验证:ruff check . 通过、lint-imports 2 kept 0 broken、export_openapiopenapi.json 无漂移、pytest -q 1341 passed / 14 skipped(较基线 +12 条新用例)。

@vercel

vercel Bot commented Aug 23, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
windup Ignored Ignored Preview Aug 24, 2026 4:11am

@codecov

codecov Bot commented Aug 23, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 96.99248% with 4 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
...indup_framework/providers/protocol/openai_video.py 96.34% 3 Missing ⚠️
...s/framework/src/windup_framework/providers/sufy.py 95.45% 1 Missing ⚠️

📢 Thoughts on this report? Let us know!

@fennoai fennoai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

已审阅固定范围 17b25a723410244d9f0a68209d3c946ca0698b56...0d6a0ba2dc7caae19124a2961ce8ac1ea96ea366 的完整改动,重点核对了视频协议提取、AdapterResult 字段契约、轮询错误/计费状态、鉴权头与图像面共享的边缘指纹逻辑。没有发现满足报告门槛的新增正确性、可靠性或安全问题。

验证:python3 -m compileallgit diff --check 通过;当前环境未安装 pytest/uv,因此未能执行运行时测试。

@johnnyzhang-eng

Copy link
Copy Markdown
Contributor Author

#543 在 sufy.py 上会冲突:#543 把 _fit_first_frame 的放大改成 NEAREST,本 PR 把这个函数整体搬去了 protocol/openai_video.py。先合哪个都行,但解冲突时要把 NEAREST 那一行带进搬过去的那份;实测「取重构那一侧」的天真解法会让 #543 的 test_upscaling_a_small_sprite_keeps_hard_edges_instead_of_interpolating_them 变红,所以漏了不会静默,但会白跑一轮 CI。

xyh202131
xyh202131 previously approved these changes Aug 24, 2026
请求构造与响应解析原先写死在 sufy.py 的条件分支里,路径、鉴权与轮询协议三样都由
adapter 自己拼。新增一个协议面因此只能继续往同一个文件里加分支 —— 上一次那样做的
412 行最终被整体删除,理由是接不进产品链路。

协议层只产出纯数据:build_submit/parse_submit/build_poll/parse_poll/build_fetch 都是纯
函数,不发请求、不重试、不休眠;轮询节奏与 52x 重发仍归 adapter。鉴权头由协议层产出
而不由厂商层统一注入,因为 Key 与 Bearer 写反时的响应与"模型不存在"难以区分。

edge_fingerprint 迁到 gateway.classify:视频面与图像面都要用,留在任一 provider 里会造成
循环导入。AdapterResult 加 result_url —— OpenAI 面的产物地址在轮询响应里,协议层需要
一个交回它的位置,否则只能另造一个平行的结果类型。

OpenAI 面行为不变,由既有 sufy 视频用例约束;新增 12 条脱网单测覆盖两层之间的契约
(未完成时 error_type 为 None)、鉴权头、以及 image_list 与 input_reference 的字段选择。
@johnnyzhang-eng

Copy link
Copy Markdown
Contributor Author

已 rebase 到 main(#543 合入之后)。#543 改的正是本 PR 搬走的那个函数,解冲突时把「放大用 NEAREST」连同说明一起带进了 protocol/openai_video.py 的 fit_first_frame,仓内 grep 只此一处、#543 的用例照常绿。

@johnnyzhang-eng johnnyzhang-eng added the enhancement New feature or request label Aug 24, 2026
@johnnyzhang-eng
johnnyzhang-eng merged commit 539f736 into 1024XEngineer:main Aug 24, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

refactor(providers): 把视频协议提取为显式接缝

2 participants