sse_core.py 944 B

123456789101112131415161718192021222324252627
  1. """HTTP 流适配器:编码事件并传播断连,不执行 Agent 业务逻辑。"""
  2. from contextlib import aclosing
  3. from typing import AsyncIterator
  4. from runtime.engine import Execution, ExecutionRequest
  5. from runtime.interrupts import pending_interrupts # 兼容旧导入
  6. from api.sse_events import serialize_event
  7. async def stream_sse(execution: Execution) -> AsyncIterator[str]:
  8. async with aclosing(execution.events()) as events:
  9. async for event in events:
  10. yield serialize_event(event)
  11. # 旧内部调用入口保留;新入口直接使用 runtime.execution 和 stream_sse。
  12. StreamRequest = ExecutionRequest
  13. class ChatStream(Execution):
  14. def generate(self) -> AsyncIterator[str]:
  15. return stream_sse(self)
  16. def sse_headers(session_id: str) -> dict[str, str]:
  17. return {"Cache-Control": "no-cache", "Connection": "keep-alive",
  18. "X-Accel-Buffering": "no", "X-Session-Id": session_id}