from datetime import datetime from typing import Optional from sqlmodel import Field, SQLModel class PlatformSetting(SQLModel, table=True): __tablename__ = "sys_setting" key: str = Field(primary_key=True, max_length=120) name: str = Field(default="", max_length=200) category: str = Field(default="general", max_length=64, index=True) description: str = Field(default="") value_type: str = Field(default="json", max_length=32) value_json: str = Field(default="{}") is_public: bool = Field(default=False, index=True) sort_order: int = Field(default=100, index=True) created_at: datetime = Field(default_factory=datetime.utcnow) updated_at: datetime = Field(default_factory=datetime.utcnow, index=True) class BotRequestUsage(SQLModel, table=True): __tablename__ = "bot_request_usage" id: Optional[int] = Field(default=None, primary_key=True) bot_id: str = Field(foreign_key="bot_instance.id", index=True) message_id: Optional[int] = Field(default=None, index=True) request_id: str = Field(index=True, max_length=120) channel: str = Field(default="dashboard", index=True, max_length=64) status: str = Field(default="PENDING", index=True, max_length=32) provider: Optional[str] = Field(default=None, max_length=120) model: Optional[str] = Field(default=None, max_length=255) token_source: str = Field(default="estimated", max_length=32) input_tokens: int = Field(default=0) output_tokens: int = Field(default=0) total_tokens: int = Field(default=0) input_text_preview: Optional[str] = Field(default=None) output_text_preview: Optional[str] = Field(default=None) attachments_json: Optional[str] = Field(default=None) error_text: Optional[str] = Field(default=None) metadata_json: Optional[str] = Field(default=None) started_at: datetime = Field(default_factory=datetime.utcnow, index=True) completed_at: Optional[datetime] = Field(default=None, index=True) created_at: datetime = Field(default_factory=datetime.utcnow, index=True) updated_at: datetime = Field(default_factory=datetime.utcnow, index=True) class BotActivityEvent(SQLModel, table=True): __tablename__ = "bot_activity_event" id: Optional[int] = Field(default=None, primary_key=True) bot_id: str = Field(foreign_key="bot_instance.id", index=True) request_id: Optional[str] = Field(default=None, index=True, max_length=120) event_type: str = Field(index=True, max_length=64) channel: str = Field(default="dashboard", index=True, max_length=64) detail: Optional[str] = Field(default=None) metadata_json: Optional[str] = Field(default=None) created_at: datetime = Field(default_factory=datetime.utcnow, index=True)