style: auto-format with black + isort + ruff + prettier [skip ci-format-check]
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2s
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 3s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
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 / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker 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 / PR Build API Image (pull_request) Successful in 38s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 48s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 3m4s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 3m13s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m18s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 3m24s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 4m5s
AI Code Review / AI Code Review (pull_request) Successful in 6m46s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 8m11s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 10m54s
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 / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Failing after 1s
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 7m46s

This commit is contained in:
CI Bot
2026-10-06 05:18:02 +00:00
parent 2d811fccf1
commit dbc684db2f
7 changed files with 28 additions and 12 deletions
@@ -10,6 +10,7 @@
import json
import sqlalchemy as sa
from alembic import op
revision = "099_ai_model_router_seed"
+17 -6
View File
@@ -425,7 +425,7 @@ def _step_intent_parsing(job: ViralVideoJob, image_analysis: dict) -> dict:
except ImportError:
return {"intent": "推广产品", "key_messages": ["产品亮点"], "tone": "专业", "suggested_title": ""}
_llm_client = ai_router.get_llm_client('intent_parsing')
_llm_client = ai_router.get_llm_client("intent_parsing")
if not _llm_client.is_available:
return {"intent": "推广产品", "key_messages": ["产品亮点"], "tone": "专业", "suggested_title": ""}
@@ -480,9 +480,14 @@ def _step_intent_parsing(job: ViralVideoJob, image_analysis: dict) -> dict:
_s = get_shared_settings()
try:
from packages.shared.ai_router import ai_router
_cap = ai_router.get_capability('intent_parsing')
_cap = ai_router.get_capability("intent_parsing")
_fast = (_cap.primary_model.model_key if _cap and _cap.primary_model else None) or _s.doubao_fast_model
_pro = (_cap.lite_model.model_key if _cap and _cap.lite_model else None) or (_cap.primary_model.model_key if _cap and _cap.primary_model else None) or _s.doubao_model
_pro = (
(_cap.lite_model.model_key if _cap and _cap.lite_model else None)
or (_cap.primary_model.model_key if _cap and _cap.primary_model else None)
or _s.doubao_model
)
except Exception:
_fast = _s.doubao_fast_model
_pro = _s.doubao_model
@@ -839,7 +844,7 @@ def _step_script_generation(job: ViralVideoJob, intent: dict, image_analysis: di
except ImportError:
return _fallback_script(job)
_llm_client2 = ai_router.get_llm_client('storyboard')
_llm_client2 = ai_router.get_llm_client("storyboard")
if not _llm_client2.is_available:
return _fallback_script(job)
@@ -916,9 +921,15 @@ def _step_script_generation(job: ViralVideoJob, intent: dict, image_analysis: di
_s = get_shared_settings()
try:
from packages.shared.ai_router import ai_router
_cap = ai_router.get_capability('storyboard')
_cap = ai_router.get_capability("storyboard")
_fast = (_cap.primary_model.model_key if _cap and _cap.primary_model else None) or _s.doubao_fast_model
_pro = (_cap.lite_model.model_key if _cap and _cap.lite_model else None) or (_cap.primary_model.model_key if _cap and _cap.primary_model else None) or getattr(_s, "doubao_model", None) or _fast
_pro = (
(_cap.lite_model.model_key if _cap and _cap.lite_model else None)
or (_cap.primary_model.model_key if _cap and _cap.primary_model else None)
or getattr(_s, "doubao_model", None)
or _fast
)
except Exception:
_fast = _s.doubao_fast_model
_pro = getattr(_s, "doubao_model", None) or _fast
+3 -2
View File
@@ -352,10 +352,11 @@ class CosyVoiceService:
确保 CosyVoice 服务器能下载参考音频.
"""
# 优先从 ai_router 获取 DB 配置
_router_key, _router_url, _router_model = '', '', ''
_router_key, _router_url, _router_model = "", "", ""
try:
from packages.shared.ai_router import ai_router
tts_client = ai_router.get_tts_client('tts')
tts_client = ai_router.get_tts_client("tts")
if tts_client and tts_client.is_available:
_router_key = tts_client.api_key
_router_url = tts_client.base_url
+3 -1
View File
@@ -57,9 +57,11 @@ class Reviewer:
if client is None:
try:
from packages.shared.ai_router import ai_router
client = ai_router.get_llm_client('copy_review')
client = ai_router.get_llm_client("copy_review")
except Exception:
from packages.shared.ai_client import get_doubao_client
client = get_doubao_client()
self.client = client
+3 -1
View File
@@ -25,7 +25,9 @@ def _get_redis_client():
from packages.shared.config import get_shared_settings
settings = get_shared_settings()
redis_url = getattr(settings, "redis_url", None) or getattr(settings, "celery_broker_url", "redis://localhost:6379/0")
redis_url = getattr(settings, "redis_url", None) or getattr(
settings, "celery_broker_url", "redis://localhost:6379/0"
)
return _redis.Redis.from_url(redis_url, decode_responses=True, socket_timeout=2)
except Exception as e:
logger.warning("AI config version: Redis 客户端初始化失败: %s", e)
-1
View File
@@ -15,7 +15,6 @@ from __future__ import annotations
import logging
import threading
from dataclasses import dataclass
from typing import Optional
from packages.shared.config import get_shared_settings
+1 -1
View File
@@ -4,9 +4,9 @@ from __future__ import annotations
import sys
import unittest
from unittest.mock import MagicMock, patch
from dataclasses import dataclass
from typing import Optional
from unittest.mock import MagicMock, patch
# ── Pre-mock heavy import chain to avoid pulling in full app ──
_mock_config = MagicMock()