| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- from fastapi import APIRouter, HTTPException
- from pydantic import BaseModel
- from typing import Optional
- from app.agents.report_parse_agent import ReportParseAgent
- import logging
- import os
- logger = logging.getLogger(__name__)
- router = APIRouter(prefix="/api/v1", tags=["report_parse"])
- _agent = None
- def get_agent():
- global _agent
- if _agent is None:
- _agent = ReportParseAgent()
- return _agent
- class ParseRequest(BaseModel):
- file_path: str
- family_id: Optional[int] = None
- user_id: Optional[int] = None
- class ParseResponse(BaseModel):
- code: int = 200
- message: str = "ok"
- data: dict = {}
- @router.post("/report/parse", response_model=ParseResponse)
- async def parse_report(req: ParseRequest):
- if not os.path.exists(req.file_path):
- raise HTTPException(status_code=400, detail=f"文件不存在: {req.file_path}")
- logger.info("report_parse: file_path=%s family_id=%s user_id=%s",
- req.file_path, req.family_id, req.user_id)
- agent = get_agent()
- try:
- result = await agent.parse(req.file_path)
- return ParseResponse(data=result)
- except Exception as e:
- logger.error("报告解析失败: %s", e, exc_info=True)
- return ParseResponse(code=500, message=f"解析失败: {str(e)}", data={})
|