tongue.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. from fastapi import APIRouter, UploadFile, File, Form
  2. from typing import Optional
  3. from app.agents.multimodal_agent import TongueDiagnosisAgent
  4. import logging
  5. logger = logging.getLogger(__name__)
  6. router = APIRouter(prefix="/api/v1", tags=["tongue"])
  7. _agent: Optional[TongueDiagnosisAgent] = None
  8. def get_agent() -> TongueDiagnosisAgent:
  9. global _agent
  10. if _agent is None:
  11. _agent = TongueDiagnosisAgent()
  12. return _agent
  13. @router.post("/tongue/diagnose")
  14. async def tongue_diagnose(
  15. file: UploadFile = File(...),
  16. user_id: int = Form(...),
  17. ):
  18. """舌诊分析: 上传舌苔图片, 返回分析结果"""
  19. agent = get_agent()
  20. import tempfile, os
  21. ext = os.path.splitext(file.filename or "tongue.jpg")[1] or ".jpg"
  22. tmp = tempfile.NamedTemporaryFile(delete=False, suffix=ext)
  23. content = await file.read()
  24. tmp.write(content)
  25. tmp.close()
  26. try:
  27. import base64
  28. b64 = base64.b64encode(content).decode()
  29. data_url = f"data:image/{ext[1:]};base64,{b64}"
  30. result = await agent.diagnose(image_url=data_url, user_id=user_id)
  31. return {"code": 200, "data": result}
  32. except Exception as e:
  33. logger.error("舌诊分析失败: %s", e, exc_info=True)
  34. return {"code": 500, "message": "舌诊分析失败"}
  35. finally:
  36. os.unlink(tmp.name)