|
- # defines how core data types in autogenstudio are serialized and stored in the database
-
- from datetime import datetime
- from enum import Enum
- from typing import List, Optional, Union
- from uuid import UUID, uuid4
-
- from autogen_core import ComponentModel
- from pydantic import ConfigDict
- from sqlalchemy import ForeignKey, Integer
- from sqlmodel import JSON, Column, DateTime, Field, SQLModel, func
-
- from .types import MessageConfig, MessageMeta, TeamResult
-
-
- class Team(SQLModel, table=True):
- __table_args__ = {"sqlite_autoincrement": True}
- id: Optional[int] = Field(default=None, primary_key=True)
- created_at: datetime = Field(
- default_factory=datetime.now,
- sa_column=Column(DateTime(timezone=True), server_default=func.now()),
- ) # pylint: disable=not-callable
- updated_at: datetime = Field(
- default_factory=datetime.now,
- sa_column=Column(DateTime(timezone=True), onupdate=func.now()),
- ) # pylint: disable=not-callable
- user_id: Optional[str] = None
- version: Optional[str] = "0.0.1"
- component: Union[ComponentModel, dict] = Field(sa_column=Column(JSON))
-
-
- class Message(SQLModel, table=True):
- __table_args__ = {"sqlite_autoincrement": True}
- id: Optional[int] = Field(default=None, primary_key=True)
- created_at: datetime = Field(
- default_factory=datetime.now,
- sa_column=Column(DateTime(timezone=True), server_default=func.now()),
- ) # pylint: disable=not-callable
- updated_at: datetime = Field(
- default_factory=datetime.now,
- sa_column=Column(DateTime(timezone=True), onupdate=func.now()),
- ) # pylint: disable=not-callable
- user_id: Optional[str] = None
- version: Optional[str] = "0.0.1"
- config: Union[MessageConfig, dict] = Field(default_factory=MessageConfig, sa_column=Column(JSON))
- session_id: Optional[int] = Field(
- default=None, sa_column=Column(Integer, ForeignKey("session.id", ondelete="CASCADE"))
- )
- run_id: Optional[UUID] = Field(default=None, foreign_key="run.id")
- message_meta: Optional[Union[MessageMeta, dict]] = Field(default={}, sa_column=Column(JSON))
-
-
- class Session(SQLModel, table=True):
- __table_args__ = {"sqlite_autoincrement": True}
- id: Optional[int] = Field(default=None, primary_key=True)
- created_at: datetime = Field(
- default_factory=datetime.now,
- sa_column=Column(DateTime(timezone=True), server_default=func.now()),
- ) # pylint: disable=not-callable
- updated_at: datetime = Field(
- default_factory=datetime.now,
- sa_column=Column(DateTime(timezone=True), onupdate=func.now()),
- ) # pylint: disable=not-callable
- user_id: Optional[str] = None
- version: Optional[str] = "0.0.1"
- team_id: Optional[int] = Field(default=None, sa_column=Column(Integer, ForeignKey("team.id", ondelete="CASCADE")))
- name: Optional[str] = None
-
-
- class RunStatus(str, Enum):
- CREATED = "created"
- ACTIVE = "active"
- COMPLETE = "complete"
- ERROR = "error"
- STOPPED = "stopped"
-
-
- class Run(SQLModel, table=True):
- """Represents a single execution run within a session"""
-
- __table_args__ = {"sqlite_autoincrement": True}
-
- id: UUID = Field(default_factory=uuid4, primary_key=True, index=True)
- created_at: datetime = Field(
- default_factory=datetime.now, sa_column=Column(DateTime(timezone=True), server_default=func.now())
- )
- updated_at: datetime = Field(
- default_factory=datetime.now, sa_column=Column(DateTime(timezone=True), onupdate=func.now())
- )
- session_id: Optional[int] = Field(
- default=None, sa_column=Column(Integer, ForeignKey("session.id", ondelete="CASCADE"), nullable=False)
- )
- status: RunStatus = Field(default=RunStatus.CREATED)
-
- # Store the original user task
- task: Union[MessageConfig, dict] = Field(default_factory=MessageConfig, sa_column=Column(JSON))
-
- # Store TeamResult which contains TaskResult
- team_result: Union[TeamResult, dict] = Field(default=None, sa_column=Column(JSON))
-
- error_message: Optional[str] = None
- version: Optional[str] = "0.0.1"
- messages: Union[List[Message], List[dict]] = Field(default_factory=list, sa_column=Column(JSON))
-
- model_config = ConfigDict(json_encoders={UUID: str, datetime: lambda v: v.isoformat()})
|