File size: 1,376 Bytes
e1ced8e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
from dotenv import load_dotenv

# Explicit path so .env is found regardless of the working directory
_THIS_DIR = os.path.dirname(os.path.abspath(__file__))
load_dotenv(os.path.join(_THIS_DIR, ".env"))

# --- API Keys ---
GOOGLE_API_KEY = os.environ.get("GOOGLE_API_KEY", "")
OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY", "")

# --- Model Names ---
PLANNER_MODEL = "gemini-3-flash-preview"
CROPPER_MODEL = "gemini-3-flash-preview"
ANNOTATOR_MODEL = "gemini-2.5-flash-image"
ANALYZER_MODEL = "gemini-3-flash-preview"
CODE_LOOKUP_MODEL = "gpt-5-mini"
DELIBERATION_MODEL = "gpt-5.2"
VERDICT_MODEL = "gemini-3-flash-preview"
METADATA_MODEL = "gemini-3-flash-preview"

# --- ChromaDB ---
CHROMA_DB_PATH = os.path.join(os.path.dirname(__file__), "data", "nyc_code_db")
CHROMA_COLLECTION_NAME = "nyc_building_codes"
EMBEDDING_MODEL_NAME = "BAAI/bge-large-en-v1.5"

# --- Processing Constants ---
PDF_RENDER_DPI = 100
MAX_INVESTIGATION_ROUNDS = 3
CROP_PADDING_PX = 40

# --- Code Lookup Budgets (per individual query, queries run in parallel) ---
MAX_DISCOVER_CALLS = 1
MAX_FETCH_CALLS = 1
MAX_CODE_LOOKUP_TURNS = 5

# --- Search Defaults ---
DISCOVER_N_RESULTS = 50    # Retrieve more candidates for re-ranking
RERANK_TOP_K = 20          # Return top-K after re-ranking
FETCH_MAX_SECTIONS = 30    # Max sections per chapter fetch