refactor: 统一任务框架 Phase 3 - 用 TaskService/FailoverEngine 替代 FallbackOrchestrator

核心重构:
- 移除 FallbackOrchestrator,用 TaskService + FailoverEngine 替代
- TaskService 作为统一入口,支持 SYNC/ASYNC 两种任务模式
- FailoverEngine 实现候选遍历、重试、故障转移逻辑
- 新增 AttemptFunc/AttemptResult 协议,统一尝试结果表示

功能改进:
- 流式响应首字节探测(30s 超时,空流触发故障转移)
- 流式取消归因优化(区分客户端断连 vs 服务端中断)
- 新增 OpenAI Sora 视频取消路由 POST /v1/videos/{task_id}/cancel
- OpenAI 流式请求自动添加 stream_options.include_usage

代码规范:
- 修复 loguru 日志格式(%s → {})
- 新增 FORMAT_CONVERSION_ENABLED 环境变量说明

测试覆盖:
- test_failover_engine.py: FailoverEngine 单元测试
- test_task_service_async_execute.py: TaskService ASYNC 模式测试
- test_video_cancel_e2e.py: 视频取消端到端测试
This commit is contained in:
fawney19
2026-02-02 21:16:28 +08:00
parent ebe1a8d3e3
commit ed68aebfb0
53 changed files with 3966 additions and 2256 deletions
+11
View File
@@ -49,3 +49,14 @@ ADMIN_PASSWORD=admin123456
#
# required 维度缺失时是否拒绝请求/标记任务失败(默认 falsecost=0 + 标记 incomplete
# BILLING_STRICT_MODE=false
# ==================== 格式转换(可选) ====================
# FORMAT_CONVERSION_ENABLED: 总开关(默认 true
# - false: 禁止任何跨格式转换(即使端点 format_acceptance_config 已开启也不生效)
# - true: 允许跨格式转换(是否允许仍取决于:全局覆盖/提供商覆盖/端点策略)
# FORMAT_CONVERSION_ENABLED=true
#
# KEEP_PRIORITY_ON_CONVERSION: 跨格式转换时是否保持优先级(默认 false)
# - false: needs_conversion 的候选会整体降级到 exact 候选之后(更安全)
# - true: 所有候选保持原优先级(用于强制走某些 provider)
# KEEP_PRIORITY_ON_CONVERSION=false