feat(generation): handle media generation failure status
Browse files- Add specific handling for MEDIA_GENERATION_STATUS_FAILED status
- Extract error code and message from operation response
- Update database task status to failed with error details
- Provide user-friendly error messages with retry suggestions
- Add streaming support for error messages in real-time
- Improve error handling for various failure scenarios
src/services/generation_handler.py
CHANGED
|
@@ -745,8 +745,30 @@ class GenerationHandler:
|
|
| 745 |
)
|
| 746 |
return
|
| 747 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 748 |
elif status.startswith("MEDIA_GENERATION_STATUS_ERROR"):
|
| 749 |
-
#
|
| 750 |
yield self._create_error_response(f"视频生成失败: {status}")
|
| 751 |
return
|
| 752 |
|
|
|
|
| 745 |
)
|
| 746 |
return
|
| 747 |
|
| 748 |
+
elif status == "MEDIA_GENERATION_STATUS_FAILED":
|
| 749 |
+
# 生成失败 - 提取错误信息
|
| 750 |
+
error_info = operation.get("operation", {}).get("error", {})
|
| 751 |
+
error_code = error_info.get("code", "unknown")
|
| 752 |
+
error_message = error_info.get("message", "未知错误")
|
| 753 |
+
|
| 754 |
+
# 更新数据库任务状态
|
| 755 |
+
task_id = operation["operation"]["name"]
|
| 756 |
+
await self.db.update_task(
|
| 757 |
+
task_id,
|
| 758 |
+
status="failed",
|
| 759 |
+
error_message=f"{error_message} (code: {error_code})",
|
| 760 |
+
completed_at=time.time()
|
| 761 |
+
)
|
| 762 |
+
|
| 763 |
+
# 返回友好的错误消息,提示用户重试
|
| 764 |
+
friendly_error = f"视频生成失败: {error_message},请重试"
|
| 765 |
+
if stream:
|
| 766 |
+
yield self._create_stream_chunk(f"❌ {friendly_error}\n")
|
| 767 |
+
yield self._create_error_response(friendly_error)
|
| 768 |
+
return
|
| 769 |
+
|
| 770 |
elif status.startswith("MEDIA_GENERATION_STATUS_ERROR"):
|
| 771 |
+
# 其他错误状态
|
| 772 |
yield self._create_error_response(f"视频生成失败: {status}")
|
| 773 |
return
|
| 774 |
|