analyze.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. from fastapi import APIRouter
  2. from pydantic import BaseModel
  3. from typing import Optional
  4. from app.graphs.analysis_graph import create_analysis_graph
  5. router = APIRouter(prefix="/api/v1", tags=["analyze"])
  6. _graph = None
  7. def get_graph():
  8. global _graph
  9. if _graph is None:
  10. _graph = create_analysis_graph()
  11. return _graph
  12. class AnalyzeRequest(BaseModel):
  13. report_id: int
  14. user_id: int
  15. focus: Optional[str] = None
  16. class AnalyzeResponse(BaseModel):
  17. analysis: str = ""
  18. recommendations: list[str] = []
  19. trace_id: str = ""
  20. @router.post("/analyze", response_model=AnalyzeResponse)
  21. async def analyze(req: AnalyzeRequest):
  22. graph = get_graph()
  23. import uuid
  24. trace_id = str(uuid.uuid4())
  25. result = await graph.ainvoke({
  26. "report_id": req.report_id,
  27. "user_id": req.user_id,
  28. "focus": req.focus,
  29. "report_data": None,
  30. "survey_data": None,
  31. "dimension_scores": None,
  32. "analysis": None,
  33. "recommendations": [],
  34. })
  35. return AnalyzeResponse(analysis=result.get("analysis", ""), trace_id=trace_id)