nodes.py 837 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. from pydantic import BaseModel, Field
  2. from pydantic.dataclasses import dataclass
  3. @dataclass
  4. class LLM:
  5. vendor: str
  6. model: str
  7. class Event(BaseModel):
  8. metadata: dict | None = Field(
  9. default_factory=dict, description='Metadata associated with the event'
  10. )
  11. class Function(BaseModel):
  12. name: str
  13. arguments: dict
  14. class ToolCall(Event):
  15. id: str
  16. type: str
  17. function: Function
  18. class Message(Event):
  19. role: str
  20. content: str | None
  21. tool_calls: list[ToolCall] | None = None
  22. def __rich_repr__(self):
  23. # Print on separate line
  24. yield 'role', self.role
  25. yield 'content', self.content
  26. yield 'tool_calls', self.tool_calls
  27. class ToolOutput(Event):
  28. role: str
  29. content: str
  30. tool_call_id: str | None = None
  31. _tool_call: ToolCall | None = None