""" 增强版 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 router = APIRouter() logger = logging.getLogger(__name__) # 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 聊天中渲染的富文本(含 /