| from __future__ import annotations |
|
|
| import os |
|
|
|
|
| def _load_dotenv() -> None: |
| env_path = ".env" |
| if not os.path.exists(env_path): |
| return |
| with open(env_path, encoding="utf-8") as env_file: |
| for raw_line in env_file: |
| line = raw_line.strip() |
| if not line or line.startswith("#") or "=" not in line: |
| continue |
| key, value = line.split("=", 1) |
| os.environ.setdefault(key.strip(), value.strip().strip('"').strip("'")) |
|
|
|
|
| def _court_mode_from_env() -> str: |
| explicit = os.getenv("MODEL_COURT_MODE") |
| if explicit: |
| return explicit |
| mode = os.getenv("MODEL_MODE", os.getenv("MODEL_BACKEND", "mock")).lower() |
| if mode in {"vllm", "openai", "openai_compatible", "model"}: |
| return "vllm" |
| if mode == "hf_api": |
| return "hf_api" |
| return "deterministic" |
|
|
|
|
| _load_dotenv() |
|
|
| MODEL_BACKEND = os.getenv("MODEL_BACKEND", "mock") |
| MODEL_MODE = os.getenv("MODEL_MODE", MODEL_BACKEND) |
| _RAW_VLLM_BASE_URL = os.getenv("VLLM_BASE_URL") or os.getenv("MODEL_BASE_URL") |
| VLLM_BASE_URL = _RAW_VLLM_BASE_URL or "http://localhost:8000/v1" |
| MODEL_ENDPOINT_CONFIGURED = bool(_RAW_VLLM_BASE_URL) |
| VLLM_API_KEY = os.getenv("VLLM_API_KEY") or os.getenv("MODEL_API_KEY", "") |
| VLLM_TEXT_MODEL = os.getenv("VLLM_TEXT_MODEL") or os.getenv( |
| "MODEL_NAME", "Qwen/Qwen2.5-7B-Instruct" |
| ) |
| VLLM_VISION_MODEL = os.getenv("VLLM_VISION_MODEL", "Qwen/Qwen2.5-VL-7B-Instruct") |
| HF_API_TOKEN = os.getenv("HF_API_TOKEN") |
| MODEL_TIMEOUT_SECONDS = float(os.getenv("MODEL_TIMEOUT_SECONDS", "90")) |
| MODEL_REPAIR_ATTEMPTS = int(os.getenv("MODEL_REPAIR_ATTEMPTS", "1")) |
| MODEL_RETRY_ATTEMPTS = int(os.getenv("MODEL_RETRY_ATTEMPTS", "1")) |
|
|
| MODEL_COURT_MODE = _court_mode_from_env() |
| MODEL_COURT_ENDPOINT = os.getenv("MODEL_COURT_ENDPOINT") or VLLM_BASE_URL |
| MODEL_COURT_API_KEY = os.getenv("MODEL_COURT_API_KEY") or VLLM_API_KEY |
| MODEL_COURT_MODEL = os.getenv("MODEL_COURT_MODEL") or VLLM_TEXT_MODEL |
| MODEL_COURT_EXECUTION_PROFILE = os.getenv("MODEL_COURT_EXECUTION_PROFILE", "Deterministic Review") |
|
|