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={})