Files
ModelForge/backend/alembic/versions/20260825_0008_m5_capability_serving.py

383 lines
18 KiB
Python

"""M5 capability serving, gateway and GPU scheduling.
Revision ID: 20260825_0008
Revises: 20260825_0007
"""
import sqlalchemy as sa
from alembic import op
revision = "20260825_0008"
down_revision = "20260825_0007"
branch_labels = None
depends_on = None
def _identity_columns() -> list[sa.Column]:
return [sa.Column("id", sa.Uuid(), primary_key=True)]
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(
"production_execution_approvals",
*_identity_columns(),
sa.Column("deployment_candidate_id", sa.Uuid(), nullable=False),
sa.Column("capability_contract_id", sa.Uuid(), nullable=False),
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("deployment_config", sa.JSON(), nullable=False),
sa.Column("supply_chain_evidence", sa.JSON(), nullable=False),
sa.Column("evidence_fingerprint", sa.String(64), nullable=False),
sa.Column("status", sa.String(32), nullable=False, server_default="approved"),
sa.Column("approved_by", sa.String(255), nullable=False),
sa.Column("reason", sa.Text(), nullable=False),
sa.Column("approved_at", sa.DateTime(timezone=True), server_default=sa.func.now()),
sa.Column("immutable_at", sa.DateTime(timezone=True), server_default=sa.func.now()),
sa.Column("revoked_at", sa.DateTime(timezone=True)),
sa.ForeignKeyConstraint(["deployment_candidate_id"], ["deployment_candidates.id"]),
sa.ForeignKeyConstraint(["capability_contract_id"], ["capability_contracts.id"]),
sa.ForeignKeyConstraint(["artifact_set_id"], ["artifact_sets.id"]),
sa.ForeignKeyConstraint(["runtime_profile_id"], ["runtime_profiles.id"]),
sa.ForeignKeyConstraint(["compute_node_id"], ["compute_nodes.id"]),
sa.UniqueConstraint("evidence_fingerprint", name="uq_production_approval_fingerprint"),
)
for column in (
"deployment_candidate_id",
"capability_contract_id",
"artifact_set_id",
"runtime_profile_id",
"compute_node_id",
"status",
):
op.create_index(
f"ix_production_execution_approvals_{column}",
"production_execution_approvals",
[column],
)
op.create_table(
"embedding_spaces",
*_identity_columns(),
sa.Column("capability_contract_id", sa.Uuid(), nullable=False),
sa.Column("artifact_set_id", sa.Uuid(), nullable=False),
sa.Column("runtime_profile_id", sa.Uuid(), nullable=False),
sa.Column("identity_digest", sa.String(64), nullable=False),
sa.Column("dimension", sa.Integer(), nullable=False),
sa.Column("normalized", sa.Boolean(), nullable=False),
sa.Column("migration_class", sa.String(32), nullable=False),
sa.Column("identity_facts", sa.JSON(), nullable=False),
sa.Column("created_at", sa.DateTime(timezone=True), server_default=sa.func.now()),
sa.Column("immutable_at", sa.DateTime(timezone=True), server_default=sa.func.now()),
sa.ForeignKeyConstraint(["capability_contract_id"], ["capability_contracts.id"]),
sa.ForeignKeyConstraint(["artifact_set_id"], ["artifact_sets.id"]),
sa.ForeignKeyConstraint(["runtime_profile_id"], ["runtime_profiles.id"]),
sa.UniqueConstraint("identity_digest", name="uq_embedding_space_digest"),
)
for column in ("capability_contract_id", "artifact_set_id", "runtime_profile_id"):
op.create_index(f"ix_embedding_spaces_{column}", "embedding_spaces", [column])
op.create_table(
"capability_deployments",
*_identity_columns(),
*_timestamps(),
sa.Column("capability_contract_id", sa.Uuid(), nullable=False),
sa.Column("deployment_candidate_id", sa.Uuid(), nullable=False),
sa.Column("production_approval_id", sa.Uuid(), nullable=False),
sa.Column("embedding_space_id", sa.Uuid(), nullable=False),
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("accelerator_id", sa.Uuid(), nullable=False),
sa.Column("channel", sa.String(32), nullable=False, server_default="stable"),
sa.Column("status", sa.String(32), nullable=False, server_default="approved"),
sa.Column("production", sa.Boolean(), nullable=False, server_default=sa.false()),
sa.Column("health_status", sa.String(32), nullable=False, server_default="ready_on_demand"),
sa.Column("routing_weight", sa.Integer(), nullable=False, server_default="100"),
sa.Column("fallback_policy", sa.JSON(), nullable=False),
sa.Column("residency_policy", sa.String(32), nullable=False),
sa.Column("keep_warm_seconds", sa.Integer(), nullable=False),
sa.Column("max_concurrency", sa.Integer(), nullable=False),
sa.Column("max_queue_depth", sa.Integer(), nullable=False),
sa.Column("config_fingerprint", sa.String(64), nullable=False),
sa.Column("provenance", sa.JSON(), nullable=False),
sa.Column("rollback_policy", sa.JSON(), nullable=False),
sa.Column("promoted_at", sa.DateTime(timezone=True)),
sa.Column("draining_at", sa.DateTime(timezone=True)),
sa.Column("deprecated_at", sa.DateTime(timezone=True)),
sa.ForeignKeyConstraint(["capability_contract_id"], ["capability_contracts.id"]),
sa.ForeignKeyConstraint(["deployment_candidate_id"], ["deployment_candidates.id"]),
sa.ForeignKeyConstraint(["production_approval_id"], ["production_execution_approvals.id"]),
sa.ForeignKeyConstraint(["embedding_space_id"], ["embedding_spaces.id"]),
sa.ForeignKeyConstraint(["artifact_set_id"], ["artifact_sets.id"]),
sa.ForeignKeyConstraint(["runtime_profile_id"], ["runtime_profiles.id"]),
sa.ForeignKeyConstraint(["compute_node_id"], ["compute_nodes.id"]),
sa.ForeignKeyConstraint(["accelerator_id"], ["accelerators.id"]),
sa.UniqueConstraint("config_fingerprint", name="uq_capability_deployment_fingerprint"),
)
for column in (
"capability_contract_id",
"deployment_candidate_id",
"production_approval_id",
"embedding_space_id",
"artifact_set_id",
"runtime_profile_id",
"compute_node_id",
"accelerator_id",
"channel",
"status",
):
op.create_index(f"ix_capability_deployments_{column}", "capability_deployments", [column])
op.create_index(
"ix_capability_deployments_contract_channel_status",
"capability_deployments",
["capability_contract_id", "channel", "status"],
)
op.create_table(
"capability_resource_envelopes",
*_identity_columns(),
*_timestamps(),
sa.Column("capability_deployment_id", sa.Uuid(), nullable=False),
sa.Column("runtime_probe_id", sa.Uuid(), nullable=False),
sa.Column("accelerator_kind", sa.String(255), nullable=False),
sa.Column("accelerator_uuid", sa.String(255), nullable=False),
sa.Column("environment_fingerprint", sa.String(64), nullable=False),
sa.Column("concurrency", sa.Integer(), nullable=False),
sa.Column("batch_size", sa.Integer(), nullable=False),
sa.Column("max_sequence_length", sa.Integer(), nullable=False),
sa.Column("baseline_vram_bytes", sa.BigInteger(), nullable=False),
sa.Column("resident_vram_bytes", sa.BigInteger(), nullable=False),
sa.Column("peak_vram_bytes", sa.BigInteger(), nullable=False),
sa.Column("required_vram_bytes", sa.BigInteger(), nullable=False),
sa.Column("cold_load_time_ms", sa.Float(), nullable=False),
sa.Column("inference_latency_ms", sa.Float(), nullable=False),
sa.Column("evidence", sa.JSON(), nullable=False),
sa.Column("stale", sa.Boolean(), nullable=False, server_default=sa.false()),
sa.Column("stale_reason", sa.Text()),
sa.Column("immutable_at", sa.DateTime(timezone=True), server_default=sa.func.now()),
sa.ForeignKeyConstraint(["capability_deployment_id"], ["capability_deployments.id"]),
sa.ForeignKeyConstraint(["runtime_probe_id"], ["runtime_probes.id"]),
sa.UniqueConstraint("capability_deployment_id", name="uq_capability_resource_envelope"),
)
op.create_index(
"ix_capability_resource_envelopes_capability_deployment_id",
"capability_resource_envelopes",
["capability_deployment_id"],
)
op.create_index(
"ix_capability_resource_envelopes_runtime_probe_id",
"capability_resource_envelopes",
["runtime_probe_id"],
)
op.create_index(
"ix_capability_resource_envelopes_environment_fingerprint",
"capability_resource_envelopes",
["environment_fingerprint"],
)
op.create_table(
"service_clients",
*_identity_columns(),
*_timestamps(),
sa.Column("name", sa.String(255), nullable=False, unique=True),
sa.Column("status", sa.String(32), nullable=False, server_default="active"),
sa.Column("allowed_capabilities", sa.JSON(), nullable=False),
sa.Column("requests_per_minute", sa.Integer(), nullable=False),
sa.Column("max_concurrent_requests", sa.Integer(), nullable=False),
sa.Column("last_used_at", sa.DateTime(timezone=True)),
sa.Column("disabled_at", sa.DateTime(timezone=True)),
)
op.create_index("ix_service_clients_status", "service_clients", ["status"])
op.create_table(
"service_credentials",
*_identity_columns(),
sa.Column("service_client_id", sa.Uuid(), nullable=False),
sa.Column("secret_hash", sa.String(64), nullable=False, unique=True),
sa.Column("secret_prefix", sa.String(16), nullable=False),
sa.Column("created_at", sa.DateTime(timezone=True), server_default=sa.func.now()),
sa.Column("expires_at", sa.DateTime(timezone=True)),
sa.Column("last_used_at", sa.DateTime(timezone=True)),
sa.Column("revoked_at", sa.DateTime(timezone=True)),
sa.ForeignKeyConstraint(["service_client_id"], ["service_clients.id"], ondelete="CASCADE"),
)
op.create_index(
"ix_service_credentials_service_client_id", "service_credentials", ["service_client_id"]
)
op.create_index(
"uq_active_service_client_credential",
"service_credentials",
["service_client_id"],
unique=True,
postgresql_where=sa.text("revoked_at IS NULL"),
)
op.create_table(
"residency_allocations",
*_identity_columns(),
*_timestamps(),
sa.Column("capability_deployment_id", sa.Uuid(), nullable=False),
sa.Column("compute_node_id", sa.Uuid(), nullable=False),
sa.Column("accelerator_id", sa.Uuid(), nullable=False),
sa.Column("state", sa.String(32), nullable=False, server_default="cold"),
sa.Column("worker_instance_id", sa.String(255)),
sa.Column("load_count", sa.Integer(), nullable=False, server_default="0"),
sa.Column("active_requests", sa.Integer(), nullable=False, server_default="0"),
sa.Column(
"measured_resident_vram_bytes", sa.BigInteger(), nullable=False, server_default="0"
),
sa.Column(
"external_baseline_vram_bytes", sa.BigInteger(), nullable=False, server_default="0"
),
sa.Column("health", sa.JSON(), nullable=False),
sa.Column("resident_since", sa.DateTime(timezone=True)),
sa.Column("last_used_at", sa.DateTime(timezone=True)),
sa.Column("transition_started_at", sa.DateTime(timezone=True)),
sa.Column("failure_code", sa.String(64)),
sa.Column("failure_message", sa.Text()),
sa.ForeignKeyConstraint(["capability_deployment_id"], ["capability_deployments.id"]),
sa.ForeignKeyConstraint(["compute_node_id"], ["compute_nodes.id"]),
sa.ForeignKeyConstraint(["accelerator_id"], ["accelerators.id"]),
sa.UniqueConstraint("capability_deployment_id", name="uq_residency_deployment"),
)
for column in ("capability_deployment_id", "compute_node_id", "accelerator_id", "state"):
op.create_index(f"ix_residency_allocations_{column}", "residency_allocations", [column])
op.create_table(
"serving_gpu_leases",
*_identity_columns(),
sa.Column("accelerator_id", sa.Uuid(), nullable=False),
sa.Column("capability_deployment_id", sa.Uuid(), nullable=False),
sa.Column("request_id", sa.Uuid()),
sa.Column("reserved_vram_bytes", sa.BigInteger(), nullable=False),
sa.Column("priority", sa.String(32), nullable=False),
sa.Column("state", sa.String(32), nullable=False, server_default="pending"),
sa.Column("owner", sa.String(255), nullable=False),
sa.Column("created_at", sa.DateTime(timezone=True), server_default=sa.func.now()),
sa.Column("expires_at", sa.DateTime(timezone=True), nullable=False),
sa.Column("acquired_at", sa.DateTime(timezone=True)),
sa.Column("heartbeat_at", sa.DateTime(timezone=True)),
sa.Column("released_at", sa.DateTime(timezone=True)),
sa.Column("failure_code", sa.String(64)),
sa.ForeignKeyConstraint(["accelerator_id"], ["accelerators.id"]),
sa.ForeignKeyConstraint(["capability_deployment_id"], ["capability_deployments.id"]),
)
for column in (
"accelerator_id",
"capability_deployment_id",
"request_id",
"state",
"expires_at",
):
op.create_index(f"ix_serving_gpu_leases_{column}", "serving_gpu_leases", [column])
op.create_table(
"gateway_requests",
*_identity_columns(),
sa.Column("request_id", sa.Uuid(), nullable=False, unique=True),
sa.Column("service_client_id", sa.Uuid()),
sa.Column("capability_key", sa.String(128), nullable=False),
sa.Column("capability_version", sa.Integer(), nullable=False),
sa.Column("capability_deployment_id", sa.Uuid()),
sa.Column("compute_node_id", sa.Uuid()),
sa.Column("status", sa.String(32), nullable=False),
sa.Column("priority", sa.String(32), nullable=False),
sa.Column("input_sha256", sa.String(64), nullable=False),
sa.Column("input_count", sa.Integer(), nullable=False),
sa.Column("cold", sa.Boolean()),
sa.Column("queue_time_ms", sa.Float()),
sa.Column("load_time_ms", sa.Float()),
sa.Column("inference_time_ms", sa.Float()),
sa.Column("total_latency_ms", sa.Float()),
sa.Column("failure_code", sa.String(64)),
sa.Column("decision_evidence", sa.JSON(), nullable=False),
sa.Column("created_at", sa.DateTime(timezone=True), server_default=sa.func.now()),
sa.Column("finished_at", sa.DateTime(timezone=True)),
sa.ForeignKeyConstraint(["service_client_id"], ["service_clients.id"], ondelete="SET NULL"),
sa.ForeignKeyConstraint(
["capability_deployment_id"], ["capability_deployments.id"], ondelete="SET NULL"
),
sa.ForeignKeyConstraint(["compute_node_id"], ["compute_nodes.id"], ondelete="SET NULL"),
)
for column in (
"request_id",
"service_client_id",
"capability_key",
"capability_deployment_id",
"compute_node_id",
"status",
"created_at",
):
op.create_index(f"ix_gateway_requests_{column}", "gateway_requests", [column])
op.create_index(
"ix_gateway_requests_client_created",
"gateway_requests",
["service_client_id", "created_at"],
)
op.create_table(
"serving_jobs",
*_identity_columns(),
*_timestamps(),
sa.Column("capability_deployment_id", sa.Uuid(), nullable=False),
sa.Column("compute_node_id", sa.Uuid(), nullable=False),
sa.Column("gateway_request_id", sa.Uuid()),
sa.Column("operation", sa.String(32), nullable=False),
sa.Column("status", sa.String(32), nullable=False, server_default="queued"),
sa.Column("priority", sa.String(32), nullable=False),
sa.Column("idempotency_key", sa.String(64), nullable=False),
sa.Column("payload_reference", sa.String(128)),
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("result_reference", sa.String(128)),
sa.Column("result_summary", sa.JSON(), 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.ForeignKeyConstraint(["capability_deployment_id"], ["capability_deployments.id"]),
sa.ForeignKeyConstraint(["compute_node_id"], ["compute_nodes.id"]),
sa.ForeignKeyConstraint(
["gateway_request_id"], ["gateway_requests.id"], ondelete="SET NULL"
),
sa.UniqueConstraint("idempotency_key", name="uq_serving_job_idempotency"),
)
for column in (
"capability_deployment_id",
"compute_node_id",
"gateway_request_id",
"operation",
"status",
):
op.create_index(f"ix_serving_jobs_{column}", "serving_jobs", [column])
op.create_index(
"ix_serving_jobs_node_status_priority",
"serving_jobs",
["compute_node_id", "status", "priority"],
)
def downgrade() -> None:
for table in (
"serving_jobs",
"gateway_requests",
"serving_gpu_leases",
"residency_allocations",
"service_credentials",
"service_clients",
"capability_resource_envelopes",
"capability_deployments",
"embedding_spaces",
"production_execution_approvals",
):
op.drop_table(table)