"""Migration 0014: persistent LLM eval result cache. Revision ID: 0014 Revises: 0013 """ from alembic import op from sqlalchemy import Column, DateTime, ForeignKey, Integer, JSON, String, UniqueConstraint, func revision = "0014" down_revision = "0013" branch_labels = depends_on = None def upgrade(): op.create_table("ai_eval_cache", Column("id", Integer, primary_key=True), Column("input_fingerprint", String(64), nullable=False), Column("candidate_set_hash", String(64), nullable=False), Column("prompt_version", String(32), nullable=False), Column("model", String(64), nullable=False), Column("dataset_version_ncm", String(64), nullable=False), Column("phase", String(16), nullable=False), Column("answer", JSON, nullable=False), Column("gold_ncm", String(8)), Column("created_at", DateTime(timezone=True), server_default=func.now()), UniqueConstraint("input_fingerprint", "candidate_set_hash", "prompt_version", "model", "dataset_version_ncm", name="uq_ai_eval_cache")) op.create_index("ix_ai_eval_cache_input_fingerprint", "ai_eval_cache", ["input_fingerprint"]) def downgrade(): op.drop_table("ai_eval_cache")