| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- 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)
|