from fastapi import APIRouter, UploadFile, File, Form from typing import Optional from app.agents.multimodal_agent import TongueDiagnosisAgent import logging logger = logging.getLogger(__name__) router = APIRouter(prefix="/api/v1", tags=["tongue"]) _agent: Optional[TongueDiagnosisAgent] = None def get_agent() -> TongueDiagnosisAgent: global _agent if _agent is None: _agent = TongueDiagnosisAgent() return _agent @router.post("/tongue/diagnose") async def tongue_diagnose( file: UploadFile = File(...), user_id: int = Form(...), prompt_template: Optional[str] = Form(None), ): """舌诊分析: 上传舌苔图片, 返回分析结果""" agent = get_agent() import tempfile, os ext = os.path.splitext(file.filename or "tongue.jpg")[1] or ".jpg" tmp = tempfile.NamedTemporaryFile(delete=False, suffix=ext) content = await file.read() tmp.write(content) tmp.close() try: import base64 b64 = base64.b64encode(content).decode() data_url = f"data:image/{ext[1:]};base64,{b64}" result = await agent.diagnose(image_url=data_url, user_id=user_id, prompt_template=prompt_template) return {"code": 200, "data": result} except Exception as e: logger.error("舌诊分析失败: %s", e, exc_info=True) return {"code": 500, "message": "舌诊分析失败"} finally: os.unlink(tmp.name)