File size: 2,223 Bytes
c89f65f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9d65a12
c89f65f
 
 
 
 
9d65a12
c89f65f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fa7eb7f
 
 
c89f65f
 
 
fa7eb7f
 
 
 
c89f65f
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
"""Configuration settings, environment variables, and constants."""

import os
from dotenv import load_dotenv

load_dotenv()

# Environment Variables
ZILLIZ_BEARER = os.getenv("ZILLIZ_BEARER")
ZILLIZ_ENDPOINT = os.getenv("ZILLIZ_ENDPOINT")
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")

# App Constants
# Note: TOTAL_GALAXIES is dynamically updated from Zilliz at startup (see app.py)
# This is just a fallback default value
TOTAL_GALAXIES = 0
DEFAULT_TOP_K = 300
DEFAULT_DISPLAY_COUNT = 60
LOAD_MORE_COUNT = 120

# Zilliz Configuration
ZILLIZ_COLLECTION_NAME = "legacy"
# Image search always uses legacy collection which has pre-existing embeddings
ZILLIZ_IMAGE_SEARCH_COLLECTION_NAME = ZILLIZ_COLLECTION_NAME

# Collection-specific configurations
COLLECTION_CONFIGS = {
    "legacy": {
        "anns_field": "aion_search_embedding",
        "primary_key": "object_id",
        "output_fields": ["object_id", "ra", "dec", "r_mag"]
    },
    "aionsearch": {
        "anns_field": "clip_embedding",
        "primary_key": "ra_dec",
        "output_fields": ["ra_dec", "ra", "dec", "r_mag"]
    }
}

# Get configuration for the selected collection
_collection_config = COLLECTION_CONFIGS.get(ZILLIZ_COLLECTION_NAME, COLLECTION_CONFIGS[ZILLIZ_COLLECTION_NAME])
ZILLIZ_ANNS_FIELD = _collection_config["anns_field"]
ZILLIZ_PRIMARY_KEY = _collection_config["primary_key"]
ZILLIZ_OUTPUT_FIELDS = _collection_config["output_fields"]

# OpenAI Configuration
OPENAI_EMBEDDING_MODEL = "text-embedding-3-large"

# CLIP Model Configuration
CLIP_EMBEDDING_DIM = 1024
CLIP_NORMALIZE_EPS = 1e-3

# UI Configuration
IMAGE_HEIGHT = "160px"
IMAGE_WIDTH = "100%"
CUTOUT_FOV = 0.025
CUTOUT_SIZE = 256

# URL State Configuration
URL_STATE_PARAM = "s"  # Query parameter name for encoded state

# Logging Configuration
VCU_COST_PER_MILLION = 4.0  # $4 per 1 million vCU

# Hugging Face Dataset Logging
HF_LOG_REPO_ID = os.getenv("HF_LOG_REPO_ID")  # e.g. "nolank/aionsearch-query-logs"
HF_LOG_EVERY_MINUTES = int(os.getenv("HF_LOG_EVERY_MINUTES", "10"))

# Feature Flags (for future features)
FEATURE_IMAGE_SEARCH = False
FEATURE_AUTH = False
FEATURE_CACHE = False
FEATURE_RERANKING = False
FEATURE_TRACKING = True
FEATURE_VECTOR_ADDITION = True