Spaces:
Sleeping
Sleeping
| """Central configuration, loaded from the environment / .env file.""" | |
| import os | |
| from dotenv import load_dotenv | |
| load_dotenv() | |
| def _require(name: str) -> str: | |
| value = os.getenv(name) | |
| if not value: | |
| raise RuntimeError( | |
| f"Missing required environment variable {name!r}. " | |
| "Copy .env.example to .env and fill it in." | |
| ) | |
| return value | |
| # --- Database --- | |
| DB_SERVER = _require("DB_SERVER") | |
| DB_PORT = os.getenv("DB_PORT", "1433") | |
| DB_NAME = _require("DB_NAME") | |
| DB_USER = _require("DB_USER") | |
| DB_PASSWORD = _require("DB_PASSWORD") | |
| DB_DRIVER = os.getenv("DB_DRIVER", "ODBC Driver 18 for SQL Server") | |
| # --- LLM backend (OpenAI-compatible: Groq, ngrok AI Gateway, OpenAI, etc.) --- | |
| # Default: Groq free tier. Swap LLM_BASE_URL/LLM_MODEL to use another backend. | |
| LLM_BASE_URL = os.getenv("LLM_BASE_URL", "https://api.groq.com/openai/v1") | |
| LLM_API_KEY = os.getenv("LLM_API_KEY", "") | |
| LLM_MODEL = os.getenv("LLM_MODEL", "llama-3.3-70b-versatile") | |
| # Price per 1M tokens for cost roll-ups (defaults = Groq Llama 3.3 70B paid rate). | |
| # On the free tier your real cost is $0 — these power the projected-cost metric. | |
| LLM_PRICE_IN = float(os.getenv("LLM_PRICE_IN", "0.59")) | |
| LLM_PRICE_OUT = float(os.getenv("LLM_PRICE_OUT", "0.79")) | |
| # --- Monitoring --- | |
| # If set, /api/metrics requires header X-Metrics-Token: <this> (empty = open). | |
| METRICS_TOKEN = os.getenv("METRICS_TOKEN", "") | |
| # --- Behaviour --- | |
| MAX_RESULT_ROWS = int(os.getenv("MAX_RESULT_ROWS", "200")) | |
| QUERY_TIMEOUT = int(os.getenv("QUERY_TIMEOUT", "30")) | |
| # Comma-separated list of web origins allowed to call the API (for embedding the | |
| # widget on another site). Use "*" for any origin (dev only). In production set | |
| # this to your site, e.g. "https://www.antern.com,https://antern.com". | |
| ALLOWED_ORIGINS = [ | |
| o.strip() for o in os.getenv("ALLOWED_ORIGINS", "*").split(",") if o.strip() | |
| ] | |
| def connection_string() -> str: | |
| """Build a pyodbc connection string. Password is wrapped in braces so | |
| special characters (e.g. & in the password) are handled safely.""" | |
| return ( | |
| f"DRIVER={{{DB_DRIVER}}};" | |
| f"SERVER={DB_SERVER},{DB_PORT};" | |
| f"DATABASE={DB_NAME};" | |
| f"UID={DB_USER};" | |
| f"PWD={{{DB_PASSWORD}}};" | |
| "Encrypt=yes;" | |
| "TrustServerCertificate=yes;" | |
| f"Connection Timeout=15;" | |
| ) | |