fix: Worker 配音下载 fallback 到 voice_ids 修复预览无声 #1320

Merged
xiaoxia merged 2 commits from fix/preview-voice-ids-fallback into develop 2026-08-09 14:07:13 +08:00
Owner

问题

前端选择上传音频时,asset_id 放在 voice_ids 数组里,voice_library_id 为空。Worker 的 _download_all_assets() 之前只检查 voice_library_id,导致音频永远不会被下载,预览视频无声。

修复

apps/worker/worker_app/tasks/generation.py_download_all_assets() 函数:

  • 新增 voice_ids 参数
  • voice_library_id 为空但 voice_ids 非空时,使用 voice_ids[0] 作为音频 asset_id 下载
  • 优先级:voice_library_id > voice_ids[0]
  • 向后兼容:voice_ids 默认 None,不影响现有调用方

测试

新增 6 个单元测试(tests/unit/test_preview_voice_ids_fallback.py):

  • voice_library_id 优先使用
  • fallback 到 voice_ids[0]
  • 两者都为空时不下载
  • voice_ids 为 None 时不下载
  • 多元素取第一个
  • 向后兼容(不传 voice_ids)

全部 104 个相关测试通过(generation_preview + preview_voice_library_id + preview_voice_ids_fallback + preview_voice_injection + confirm_generation)。

## 问题 前端选择上传音频时,asset_id 放在 `voice_ids` 数组里,`voice_library_id` 为空。Worker 的 `_download_all_assets()` 之前只检查 `voice_library_id`,导致音频永远不会被下载,预览视频无声。 ## 修复 改 `apps/worker/worker_app/tasks/generation.py` 中 `_download_all_assets()` 函数: - 新增 `voice_ids` 参数 - 当 `voice_library_id` 为空但 `voice_ids` 非空时,使用 `voice_ids[0]` 作为音频 asset_id 下载 - 优先级:`voice_library_id` > `voice_ids[0]` - 向后兼容:`voice_ids` 默认 `None`,不影响现有调用方 ## 测试 新增 6 个单元测试(`tests/unit/test_preview_voice_ids_fallback.py`): - voice_library_id 优先使用 - fallback 到 voice_ids[0] - 两者都为空时不下载 - voice_ids 为 None 时不下载 - 多元素取第一个 - 向后兼容(不传 voice_ids) 全部 104 个相关测试通过(generation_preview + preview_voice_library_id + preview_voice_ids_fallback + preview_voice_injection + confirm_generation)。
xiaoxia added 1 commit 2026-08-09 13:57:28 +08:00
fix: Worker 配音下载 fallback 到 voice_ids 修复预览无声
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 37s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 56s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m6s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 26s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m24s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m34s
AI Code Review / AI Code Review (pull_request) Successful in 1m55s
CI/CD Pipeline / Validate - Code Quality (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / PR Build API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
PR Automation / Auto Approve on CI Green (pull_request) Has been cancelled
4d27f1ed2c
当前端选择上传音频时,asset_id 放在 voice_ids 数组里,
voice_library_id 为空。Worker 的 _download_all_assets() 之前
只检查 voice_library_id,导致音频永远不会被下载。

修复:当 voice_library_id 为空但 voice_ids 非空时,
使用 voice_ids[0] 作为音频 asset_id 进行下载。
优先级:voice_library_id > voice_ids[0]。

新增 6 个单元测试覆盖 fallback 逻辑。

🚀 预览环境已部署

项目 详情
PR号 #1320
预览链接 https://pr-1320.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1320 | | 预览链接 | [https://pr-1320.preview.xiaoxiajianji.com](https://pr-1320.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
auto-approve-bot added 1 commit 2026-08-09 13:59:53 +08:00
style: auto-format with black + isort + prettier [skip ci-format-check]
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 38s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 53s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m8s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m34s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m39s
AI Code Review / AI Code Review (pull_request) Successful in 1m46s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 2m6s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 2m5s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 2m16s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m36s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 4m38s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m15s
CI/CD Pipeline / CI Gate (pull_request) Successful in 6s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 45s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 1m0s
16af9ce316
Collaborator

【阻塞级判定】

  • 是否存在阻塞级问题:否
  • 阻塞级问题数量:0 个

📊 审查概览

  • 整体评价:通过
  • 建议级问题数量:0 个

🔴 阻塞级问题(必须修复)

💡 改进建议(不阻塞合并)

良好实践

  1. 测试覆盖全面:新增的单元测试覆盖了优先级逻辑、Fallback 逻辑、空值/None 边界条件以及向后兼容性场景,确保了代码变更的健壮性。
  2. 逻辑清晰:使用 effective_voice_id 变量明确表达了意图,代码可读性高。
  3. 日志完善:增加了区分来源的日志记录,便于后续排查问题。

🤖 由 AI 代码审查机器人自动生成 | 2026-08-09 06:01:39 | 模型:

### 【阻塞级判定】 - 是否存在阻塞级问题:否 - 阻塞级问题数量:0 个 ### 📊 审查概览 - 整体评价:通过 - 建议级问题数量:0 个 ### 🔴 阻塞级问题(必须修复) 无 ### 💡 改进建议(不阻塞合并) 无 ### ✅ 良好实践 1. **测试覆盖全面**:新增的单元测试覆盖了优先级逻辑、Fallback 逻辑、空值/None 边界条件以及向后兼容性场景,确保了代码变更的健壮性。 2. **逻辑清晰**:使用 `effective_voice_id` 变量明确表达了意图,代码可读性高。 3. **日志完善**:增加了区分来源的日志记录,便于后续排查问题。 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-08-09 06:01:39 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
auto-approve-bot approved these changes 2026-08-09 14:05:31 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-08-09 14:05:31 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
xiaoxia merged commit a75fa1cd93 into develop 2026-08-09 14:07:13 +08:00

🗑️ 预览环境已清理

PR #1320 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #1320 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.