File size: 1,447 Bytes
9213a97
 
 
 
233fa68
8635481
 
 
 
2cef617
 
9213a97
2cef617
 
 
 
426e9fe
2cef617
 
 
 
efc1009
8635481
e7c1bc2
 
 
8635481
 
9213a97
 
 
 
 
 
8635481
9213a97
 
2cef617
 
 
 
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
42
from typing import List, Optional
from pydantic_settings import BaseSettings, SettingsConfigDict
from pydantic import Field, AliasChoices, computed_field
import json, os

# ensure sane defaults for caches
os.environ.setdefault("HOME", "/workspace")
os.environ.setdefault("INSIGHTFACE_HOME", "/workspace/cache/insightface")
os.environ.setdefault("MPLCONFIGDIR", "/workspace/cache/matplotlib")

class Settings(BaseSettings):
    model_config = SettingsConfigDict(env_file=".env", extra="ignore")
    INDEX_DIR: str = "/workspace/data/index"
    CACHE_DIR: str = "/workspace/cache"
    THRESHOLD: float = 0.50
    MARGIN: float = 0.05
    TIMEOUT: int = 180
    TOPK_DB: int = 20
    TOPK_SHOW: int = 3
    SQLITE_PATH: str = "/workspace/data/demo.db"

    LLM_MODEL_ID: str = "google/gemma-3-27b-it"
    HF_TOKEN: Optional[str] = None
    LLM_MAX_NEW_TOKENS: int = 200
    LLM_TEMPERATURE: float = 0.2

    PROVIDERS_RAW: Optional[str] = Field(default=None, validation_alias=AliasChoices("PROVIDERS"))

    @computed_field(return_type=List[str])
    @property
    def PROVIDERS(self) -> List[str]:
        s = (self.PROVIDERS_RAW or "").strip()
        if not s:
            return ["CPUExecutionProvider"]
        if s.startswith("["):
            return json.loads(s)
        return [p.strip() for p in s.split(",") if p.strip()]

settings = Settings()
os.makedirs(settings.INDEX_DIR, exist_ok=True)
os.makedirs(settings.CACHE_DIR, exist_ok=True)