diff --git a/backend/python/app/api/chat.py b/backend/python/app/api/chat.py
index 4b51be8..dac9057 100644
--- a/backend/python/app/api/chat.py
+++ b/backend/python/app/api/chat.py
@@ -1,1497 +1,1505 @@
-"""
-增强版 Chat API — Phase 2.5
-包含: Skill ID统一(MarketApp映射), 真实Skill执行, Agent工作流注入,
- 多轮上下文保持, BM25 KB检索, Function Calling循环增强
-"""
-from fastapi import APIRouter, Depends, HTTPException, Query
-from sqlalchemy.orm import Session
-from sqlalchemy import and_, desc, asc, func
-from pydantic import BaseModel, Field
-from typing import Optional
-import uuid
-from datetime import datetime, timezone, timedelta
-import re
-import json
-import asyncio
-import math
-import httpx
-import os
-import logging
-
-from ..database import get_db, SessionLocal
-from ..models import (
- User, Conversation, Message, AIModel, ModelProvider, TokenUsageLog,
- KnowledgeBase, KnowledgeDocument, KnowledgeDocumentChunk, EvolutionSkill,
- EvolutionTrajectory, MarketApp, AppPurchase, AppInstallation,
- gen_uuid
-)
-from ..auth import get_current_user
-from ..middleware.log_service import LogService
-from ..capability_registry import resolve_auto_model
-
-router = APIRouter()
-
-logger = logging.getLogger(__name__)
-
-
-def detect_media_intent(text: str) -> str | None:
- """根据用户输入判断是否为 图像/视频/语音 生成请求,返回对应能力或 None。
-
- 用于 Auto 模式:用户未指定具体模型时,依据意图自动匹配平台各类能力的默认模型。
- 疑问句(含「吗/呢/怎么/能否」或结尾问号)不触发,避免「你能生成视频吗」被误判。
- """
- if not text:
- return None
- t = text.lower().strip()
- # 疑问句不触发媒体生成
- if t.endswith(("?", "?")) or any(q in t for q in ("吗", "呢", "怎么", "如何", "能否", "是否可以", "可以吗", "会不会", "why", "how")):
- return None
- video_kw = ("视频", "短片", "影片", "vide", "动画视频", "一段视频", "做个视频", "生成视频",
- "视频生成", "来段视频", "拍个视频", "做段视频", "视频剪辑")
- image_kw = ("图片", "图像", "插画", "海报", "照片", "头像", "壁纸", "漫画", "表情包", "logo", "图标",
- "imag", "画一张", "画张", "画一只", "画只", "画个", "画幅",
- "来张", "来一张", "来幅", "发张图", "发个图",
- "生成图片", "生成一张", "生成一幅", "生成图", "图像生成",
- "做一张", "做张图", "做张", "出张图", "出一张图",
- "帮我画", "给我画", "请画", "绘制", "作画", "ai绘画", "ai画图",
- "画个图", "画张图", "画一幅图", "一张图", "一幅画", "生成一幅")
- audio_kw = ("语音", "配音", "朗读", "播报", "念一段", "有声", "tts", "音频", "生成语音",
- "读一下", "念一下", "语音合成")
- if any(k in t for k in video_kw):
- return "video"
- if any(k in t for k in image_kw):
- return "image"
- if any(k in t for k in audio_kw):
- return "audio"
- return None
-
-# CST timezone (UTC+8) for consistent time display
-CST_TZ = timezone(timedelta(hours=8))
-
-
-def cst_now():
- """Get current time in CST timezone"""
- return datetime.now(CST_TZ)
-
-
-def _html_escape(s: str) -> str:
- return (str(s).replace("&", "&").replace("<", "<").replace(">", ">")
- .replace('"', """).replace("'", "'"))
-
-
-async def _generate_media(db, ai_model, prompt: str, user_id: str = None) -> str:
- """图像/视频生成模型统一入口:按 capabilities 调用 AGNES 等媒体生成 API。
- 返回可直接在 AI 聊天中渲染的富文本(含
/