feat(fc2b): schema migration 0003 — ML pipeline tables
Renames image_record.wd14_* -> tagger_* (we're on Camie now, not WD14). Adds tag_allowlist (auto-apply opt-in, per-tag confidence), tag_suggestion_rejection (per-image dismissals), tag_alias (composite (string, category) -> canonical tag, resolved at read time), tag_reference_embedding (per-tag SigLIP centroids), and the ml_settings singleton (per-category + centroid thresholds, model version pins). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
"""Smoke test for migration 0003: model classes import, schema shape correct."""
|
||||
|
||||
from backend.app.models import (
|
||||
Base,
|
||||
ImageRecord,
|
||||
MLSettings,
|
||||
TagAlias,
|
||||
TagAllowlist,
|
||||
TagReferenceEmbedding,
|
||||
TagSuggestionRejection,
|
||||
)
|
||||
|
||||
|
||||
def test_new_tables_registered():
|
||||
expected = {
|
||||
"tag_allowlist",
|
||||
"tag_suggestion_rejection",
|
||||
"tag_alias",
|
||||
"tag_reference_embedding",
|
||||
"ml_settings",
|
||||
}
|
||||
assert expected.issubset(Base.metadata.tables.keys())
|
||||
|
||||
|
||||
def test_image_record_columns_renamed():
|
||||
cols = {c.name for c in ImageRecord.__table__.columns}
|
||||
assert "tagger_predictions" in cols
|
||||
assert "tagger_model_version" in cols
|
||||
assert "wd14_predictions" not in cols
|
||||
assert "wd14_model_version" not in cols
|
||||
|
||||
|
||||
def test_tag_alias_composite_pk():
|
||||
pk_cols = {c.name for c in TagAlias.__table__.primary_key.columns}
|
||||
assert pk_cols == {"alias_string", "alias_category"}
|
||||
|
||||
|
||||
def test_ml_settings_singleton_constraint():
|
||||
names = {c.name for c in MLSettings.__table__.constraints}
|
||||
assert "ck_ml_settings_singleton" in names
|
||||
|
||||
|
||||
def test_tag_reference_embedding_has_vector():
|
||||
cols = {c.name for c in TagReferenceEmbedding.__table__.columns}
|
||||
assert "embedding" in cols
|
||||
assert "reference_count" in cols
|
||||
|
||||
|
||||
def test_tag_allowlist_confidence_check():
|
||||
names = {c.name for c in TagAllowlist.__table__.constraints}
|
||||
assert "ck_tag_allowlist_confidence_range" in names
|
||||
|
||||
|
||||
def test_tag_suggestion_rejection_pk():
|
||||
pk_cols = {c.name for c in TagSuggestionRejection.__table__.primary_key.columns}
|
||||
assert pk_cols == {"image_record_id", "tag_id"}
|
||||
Reference in New Issue
Block a user