File size: 1,084 Bytes
c1dbdc6
 
a0f1a88
c1dbdc6
 
 
 
 
 
96fe8d8
 
c1dbdc6
 
 
 
 
96fe8d8
c1dbdc6
 
a0f1a88
 
 
 
c1dbdc6
 
 
 
a0f1a88
 
 
 
 
 
 
 
 
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
from pydantic_settings import BaseSettings, SettingsConfigDict
from functools import lru_cache
import itertools


class Settings(BaseSettings):
    model_config = SettingsConfigDict(env_file=".env", env_file_encoding="utf-8", extra="ignore")

    database_url: str
    qdrant_url: str
    qdrant_api_key: str
    redis_url: str
    groq_api_key: str
    groq_model: str = "llama-3.3-70b-versatile"
    embedding_model: str = "BAAI/bge-small-en-v1.5"
    reranker_model: str = "BAAI/bge-reranker-v2-m3"
    collection_name: str = "candidates_v1"
    vector_size: int = 384

    @property
    def groq_keys_list(self) -> list[str]:
        return [k.strip() for k in self.groq_api_key.split(",") if k.strip()]


@lru_cache
def get_settings() -> Settings:
    return Settings()

# Global memory state for circular revolving queue inside this worker thread
_groq_key_cycler = None

def get_revolving_groq_key() -> str:
    global _groq_key_cycler
    if _groq_key_cycler is None:
        _groq_key_cycler = itertools.cycle(get_settings().groq_keys_list)
    return next(_groq_key_cycler)