report_parse.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. from fastapi import APIRouter, HTTPException
  2. from pydantic import BaseModel
  3. from typing import Optional
  4. from app.agents.report_parse_agent import ReportParseAgent
  5. import logging
  6. import os
  7. logger = logging.getLogger(__name__)
  8. router = APIRouter(prefix="/api/v1", tags=["report_parse"])
  9. _agent = None
  10. def get_agent():
  11. global _agent
  12. if _agent is None:
  13. _agent = ReportParseAgent()
  14. return _agent
  15. class ParseRequest(BaseModel):
  16. file_path: str
  17. family_id: Optional[int] = None
  18. user_id: Optional[int] = None
  19. class ParseResponse(BaseModel):
  20. code: int = 200
  21. message: str = "ok"
  22. data: dict = {}
  23. @router.post("/report/parse", response_model=ParseResponse)
  24. async def parse_report(req: ParseRequest):
  25. if not os.path.exists(req.file_path):
  26. raise HTTPException(status_code=400, detail=f"文件不存在: {req.file_path}")
  27. logger.info("report_parse: file_path=%s family_id=%s user_id=%s",
  28. req.file_path, req.family_id, req.user_id)
  29. agent = get_agent()
  30. try:
  31. result = await agent.parse(req.file_path)
  32. return ParseResponse(data=result)
  33. except Exception as e:
  34. logger.error("报告解析失败: %s", e, exc_info=True)
  35. return ParseResponse(code=500, message=f"解析失败: {str(e)}", data={})