run_step.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. from datetime import datetime
  2. from typing import Optional
  3. from pydantic import Field as PDField
  4. from sqlalchemy import Index, Column, Enum
  5. from sqlmodel import Field, JSON
  6. from app.models.base_model import BaseModel, TimeStampMixin, PrimaryKeyMixin
  7. class RunStepBase(BaseModel):
  8. status: str = Field(
  9. sa_column=Column(Enum("cancelled", "completed", "expired", "failed", "in_progress"), nullable=False)
  10. )
  11. type: str = Field(sa_column=Column(Enum("message_creation", "tool_calls"), nullable=False))
  12. assistant_id: str = Field(nullable=False)
  13. thread_id: str = Field(nullable=False)
  14. run_id: str = Field(nullable=False)
  15. object: str = Field(nullable=False, default="thread.run.step")
  16. metadata_: Optional[dict] = Field(default=None, sa_column=Column("metadata", JSON), schema_extra={"validation_alias": "metadata"})
  17. last_error: Optional[dict] = Field(default=None, sa_column=Column(JSON))
  18. step_details: Optional[dict] = Field(default=None, sa_column=Column(JSON))
  19. completed_at: Optional[datetime] = Field(default=None)
  20. cancelled_at: Optional[datetime] = Field(default=None)
  21. expires_at: Optional[datetime] = Field(default=None)
  22. failed_at: Optional[datetime] = Field(default=None)
  23. message_id: Optional[str] = Field(default=None)
  24. class RunStep(RunStepBase, PrimaryKeyMixin, TimeStampMixin, table=True):
  25. __table_args__ = (
  26. Index("run_step_run_id_idx", "run_id"),
  27. Index("run_step_run_id_type_idx", "run_id", "type"),
  28. )
  29. class RunStepRead(RunStepBase, PrimaryKeyMixin, TimeStampMixin):
  30. metadata_: Optional[dict] = PDField(default=None, alias="metadata")