sse_events.py 774 B

12345678910111213141516171819202122
  1. """HTTP SSE 编码;事件字段的唯一来源为 runtime.events。"""
  2. from __future__ import annotations
  3. import json
  4. from runtime.events import * # noqa: F401,F403
  5. from runtime.events import EventBuilder, ExecutionEvent
  6. def serialize_event(event: ExecutionEvent) -> str:
  7. return f"data: {json.dumps(event, ensure_ascii=False, default=str)}\n\n"
  8. class EventWriter(EventBuilder[str]):
  9. """兼容既有调用方;把中立事件编码成 SSE 帧。"""
  10. def __init__(self, session_id: str, trace_id: str = ""):
  11. super().__init__(session_id, trace_id, encode=serialize_event)
  12. def frame(self, event_type: str, **fields) -> str:
  13. return self.event(event_type, **fields)
  14. def comment(self, text: str) -> str:
  15. return f": {text}\n\n"