zai / app /models /db_models.py
bg5's picture
Upload 85 files
e0b68d2 verified
Raw History Blame Contribute Delete
4.07 kB
from sqlalchemy import (
Boolean,
DateTime,
Float,
ForeignKey,
Index,
Integer,
String,
Text,
UniqueConstraint,
)
from sqlalchemy.orm import DeclarativeBase, mapped_column, relationship
from sqlalchemy.sql import func, text
class Base(DeclarativeBase):
pass
class Token(Base):
__tablename__ = "tokens"
id = mapped_column(Integer, primary_key=True, autoincrement=True)
provider = mapped_column(String, nullable=False)
token = mapped_column(String, nullable=False)
token_type = mapped_column(String, default="user", nullable=False)
priority = mapped_column(Integer, default=0, server_default=text("0"), nullable=False)
is_enabled = mapped_column(Boolean, default=True, server_default=text("true"), nullable=False)
created_at = mapped_column(DateTime, default=func.now(), server_default=func.now(), nullable=False)
last_chat_cleanup = mapped_column(DateTime, nullable=True)
__table_args__ = (
UniqueConstraint("provider", "token", name="uq_provider_token"),
)
stats = relationship("TokenStats", back_populates="token_rel", uselist=False, cascade="all, delete-orphan")
class TokenStats(Base):
__tablename__ = "token_stats"
id = mapped_column(Integer, primary_key=True, autoincrement=True)
token_id = mapped_column(
Integer, ForeignKey("tokens.id", ondelete="CASCADE"), nullable=False, unique=True
)
total_requests = mapped_column(Integer, default=0, server_default=text("0"), nullable=False)
successful_requests = mapped_column(Integer, default=0, server_default=text("0"), nullable=False)
failed_requests = mapped_column(Integer, default=0, server_default=text("0"), nullable=False)
last_success_time = mapped_column(DateTime, nullable=True)
last_failure_time = mapped_column(DateTime, nullable=True)
token_rel = relationship("Token", back_populates="stats")
class RequestLog(Base):
__tablename__ = "request_logs"
__table_args__ = (
Index("ix_request_logs_timestamp", "timestamp"),
Index("ix_request_logs_provider_timestamp", "provider", "timestamp"),
)
id = mapped_column(Integer, primary_key=True, autoincrement=True)
provider = mapped_column(String, nullable=False)
endpoint = mapped_column(String, nullable=False, default="", server_default=text("''"))
source = mapped_column(String, nullable=False, default="unknown", server_default=text("'unknown'"))
protocol = mapped_column(String, nullable=False, default="unknown", server_default=text("'unknown'"))
client_name = mapped_column(String, nullable=False, default="Unknown", server_default=text("'Unknown'"))
auth_token = mapped_column(Text, nullable=True)
upstream_auth_token = mapped_column(Text, nullable=True)
model = mapped_column(String, nullable=False)
status_code = mapped_column(Integer, nullable=False, default=200, server_default=text("200"))
success = mapped_column(Boolean, nullable=False)
duration = mapped_column(Float, nullable=False, default=0.0, server_default=text("0.0"))
first_token_time = mapped_column(Float, nullable=False, default=0.0, server_default=text("0.0"))
input_tokens = mapped_column(Integer, nullable=False, default=0, server_default=text("0"))
output_tokens = mapped_column(Integer, nullable=False, default=0, server_default=text("0"))
cache_creation_tokens = mapped_column(Integer, nullable=False, default=0, server_default=text("0"))
cache_read_tokens = mapped_column(Integer, nullable=False, default=0, server_default=text("0"))
total_tokens = mapped_column(Integer, nullable=False, default=0, server_default=text("0"))
error_message = mapped_column(Text, nullable=True)
timestamp = mapped_column(DateTime, default=func.now(), server_default=func.now(), nullable=False)
class ConfigItem(Base):
__tablename__ = "config_items"
key = mapped_column(String, primary_key=True)
value = mapped_column(Text, nullable=False)