agent.py 1.1 KB

123456789101112131415161718192021222324252627
  1. import json
  2. from fastapi import APIRouter
  3. from fastapi.responses import StreamingResponse
  4. from app.agents.mermaid_agent_service import MermaidAgentService
  5. from app.models.schemas import AgentChatRequest
  6. router = APIRouter(prefix="/api", tags=["agent"])
  7. agent_service = MermaidAgentService()
  8. @router.post("/agent/chat/stream")
  9. async def stream_agent_chat(payload: AgentChatRequest):
  10. async def event_generator():
  11. try:
  12. async for event in agent_service.stream_chat(payload.mode, payload.prompt, payload.direction):
  13. yield f"event: {event.get('type', 'message')}\n"
  14. yield f"data: {json.dumps(event, ensure_ascii=False)}\n\n"
  15. except Exception as exc:
  16. error_event = {"type": "error", "message": f"流式服务异常: {str(exc)}"}
  17. yield "event: error\n"
  18. yield f"data: {json.dumps(error_event, ensure_ascii=False)}\n\n"
  19. yield "event: done\n"
  20. yield f"data: {json.dumps({'type': 'done'}, ensure_ascii=False)}\n\n"
  21. return StreamingResponse(event_generator(), media_type="text/event-stream")