""" Two-Tower Configuration Architecture constants for Isengard (User Tower) and Mordor (Wine Tower). """ # ============================================================================= # EMBEDDING DIMENSIONS # ============================================================================= # Input embedding dimension (google-text-embedding-004) EMBEDDING_DIM = 768 # Output vector dimensions for both towers (must match for dot product) USER_VECTOR_DIM = 128 WINE_VECTOR_DIM = 128 # Hidden layer dimension HIDDEN_DIM = 256 # ============================================================================= # CATEGORICAL FEATURES # ============================================================================= # Feature list matching constants.py CATEGORICAL_FEATURES CATEGORICAL_FEATURES = [ "color", "type", "style", "climate_type", "climate_band", "vintage_band", ] # Categorical feature vocabulary sizes (approximate, for one-hot encoding) CATEGORICAL_VOCAB_SIZES = { "color": 5, # red, white, rosé, orange, sparkling "type": 4, # still, sparkling, fortified, dessert "style": 10, # Natural, Organic, Biodynamic, etc. "climate_type": 4, # cool, moderate, warm, hot "climate_band": 4, # cool, moderate, warm, hot "vintage_band": 4, # young, developing, mature, non_vintage } # Total categorical encoding dimension CATEGORICAL_ENCODING_DIM = sum(CATEGORICAL_VOCAB_SIZES.values()) # ~31 # ============================================================================= # TRAINING PARAMETERS # ============================================================================= TRIPLET_MARGIN = 0.2 # Margin for triplet loss LEARNING_RATE = 1e-4 BATCH_SIZE = 32 POSITIVE_RATING_THRESHOLD = 4.0 # Ratings >= 4 are positive samples # ============================================================================= # HUGGINGFACE INFERENCE # ============================================================================= # Model ID on HuggingFace Hub (for model upload/download) HF_MODEL_ID = "swirl/two-tower-recommender" # Inference Endpoint URL is read from settings.HF_TWO_TOWER_ENDPOINT_URL # API Token is read from settings.HF_API_TOKEN (same as CLIP)