"""ml_settings.ccip_match_threshold — tunable CCIP character-match cut (#114) The v1 matcher used a flat 0.75 cosine; live data showed that over-fires (a high-reference character matched a scatter of images). 0.85 keeps the confident single-character matches and drops the noise. Tunable from the GPU agent card. Revision ID: 0063 Revises: 0062 Create Date: 2026-06-29 """ from typing import Sequence, Union import sqlalchemy as sa from alembic import op revision: str = "0063" down_revision: Union[str, None] = "0062" branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: op.add_column( "ml_settings", sa.Column( "ccip_match_threshold", sa.Float(), nullable=False, server_default="0.85", ), ) def downgrade() -> None: op.drop_column("ml_settings", "ccip_match_threshold")