events.py 809 B

12345678910111213141516171819202122232425262728293031
  1. """Agent Runtime Event 与 SSE 传输协议。"""
  2. import json
  3. from datetime import datetime
  4. from typing import Any, Literal
  5. from pydantic import BaseModel, ConfigDict, Field
  6. class RuntimeEvent(BaseModel):
  7. model_config = ConfigDict(extra="forbid")
  8. event: Literal[
  9. "run.started",
  10. "tool.completed",
  11. "ui.ready",
  12. "run.completed",
  13. "run.failed",
  14. ]
  15. run_id: str
  16. sequence: int = Field(ge=1)
  17. occurred_at: datetime
  18. data: dict[str, Any] = Field(default_factory=dict)
  19. def to_sse(self) -> str:
  20. payload = self.model_dump(mode="json")
  21. return (
  22. f"id: {self.run_id}:{self.sequence}\n"
  23. f"event: {self.event}\n"
  24. f"data: {json.dumps(payload, ensure_ascii=False, separators=(',', ':'))}\n\n"
  25. )