""" Embedding model — stores CLIP/SigLIP image embeddings via pgvector. Composite PK (photo_id, model) allows re-embedding with newer models without clobbering old vectors. """ from sqlalchemy import Column, String, ForeignKey, DateTime, func from pgvector.sqlalchemy import Vector from app.database import Base class Embedding(Base): __tablename__ = 'embeddings' photo_id = Column(String, ForeignKey('photos.id', ondelete='CASCADE'), primary_key=True) model = Column(String(64), primary_key=True) # e.g. 'openclip_vitb32' vector = Column(Vector(512)) # OpenCLIP ViT-B/32 → 512-d created_at = Column(DateTime(timezone=True), server_default=func.now())