CoolFace
Apppublic

ykumar2020/gaia-final-assignment

sourceHugging Faceupdated 1mo agoView on Hugging Face
0likes
config.py111 linesDownload Raw Back to root
1"""Environment-only runtime configuration for the GAIA agent."""
2
3from __future__ import annotations
4
5import os
6from dataclasses import dataclass
7from pathlib import Path
8
9
10def _int(name: str, default: int) -> int:
11    try:
12        return int(os.getenv(name, str(default)))
13    except ValueError as exc:
14        raise ValueError(f"{name} must be an integer") from exc
15
16
17def _float(name: str, default: float) -> float:
18    try:
19        return float(os.getenv(name, str(default)))
20    except ValueError as exc:
21        raise ValueError(f"{name} must be a number") from exc
22
23
24def _bool(name: str, default: bool) -> bool:
25    value = os.getenv(name)
26    if value is None:
27        return default
28    return value.strip().lower() in {"1", "true", "yes", "on"}
29
30
31@dataclass(frozen=True)
32class Settings:
33    api_url: str
34    hf_token: str | None
35    model_id: str
36    vision_model_id: str
37    inference_provider: str | None
38    asr_model_id: str
39    cache_dir: Path
40    request_timeout: float
41    retries: int
42    backoff_seconds: float
43    max_steps: int
44    use_cache: bool
45    stockfish_path: str | None
46    fallback_model_id: str | None = None
47    fallback_provider: str | None = None
48    worker_limit: int = 3
49    model_requests_per_minute: float = 20.0
50    search_requests_per_minute: float = 30.0
51    user_agent: str = "GAIA-Level1-Agent/1.0 (public Hugging Face Space)"
52    agent_code_url: str | None = None
53    allow_inline_agent_code: bool = False
54    local_model_id: str | None = None
55    local_model_url: str = "http://127.0.0.1:11434/v1"
56    prefer_local_model: bool = False
57
58    @classmethod
59    def from_env(cls) -> Settings:
60        root = Path(os.getenv("GAIA_CACHE_DIR", "data"))
61        provider = (
62            os.getenv("HF_PROVIDER") or os.getenv("HF_INFERENCE_PROVIDER") or None
63        )
64        return cls(
65            api_url=os.getenv(
66                "GAIA_API_URL", "https://agents-course-unit4-scoring.hf.space"
67            ).rstrip("/"),
68            hf_token=os.getenv("HF_TOKEN") or None,
69            model_id=os.getenv("MODEL_ID")
70            or os.getenv("GAIA_MODEL_ID", "openai/gpt-oss-120b"),
71            vision_model_id=os.getenv(
72                "GAIA_VISION_MODEL_ID", "Qwen/Qwen3-VL-235B-A22B-Instruct"
73            ),
74            inference_provider=provider,
75            asr_model_id=os.getenv("GAIA_ASR_MODEL_ID", "openai/whisper-large-v3"),
76            cache_dir=root,
77            request_timeout=_float("GAIA_REQUEST_TIMEOUT", 60.0),
78            retries=max(1, _int("GAIA_RETRIES", 3)),
79            backoff_seconds=max(0.0, _float("GAIA_BACKOFF_SECONDS", 1.0)),
80            max_steps=max(1, _int("GAIA_MAX_STEPS", 10)),
81            use_cache=_bool("GAIA_USE_CACHE", True),
82            stockfish_path=os.getenv("STOCKFISH_PATH") or None,
83            fallback_model_id=os.getenv("FALLBACK_MODEL_ID") or "openai/gpt-oss-20b",
84            fallback_provider=os.getenv("HF_FALLBACK_PROVIDER") or None,
85            worker_limit=max(1, _int("GAIA_WORKERS", 3)),
86            model_requests_per_minute=max(
87                1.0, _float("GAIA_MODEL_REQUESTS_PER_MINUTE", 20.0)
88            ),
89            search_requests_per_minute=max(
90                1.0, _float("GAIA_SEARCH_REQUESTS_PER_MINUTE", 30.0)
91            ),
92            user_agent=os.getenv(
93                "GAIA_USER_AGENT",
94                "GAIA-Level1-Agent/1.0 (public Hugging Face Space)",
95            ),
96            agent_code_url=os.getenv("GAIA_AGENT_CODE_URL") or None,
97            allow_inline_agent_code=_bool("GAIA_ALLOW_INLINE_AGENT_CODE", False),
98            local_model_id=os.getenv("GAIA_LOCAL_MODEL_ID") or None,
99            local_model_url=os.getenv(
100                "GAIA_LOCAL_MODEL_URL", "http://127.0.0.1:11434/v1"
101            ).rstrip("/"),
102            prefer_local_model=_bool("GAIA_PREFER_LOCAL_MODEL", False),
103        )
104
105    def require_hf_token(self) -> str:
106        if not self.hf_token:
107            raise RuntimeError(
108                "HF_TOKEN is required for inference. Add it as a Hugging Face Space secret."
109            )
110        return self.hf_token
111