import os # Embedding model (late-interaction / ColBERT-style page embeddings). COLEMBED_MODEL_ID = os.environ.get( "COLEMBED_MODEL_ID", "nvidia/nemotron-colembed-vl-4b-v2" ) # sdpa works for this model and needs no extra wheels on ZeroGPU; set # COLEMBED_ATTN=flash_attention_2 if flash-attn is installed. COLEMBED_ATTN = os.environ.get("COLEMBED_ATTN", "sdpa") # Page rendering (both for embedding at index time and for the answering model). RENDER_DPI = 150 # Indexing: pages embedded per ZeroGPU call, and model batch size within a call. # Chunking keeps each GPU call well under its duration limit; progress is # reported between chunks. EMBED_PAGES_PER_CALL = 16 EMBED_BATCH_SIZE = 4 EMBED_GPU_DURATION = 120 # Retrieval: MaxSim is computed on GPU over fixed-size batches of pages # streamed from the on-disk store. SCORE_PAGES_PER_BATCH = 32 SEARCH_GPU_DURATION = 60 DEFAULT_TOP_K = 3 MAX_TOP_K = 5 # Answering model (runs locally on ZeroGPU). MINICPM_MODEL_ID = os.environ.get("MINICPM_MODEL_ID", "openbmb/MiniCPM-V-4_5") ANSWER_GPU_DURATION = 120 ANSWER_MAX_NEW_TOKENS = 2048 # Embedding store. HF Spaces persistent storage mounts at /data; fall back to a # local directory for development. STORE_DIR = os.environ.get("STORE_DIR") or ( "/data/library" if os.path.isdir("/data") else os.path.join(os.path.dirname(os.path.dirname(__file__)), "library") )