David Prince
production: clean source snapshot — no history bloat
71b4454
Raw
History Blame Contribute Delete
1.68 kB
from sqlalchemy import Column, Integer, String, DateTime, Text, JSON, Float, Boolean, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
from datetime import datetime
Base = declarative_base()
class ProviderConfig(Base):
__tablename__ = "provider_configs"
id = Column(Integer, primary_key=True)
provider_id = Column(String(64), unique=True, nullable=False)
name = Column(String(64), nullable=False)
api_key = Column(Text, nullable=True)
base_url = Column(String(256), nullable=True)
models = Column(JSON, default=[])
default_model = Column(String(64), nullable=True)
enabled = Column(Boolean, default=True)
priority = Column(Integer, default=0)
config = Column(JSON, default={})
created_at = Column(DateTime, default=datetime.utcnow)
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
class ModelCall(Base):
__tablename__ = "model_calls"
id = Column(Integer, primary_key=True)
call_id = Column(String(64), unique=True, nullable=False)
provider_id = Column(String(64), nullable=False)
model = Column(String(64), nullable=False)
prompt = Column(Text, nullable=False)
response = Column(Text, nullable=True)
tokens_prompt = Column(Integer, default=0)
tokens_completion = Column(Integer, default=0)
cost = Column(Float, default=0.0)
duration_ms = Column(Float, default=0.0)
success = Column(Boolean, default=True)
error = Column(Text, nullable=True)
meta = Column(JSON, default={}) # column name is 'meta' (not reserved)
created_at = Column(DateTime, default=datetime.utcnow)