| 123456789101112131415161718192021222324252627282930313233343536373839 | 
							- from datetime import datetime
 
- from typing import Optional
 
- from pydantic import Field as PDField
 
- from sqlalchemy import Index, Column, Enum
 
- from sqlmodel import Field, JSON
 
- from app.models.base_model import BaseModel, TimeStampMixin, PrimaryKeyMixin
 
- class RunStepBase(BaseModel):
 
-     status: str = Field(
 
-         sa_column=Column(Enum("cancelled", "completed", "expired", "failed", "in_progress"), nullable=False)
 
-     )
 
-     type: str = Field(sa_column=Column(Enum("message_creation", "tool_calls"), nullable=False))
 
-     assistant_id: str = Field(nullable=False)
 
-     thread_id: str = Field(nullable=False)
 
-     run_id: str = Field(nullable=False)
 
-     object: str = Field(nullable=False, default="thread.run.step")
 
-     metadata_: Optional[dict] = Field(default=None, sa_column=Column("metadata", JSON), schema_extra={"validation_alias": "metadata"})
 
-     last_error: Optional[dict] = Field(default=None, sa_column=Column(JSON))
 
-     step_details: Optional[dict] = Field(default=None, sa_column=Column(JSON))
 
-     completed_at: Optional[datetime] = Field(default=None)
 
-     cancelled_at: Optional[datetime] = Field(default=None)
 
-     expires_at: Optional[datetime] = Field(default=None)
 
-     failed_at: Optional[datetime] = Field(default=None)
 
-     message_id: Optional[str] = Field(default=None)
 
- class RunStep(RunStepBase, PrimaryKeyMixin, TimeStampMixin, table=True):
 
-     __table_args__ = (
 
-         Index("run_step_run_id_idx", "run_id"),
 
-         Index("run_step_run_id_type_idx", "run_id", "type"),
 
-     )
 
- class RunStepRead(RunStepBase, PrimaryKeyMixin, TimeStampMixin):
 
-     metadata_: Optional[dict] = PDField(default=None, alias="metadata")
 
 
  |