359bc5a283
- Migration 0069: new installs default to SigLIP 2 (so400m, 512px, 1152-d drop-in) — UPDATE applies ONLY where no image is embedded yet (fresh install), so an existing library is NOT silently invalidated; it switches deliberately via the dropdown → Re-embed → Retrain. Column server_defaults moved to SigLIP 2. - GET /api/ml/embedder-models: server-authoritative supported list (SigLIP 2 512 recommended / 384 faster / SigLIP 1 384 original) so the UI never free-types. - GpuAgentCard: the two name/version text fields → a single model dropdown; Save sets name+version from the picked option (the current model is always selectable even if off-list). - embedder.py DEFAULT_MODEL_NAME unchanged (stays the baked local-dir SigLIP 1) to avoid a local-dir/weights mismatch; SigLIP 2 loads by HF name, cached on the ml-worker's persistent HF_HOME. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ttrj5P7upUTueSfoJcxEqa
52 lines
1.7 KiB
Python
52 lines
1.7 KiB
Python
"""default the embedder to SigLIP 2 — for FRESH installs only (#1203)
|
|
|
|
Make SigLIP 2 (so400m, 512px; a 1152-d drop-in) the default embedder. New
|
|
installs start on it. An EXISTING library is NOT touched: flipping its stored
|
|
embedder version would mark every embedding stale (the scorer is version-gated)
|
|
and kill suggestions until a full re-embed+retrain — so an existing instance
|
|
switches deliberately via Settings → GPU agent → Embedding model → Re-embed →
|
|
Retrain. We detect "fresh" by the absence of any embedded image.
|
|
|
|
Revision ID: 0069
|
|
Revises: 0068
|
|
Create Date: 2026-06-30
|
|
"""
|
|
from typing import Sequence, Union
|
|
|
|
from alembic import op
|
|
|
|
revision: str = "0069"
|
|
down_revision: Union[str, None] = "0068"
|
|
branch_labels: Union[str, Sequence[str], None] = None
|
|
depends_on: Union[str, Sequence[str], None] = None
|
|
|
|
_NEW_NAME = "google/siglip2-so400m-patch16-512"
|
|
_NEW_VERSION = "siglip2-so400m-patch16-512"
|
|
_OLD_NAME = "google/siglip-so400m-patch14-384"
|
|
_OLD_VERSION = "siglip-so400m-patch14-384"
|
|
|
|
|
|
def upgrade() -> None:
|
|
# Fresh install (nothing embedded yet) → adopt SigLIP 2.
|
|
op.execute(
|
|
f"""
|
|
UPDATE ml_settings SET
|
|
embedder_model_name = '{_NEW_NAME}',
|
|
embedder_model_version = '{_NEW_VERSION}'
|
|
WHERE NOT EXISTS (
|
|
SELECT 1 FROM image_record WHERE siglip_embedding IS NOT NULL
|
|
)
|
|
"""
|
|
)
|
|
op.alter_column("ml_settings", "embedder_model_name", server_default=_NEW_NAME)
|
|
op.alter_column(
|
|
"ml_settings", "embedder_model_version", server_default=_NEW_VERSION
|
|
)
|
|
|
|
|
|
def downgrade() -> None:
|
|
op.alter_column("ml_settings", "embedder_model_name", server_default=_OLD_NAME)
|
|
op.alter_column(
|
|
"ml_settings", "embedder_model_version", server_default=_OLD_VERSION
|
|
)
|