Skip to content

feat: X(Twitter) resolve 透出全部 mp4 variants(码率升序),供下游 ASR 自选低码率流 - #28

Merged
zj1123581321 merged 8 commits into
masterfrom
card/MediaResolverAPI-20260914-06
Sep 14, 2026
Merged

zj1123581321 merged 8 commits into
masterfrom
card/MediaResolverAPI-20260914-06

Conversation

@zj1123581321

Copy link
Copy Markdown
Collaborator

目标

下游 ASR 场景只需要完整音频轨,不想为高分辨率视频付流量。TikHub 的 X 响应里每个 mp4 variant 已带 bitrate、URL 内嵌分辨率,但本服务选完主流通即丢弃。本 PR 把 X(Twitter) video 模式解析到的全部 mp4 variants 以 data.variants 数组透出(每条含 url/bitrate/width/height/quality,码率升序),下游自取第一条即为最省流量的流。

改动

  • VideoInfo 新增可选 variants 字段并进 to_dict();cache.py 缓存重建透传(直解析与缓存命中两条路径返回一致,有 e2e 回读断言锁定)。
  • twitter.py 复用既有 candidates 构造 variants:排除 HLS,全部 mp4 按 bitrate 升序(无效/0 码率排末尾、同码率按短边升序);bitrate 非法或 0 → null,quality 沿用主字段高度口径 f"{height}p"。
  • resolve.py 新增 VideoVariant 响应模型与 VideoInfoResponse.variants,逐条经 _absolutize_video_url 处理;其他平台与 audio 模式恒为 null。
  • README 补 data.variants 字段说明与示例。

锁定决策

  • 只挂 X(Twitter) video 模式;其余平台/模式为 null(下游 ASR 是唯一消费者,无第二平台需求)。
  • 透出全部 mp4 variants,不设码率/分辨率阈值常量——下游自己决策「多低算低」。
  • 排序:bitrate 升序;缺失/0 排最后;同码率按短边升序。
  • 主选流逻辑(1080p 封顶、quality 参数、download_mode=audio 的 Cobalt 路由)零改动。

已否决方案

  • 硬编码「低码率子集」过滤(如短边 ≤360p)——任意阈值无依据,用户明示下游自己决策。
  • 透出 HLS variant——无离散码率,与 mp4 档位重复。
  • 新增请求参数开关(include_variants)——常驻附加字段即可,开关无第二消费者。
  • 为旧缓存行(无 variants 键)加兼容/回填分支——TTL 有界自然过期;旧行缓存命中时 variants 为 null 是可接受的过渡行为。
  • 顺带修复「quality 用 height 非短边」口径——与既有主字段语义保持一致,单独议题另开。

已知语义边界(backlog,不阻塞)

  • 多视频帖(X 实际一帖一视频,fixture 级边缘情形)的 variants 会混入同帖多个视频的流,不区分归属;下游按 variants[0] 选取时可能拿到非主选视频的低码率流。真实触发概率极低,出现时再收敛(按选中视频过滤)。

验证

  • 全量 uv run --extra dev python -m pytest tests/ -q → 413 passed(基线 410 + 新增 3)。
  • 新增用例红验:对未改生产代码的 base 注入点转红(断言失败型),主脑在 base worktree 抽跑 tests/test_tikhub_provider_twitter.py 新增 3 条同红。
  • 缓存回环 e2e:force_refresh 写入 → 缓存命中回读,响应与 DB 持久化 payload 逐字段相等。
  • diff +229 行,仅触及任务卡允许文件。

Task-Id: MediaResolverAPI-20260914-06

zj1123581321 added 8 commits September 14, 2026 20:26
Agent-Executor: codex
Agent-Model: gpt-5.6-luna
Agent-Effort: xhigh
Dispatch-Id: dlg-20260914-122425-3250c5
Task-Id: MediaResolverAPI-20260914-06
Agent-Executor: codex
Agent-Model: gpt-5.6-luna
Agent-Effort: xhigh
Dispatch-Id: dlg-20260914-122425-3250c5
Task-Id: MediaResolverAPI-20260914-06
Agent-Executor: codex
Agent-Model: gpt-5.6-luna
Agent-Effort: xhigh
Dispatch-Id: dlg-20260914-122425-3250c5
Task-Id: MediaResolverAPI-20260914-06
Agent-Executor: codex
Agent-Model: gpt-5.6-luna
Agent-Effort: xhigh
Dispatch-Id: dlg-20260914-122425-3250c5
Task-Id: MediaResolverAPI-20260914-06
Agent-Executor: codex
Agent-Model: gpt-5.6-luna
Agent-Effort: xhigh
Dispatch-Id: dlg-20260914-122425-3250c5
Task-Id: MediaResolverAPI-20260914-06
Agent-Executor: codex
Agent-Model: gpt-5.6-luna
Agent-Effort: xhigh
Dispatch-Id: dlg-20260914-122425-3250c5
Task-Id: MediaResolverAPI-20260914-06
Agent-Executor: codex
Agent-Model: gpt-5.6-luna
Agent-Effort: xhigh
Dispatch-Id: dlg-20260914-122425-3250c5
Task-Id: MediaResolverAPI-20260914-06
Agent-Executor: codex
Agent-Model: gpt-5.6-luna
Agent-Effort: xhigh
Dispatch-Id: dlg-20260914-122425-3250c5
Task-Id: MediaResolverAPI-20260914-06
@github-actions

Copy link
Copy Markdown

Required Gate v2 — 状态面板

当前状态:skipped · 无需动作(主审未跑,绿≠过审)

主审未跑,绿≠过审。draft / fork / hosted 的跳过不代表真实通过。

当前裁决:expected_skip / review_not_expected

历史可能不完整:1 个制品处理失败:URLError;1 个历史重建预算耗尽

Gate 历史(v1;来源为持久化 gate_terminal 制品)

Run Attempt Head 状态 收件人动作
34844887564 1 3d2cca7 skipped 无需动作(主审未跑,绿≠过审)

历史行按 run_id + run_attempt 去重并只增不删;删除本评论后可由 gate_terminal 制品重建。

@zj1123581321
zj1123581321 marked this pull request as ready for review September 14, 2026 12:51
@github-actions

Copy link
Copy Markdown

⚙️ Review ledger state(机器状态记录,非评审结论)

这是 review ledger 的机器状态记录,不代表评审结论,通常无需任何操作。

机器状态明细
  • Commit: 3d2cca7980bd77588a7236037b4af6df43cfbe01
  • Round: 2
  • Status / findings: pass / 1
  • Reviewer: claude-deepseek-v4-pro (failover)
  • Comparison: same_head_rerun; stable/missing/appeared = 0/0/1

完整数据保存在 codex-review-ledger-v2 artifact;此 sticky comment 仅保存 v2 epoch 的跨 rerun 连续游标。

@zj1123581321
zj1123581321 merged commit 29f0c79 into master Sep 14, 2026
24 checks passed
@zj1123581321
zj1123581321 deleted the card/MediaResolverAPI-20260914-06 branch September 14, 2026 13:02
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