review_routes.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. # -*- coding: utf-8 -*-
  2. """
  3. 配风计划审查接口 —— PDF 上传 + SSE 流式
  4. """
  5. from fastapi import APIRouter, File, Form, UploadFile
  6. from fastapi.responses import StreamingResponse
  7. from agents.review_agent import stream_review
  8. router = APIRouter()
  9. @router.post("/vent/review/pdf")
  10. async def api_review(
  11. file: UploadFile = File(),
  12. session_id: str | None = Form(default=None),
  13. message: str | None = Form(default=None),
  14. force_refresh: bool = Form(default=False),
  15. ):
  16. """配风计划审查接口(SSE 流式)
  17. 用户上传配风计划 PDF 文件,系统自动进行审查:
  18. 1. 基本形式审查(版本、签字、编制时间、计算过程完整性、语病逻辑)
  19. 2. 数据一致性审查(用风地点完整性、瓦斯/CO2一致性、工作面参数、风速温度匹配)
  20. 3. 计算核验过程(逐地点核验需风量计算)
  21. 3个子智能体并行审查,结果汇总后流式返回。
  22. 请求体: multipart/form-data
  23. - file: PDF 文件
  24. - session_id: 可选,会话ID
  25. - message: 可选,附加消息
  26. - force_refresh: 可选,是否强制重新提取(忽略缓存),默认 False
  27. 响应: SSE 流(text/event-stream)
  28. """
  29. return StreamingResponse(
  30. stream_review(file, message, session_id, force_refresh),
  31. media_type="text/event-stream",
  32. headers={
  33. "Cache-Control": "no-cache",
  34. "Connection": "keep-alive",
  35. "X-Accel-Buffering": "no",
  36. "X-Session-Id": session_id or "",
  37. },
  38. )