33 lines
1.2 KiB
Python
33 lines
1.2 KiB
Python
from __future__ import annotations
|
|
|
|
import json
|
|
from http import HTTPStatus
|
|
|
|
from backend.features.mentor.agent import MentorAgentError
|
|
|
|
|
|
class MentorHttpMixin:
|
|
def stream_mentor_chat(self) -> None:
|
|
try:
|
|
body = self.read_json_body()
|
|
stream = self.application_service.mentor_stream(body)
|
|
except (ValueError, json.JSONDecodeError) as exc:
|
|
self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST)
|
|
return
|
|
self.send_response(HTTPStatus.OK)
|
|
self.send_header("Content-Type", "application/x-ndjson; charset=utf-8")
|
|
self.send_header("Cache-Control", "no-cache, no-transform")
|
|
self.send_header("X-Accel-Buffering", "no")
|
|
self.send_header("Connection", "close")
|
|
self.end_headers()
|
|
try:
|
|
for event in stream:
|
|
self._write_stream_event(event)
|
|
self._write_stream_event({"type": "done"})
|
|
except (ValueError, MentorAgentError) as exc:
|
|
self._write_stream_event({"type": "error", "error": str(exc)})
|
|
except (BrokenPipeError, ConnectionResetError):
|
|
pass
|
|
finally:
|
|
self.close_connection = True
|