fix: harden memoir image generation flow

This commit is contained in:
Kevin
2026-03-11 11:26:42 +08:00
parent a76cf8da18
commit 00092d34c9
14 changed files with 1162 additions and 69 deletions

View File

@@ -14,6 +14,12 @@ from database.models import Chapter as ChapterModel
from database.models import User as UserModel
from middleware.auth import get_current_user
from agents.prompts.memory_prompts import CHAPTER_CATEGORIES, CHAPTER_ORDER, STAGE_TO_ORDER
from services.memoir_images.schema import (
completed_image_assets,
IMAGE_STATUS_COMPLETED,
normalize_image_assets,
)
from services.memoir_images.settings import MemoirImageSettings
from services.memoir_images.storage import (
TencentCosStorageService,
normalize_cos_url,
@@ -29,9 +35,13 @@ def _normalize_image_assets(images: list[dict] | None) -> list[dict]:
region = os.getenv("TENCENT_COS_REGION", "")
base_url = os.getenv("TENCENT_COS_BASE_URL", "")
storage = TencentCosStorageService.from_env()
settings = MemoirImageSettings.from_env()
source_assets = normalize_image_assets(images)
if not settings.enabled:
source_assets = completed_image_assets(source_assets)
normalized_assets: list[dict] = []
for item in (images or []):
for item in source_assets:
asset = dict(item)
normalized_url = normalize_cos_url(
asset.get("url"),
@@ -40,12 +50,13 @@ def _normalize_image_assets(images: list[dict] | None) -> list[dict]:
base_url=base_url,
)
storage_key = resolve_image_storage_key(asset)
if asset.get("status") == "completed" and storage_key:
if asset.get("status") == IMAGE_STATUS_COMPLETED and storage_key:
try:
asset["url"] = storage.get_download_url(storage_key)
except Exception as exc:
logger.warning("章节图片签名失败: key=%s, error=%s", storage_key, exc)
asset["url"] = normalized_url
asset["error"] = asset.get("error") or "image delivery unavailable"
else:
asset["url"] = normalized_url
asset.pop("storage_key", None)