""" Embedding module configuration. This module is intentionally a plain Python file (no env var parsing, no extra deps). Edit values here to configure: - server host/port - local model settings (paths/devices/batch sizes) """ from typing import Optional import os class EmbeddingConfig(object): # Server HOST = os.getenv("EMBEDDING_HOST", "0.0.0.0") PORT = int(os.getenv("EMBEDDING_PORT", 6005)) # Text backend defaults TEXT_MODEL_ID = os.getenv("TEXT_MODEL_ID", "Qwen/Qwen3-Embedding-0.6B") # Keep TEXT_MODEL_DIR as an alias so code can refer to one canonical text model value. TEXT_MODEL_DIR = TEXT_MODEL_ID TEXT_DEVICE = os.getenv("TEXT_DEVICE", "cuda") # "cuda" or "cpu" TEXT_BATCH_SIZE = int(os.getenv("TEXT_BATCH_SIZE", "32")) TEXT_NORMALIZE_EMBEDDINGS = os.getenv("TEXT_NORMALIZE_EMBEDDINGS", "true").lower() in ("1", "true", "yes") TEI_BASE_URL = os.getenv("TEI_BASE_URL", "http://127.0.0.1:8080") TEI_TIMEOUT_SEC = int(os.getenv("TEI_TIMEOUT_SEC", "60")) # Image embeddings # Option A: clip-as-service (Jina CLIP server, recommended) USE_CLIP_AS_SERVICE = os.getenv("USE_CLIP_AS_SERVICE", "true").lower() in ("1", "true", "yes") CLIP_AS_SERVICE_SERVER = os.getenv("CLIP_AS_SERVICE_SERVER", "grpc://127.0.0.1:51000") CLIP_AS_SERVICE_MODEL_NAME = os.getenv("CLIP_AS_SERVICE_MODEL_NAME", "CN-CLIP/ViT-L-14") # Option B: local CN-CLIP (when USE_CLIP_AS_SERVICE=false) IMAGE_MODEL_NAME = os.getenv("IMAGE_MODEL_NAME", "ViT-L-14") IMAGE_DEVICE = None # type: Optional[str] # "cuda" / "cpu" / None(auto) # Service behavior IMAGE_BATCH_SIZE = 8 IMAGE_NORMALIZE_EMBEDDINGS = os.getenv("IMAGE_NORMALIZE_EMBEDDINGS", "true").lower() in ("1", "true", "yes") CONFIG = EmbeddingConfig()