Files
ModelForge/backend/alembic/versions/20260825_0006_m4_runtime_plane.py
T

222 lines
12 KiB
Python

"""M4 runtime compatibility and runtime plane.
Revision ID: 20260825_0006
Revises: 20260825_0005
"""
import sqlalchemy as sa
from alembic import op
revision = "20260825_0006"
down_revision = "20260825_0005"
branch_labels = None
depends_on = None
def _timestamps() -> list[sa.Column]:
return [
sa.Column("created_at", sa.DateTime(timezone=True), server_default=sa.func.now()),
sa.Column("updated_at", sa.DateTime(timezone=True), server_default=sa.func.now()),
]
def upgrade() -> None:
op.create_table(
"runtime_environments",
sa.Column("name", sa.String(255), nullable=False),
sa.Column("adapter", sa.String(64), nullable=False),
sa.Column("runtime_version", sa.String(128), nullable=False),
sa.Column("image_repository", sa.String(255), nullable=False),
sa.Column("image_digest", sa.String(71), nullable=False),
sa.Column("python_version", sa.String(64), nullable=False),
sa.Column("cuda_runtime_version", sa.String(64)),
sa.Column("package_versions", sa.JSON(), nullable=False, server_default=sa.text("'{}'")),
sa.Column("supported_model_types", sa.JSON(), nullable=False, server_default=sa.text("'[]'")),
sa.Column("supported_formats", sa.JSON(), nullable=False, server_default=sa.text("'[]'")),
sa.Column("supported_modalities", sa.JSON(), nullable=False, server_default=sa.text("'[]'")),
sa.Column("network_policy", sa.String(64), nullable=False),
sa.Column("fingerprint", sa.String(64), nullable=False),
sa.Column("immutable_at", sa.DateTime(timezone=True), nullable=False),
sa.Column("created_at", sa.DateTime(timezone=True), server_default=sa.func.now()),
sa.Column("id", sa.Uuid(), primary_key=True),
sa.UniqueConstraint("fingerprint", name="uq_runtime_environment_fingerprint"),
)
op.create_index("ix_runtime_environments_adapter", "runtime_environments", ["adapter"])
for column in (
sa.Column("runtime_environment_id", sa.Uuid()),
sa.Column("artifact_set_id", sa.Uuid()),
sa.Column("version", sa.Integer(), nullable=False, server_default="1"),
sa.Column("dtype", sa.String(32)),
sa.Column("modality", sa.String(32)),
sa.Column("device_policy", sa.String(32), nullable=False, server_default="cuda_required"),
sa.Column("health_contract", sa.JSON(), nullable=False, server_default=sa.text("'{}'")),
sa.Column("profile_config", sa.JSON(), nullable=False, server_default=sa.text("'{}'")),
):
op.add_column("runtime_profiles", column)
op.create_foreign_key(
"fk_runtime_profiles_environment",
"runtime_profiles",
"runtime_environments",
["runtime_environment_id"],
["id"],
ondelete="RESTRICT",
)
op.create_foreign_key(
"fk_runtime_profiles_artifact_set",
"runtime_profiles",
"artifact_sets",
["artifact_set_id"],
["id"],
ondelete="RESTRICT",
)
op.create_index("ix_runtime_profiles_runtime_environment_id", "runtime_profiles", ["runtime_environment_id"])
op.create_index("ix_runtime_profiles_artifact_set_id", "runtime_profiles", ["artifact_set_id"])
op.create_table(
"runtime_compatibility_assessments",
sa.Column("artifact_set_id", sa.Uuid(), nullable=False),
sa.Column("runtime_profile_id", sa.Uuid(), nullable=False),
sa.Column("compute_node_id", sa.Uuid(), nullable=False),
sa.Column("adapter", sa.String(64), nullable=False),
sa.Column("runtime_version", sa.String(128), nullable=False),
sa.Column("status", sa.String(32), nullable=False),
sa.Column("static_result", sa.JSON(), nullable=False, server_default=sa.text("'{}'")),
sa.Column("evidence", sa.JSON(), nullable=False, server_default=sa.text("'{}'")),
sa.Column("blockers", sa.JSON(), nullable=False, server_default=sa.text("'[]'")),
sa.Column("warnings", sa.JSON(), nullable=False, server_default=sa.text("'[]'")),
sa.Column("required_approvals", sa.JSON(), nullable=False, server_default=sa.text("'[]'")),
sa.Column("hardware_facts", sa.JSON(), nullable=False, server_default=sa.text("'{}'")),
sa.Column("artifact_facts", sa.JSON(), nullable=False, server_default=sa.text("'{}'")),
sa.Column("environment_fingerprint", sa.String(64), nullable=False),
sa.Column("stale", sa.Boolean(), nullable=False, server_default=sa.false()),
sa.Column("stale_reason", sa.Text()),
sa.Column("created_at", sa.DateTime(timezone=True), server_default=sa.func.now()),
sa.Column("id", sa.Uuid(), primary_key=True),
sa.ForeignKeyConstraint(["artifact_set_id"], ["artifact_sets.id"], ondelete="RESTRICT"),
sa.ForeignKeyConstraint(["runtime_profile_id"], ["runtime_profiles.id"], ondelete="RESTRICT"),
sa.ForeignKeyConstraint(["compute_node_id"], ["compute_nodes.id"], ondelete="RESTRICT"),
)
for column in ("artifact_set_id", "runtime_profile_id", "compute_node_id", "status", "environment_fingerprint"):
op.create_index(f"ix_runtime_compatibility_assessments_{column}", "runtime_compatibility_assessments", [column])
op.create_table(
"execution_approvals",
sa.Column("artifact_set_id", sa.Uuid(), nullable=False),
sa.Column("scope", sa.String(32), nullable=False),
sa.Column("status", sa.String(32), nullable=False),
sa.Column("evidence_fingerprint", sa.String(64), nullable=False),
sa.Column("reason", sa.Text(), nullable=False),
sa.Column("approved_by", sa.String(255), nullable=False),
sa.Column("approved_at", sa.DateTime(timezone=True), server_default=sa.func.now()),
sa.Column("expires_at", sa.DateTime(timezone=True)),
sa.Column("revoked_at", sa.DateTime(timezone=True)),
sa.Column("id", sa.Uuid(), primary_key=True),
sa.ForeignKeyConstraint(["artifact_set_id"], ["artifact_sets.id"], ondelete="RESTRICT"),
)
op.create_index("ix_execution_approvals_artifact_set_id", "execution_approvals", ["artifact_set_id"])
op.create_index("ix_execution_approvals_status", "execution_approvals", ["status"])
op.create_table(
"runtime_probes",
sa.Column("artifact_set_id", sa.Uuid(), nullable=False),
sa.Column("runtime_profile_id", sa.Uuid(), nullable=False),
sa.Column("compute_node_id", sa.Uuid(), nullable=False),
sa.Column("compatibility_assessment_id", sa.Uuid(), nullable=False),
sa.Column("execution_approval_id", sa.Uuid(), nullable=False),
sa.Column("status", sa.String(32), nullable=False, server_default="queued"),
sa.Column("phase", sa.String(64)),
sa.Column("probe_input", sa.Text(), nullable=False),
sa.Column("idempotency_key", sa.String(64), nullable=False),
sa.Column("attempt_count", sa.Integer(), nullable=False, server_default="0"),
sa.Column("lease_token_hash", sa.String(64)),
sa.Column("lease_expires_at", sa.DateTime(timezone=True)),
sa.Column("cancel_requested", sa.Boolean(), nullable=False, server_default=sa.false()),
sa.Column("load_result", sa.JSON(), nullable=False, server_default=sa.text("'{}'")),
sa.Column("health_result", sa.JSON(), nullable=False, server_default=sa.text("'{}'")),
sa.Column("inference_result", sa.JSON(), nullable=False, server_default=sa.text("'{}'")),
sa.Column("unload_result", sa.JSON(), nullable=False, server_default=sa.text("'{}'")),
sa.Column("measured_resources", sa.JSON(), nullable=False, server_default=sa.text("'{}'")),
sa.Column("runtime_facts", sa.JSON(), nullable=False, server_default=sa.text("'{}'")),
sa.Column("environment_fingerprint", sa.String(64), nullable=False),
sa.Column("failure_code", sa.String(64)),
sa.Column("failure_message", sa.Text()),
sa.Column("started_at", sa.DateTime(timezone=True)),
sa.Column("finished_at", sa.DateTime(timezone=True)),
sa.Column("id", sa.Uuid(), primary_key=True),
*_timestamps(),
sa.ForeignKeyConstraint(["artifact_set_id"], ["artifact_sets.id"], ondelete="RESTRICT"),
sa.ForeignKeyConstraint(["runtime_profile_id"], ["runtime_profiles.id"], ondelete="RESTRICT"),
sa.ForeignKeyConstraint(["compute_node_id"], ["compute_nodes.id"], ondelete="RESTRICT"),
sa.ForeignKeyConstraint(["compatibility_assessment_id"], ["runtime_compatibility_assessments.id"], ondelete="RESTRICT"),
sa.ForeignKeyConstraint(["execution_approval_id"], ["execution_approvals.id"], ondelete="RESTRICT"),
sa.UniqueConstraint("idempotency_key", name="uq_runtime_probe_idempotency"),
)
for column in ("artifact_set_id", "runtime_profile_id", "compute_node_id", "compatibility_assessment_id", "execution_approval_id", "status"):
op.create_index(f"ix_runtime_probes_{column}", "runtime_probes", [column])
op.create_table(
"runtime_probe_metrics",
sa.Column("runtime_probe_id", sa.Uuid(), nullable=False),
sa.Column("phase", sa.String(64), nullable=False),
sa.Column("measurement_type", sa.String(64), nullable=False),
sa.Column("source", sa.String(64), nullable=False),
sa.Column("values", sa.JSON(), nullable=False, server_default=sa.text("'{}'")),
sa.Column("observed_at", sa.DateTime(timezone=True), nullable=False),
sa.Column("id", sa.Uuid(), primary_key=True),
sa.ForeignKeyConstraint(["runtime_probe_id"], ["runtime_probes.id"], ondelete="RESTRICT"),
)
op.create_index("ix_runtime_probe_metrics_runtime_probe_id", "runtime_probe_metrics", ["runtime_probe_id"])
op.create_table(
"deployment_candidates",
sa.Column("artifact_set_id", sa.Uuid(), nullable=False),
sa.Column("runtime_profile_id", sa.Uuid(), nullable=False),
sa.Column("compute_node_id", sa.Uuid(), nullable=False),
sa.Column("compatibility_assessment_id", sa.Uuid(), nullable=False),
sa.Column("runtime_probe_id", sa.Uuid(), nullable=False),
sa.Column("channel", sa.String(32), nullable=False, server_default="lab"),
sa.Column("status", sa.String(32), nullable=False, server_default="lab_ready"),
sa.Column("production", sa.Boolean(), nullable=False, server_default=sa.false()),
sa.Column("health_contract", sa.JSON(), nullable=False, server_default=sa.text("'{}'")),
sa.Column("measured_resources", sa.JSON(), nullable=False, server_default=sa.text("'{}'")),
sa.Column("created_at", sa.DateTime(timezone=True), server_default=sa.func.now()),
sa.Column("id", sa.Uuid(), primary_key=True),
sa.ForeignKeyConstraint(["artifact_set_id"], ["artifact_sets.id"], ondelete="RESTRICT"),
sa.ForeignKeyConstraint(["runtime_profile_id"], ["runtime_profiles.id"], ondelete="RESTRICT"),
sa.ForeignKeyConstraint(["compute_node_id"], ["compute_nodes.id"], ondelete="RESTRICT"),
sa.ForeignKeyConstraint(["compatibility_assessment_id"], ["runtime_compatibility_assessments.id"], ondelete="RESTRICT"),
sa.ForeignKeyConstraint(["runtime_probe_id"], ["runtime_probes.id"], ondelete="RESTRICT"),
sa.UniqueConstraint("runtime_probe_id", name="uq_deployment_candidate_probe"),
)
for column in ("artifact_set_id", "runtime_profile_id", "compute_node_id", "runtime_probe_id", "status"):
op.create_index(f"ix_deployment_candidates_{column}", "deployment_candidates", [column])
def downgrade() -> None:
for table in (
"deployment_candidates",
"runtime_probe_metrics",
"runtime_probes",
"execution_approvals",
"runtime_compatibility_assessments",
):
op.drop_table(table)
op.drop_index("ix_runtime_profiles_artifact_set_id", table_name="runtime_profiles")
op.drop_index("ix_runtime_profiles_runtime_environment_id", table_name="runtime_profiles")
op.drop_constraint("fk_runtime_profiles_artifact_set", "runtime_profiles", type_="foreignkey")
op.drop_constraint("fk_runtime_profiles_environment", "runtime_profiles", type_="foreignkey")
for column in (
"profile_config",
"health_contract",
"device_policy",
"modality",
"dtype",
"version",
"artifact_set_id",
"runtime_environment_id",
):
op.drop_column("runtime_profiles", column)
op.drop_table("runtime_environments")