David Prince
production: clean source snapshot — no history bloat
71b4454
Raw
History Blame Contribute Delete
2.67 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 PromptTemplate(Base):
__tablename__ = "prompt_templates"
id = Column(Integer, primary_key=True)
template_id = Column(String(64), unique=True, nullable=False)
name = Column(String(128), nullable=False)
description = Column(Text, nullable=True)
template_text = Column(Text, nullable=False)
variables = Column(JSON, default=[]) # list of variable names
category = Column(String(64), nullable=True)
tags = Column(JSON, default=[]) # list of tags (avoid 'metadata')
created_at = Column(DateTime, default=datetime.utcnow)
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
is_active = Column(Boolean, default=True)
versions = relationship("PromptVersion", back_populates="template")
tests = relationship("PromptTest", back_populates="template")
class PromptVersion(Base):
__tablename__ = "prompt_versions"
id = Column(Integer, primary_key=True)
template_id = Column(Integer, ForeignKey("prompt_templates.id"))
version = Column(Integer, nullable=False)
template_text = Column(Text, nullable=False)
variables = Column(JSON, default=[])
changelog = Column(Text, nullable=True)
created_at = Column(DateTime, default=datetime.utcnow)
is_latest = Column(Boolean, default=False)
template = relationship("PromptTemplate", back_populates="versions")
class PromptTest(Base):
__tablename__ = "prompt_tests"
id = Column(Integer, primary_key=True)
template_id = Column(Integer, ForeignKey("prompt_templates.id"))
test_id = Column(String(64), unique=True, nullable=False)
test_input = Column(JSON, default={}) # variable values
test_output = Column(Text, nullable=True) # rendered prompt
passed = Column(Boolean, default=False)
executed_at = Column(DateTime, default=datetime.utcnow)
error_message = Column(Text, nullable=True)
template = relationship("PromptTemplate", back_populates="tests")
class PromptHistory(Base):
__tablename__ = "prompt_history"
id = Column(Integer, primary_key=True)
template_id = Column(Integer, ForeignKey("prompt_templates.id"))
action = Column(String(32), nullable=False) # create, update, test, rollback
details = Column(JSON, default={})
user_id = Column(String(64), nullable=True)
created_at = Column(DateTime, default=datetime.utcnow)