VietCat commited on
Commit
c0907f8
·
1 Parent(s): cddaff2

add quota manager

Browse files
Files changed (2) hide show
  1. app/config.py +17 -2
  2. app/request_limit_manager.py +2 -2
app/config.py CHANGED
@@ -2,6 +2,7 @@ from pydantic_settings import BaseSettings
2
  from functools import lru_cache
3
  import os
4
  from dotenv import load_dotenv
 
5
 
6
  load_dotenv()
7
 
@@ -33,8 +34,8 @@ class Settings(BaseSettings):
33
  # Gemini Configuration
34
  # Hỗ trợ nhiều API key và model cho Gemini
35
  # Định nghĩa biến môi trường: GEMINI_API_KEYS="key1,key2,..."; GEMINI_MODELS="model1,model2,..."
36
- gemini_api_keys: list[str] = os.getenv("GEMINI_API_KEYS", "").split(",") if os.getenv("GEMINI_API_KEYS") else []
37
- gemini_models: list[str] = os.getenv("GEMINI_MODELS", "").split(",") if os.getenv("GEMINI_MODELS") else []
38
  gemini_base_url: str = os.getenv("GEMINI_BASE_URL", "https://generativelanguage.googleapis.com/v1") or ""
39
 
40
  # LLM (chat/completion) provider/model
@@ -47,6 +48,20 @@ class Settings(BaseSettings):
47
  rerank_provider: str = os.getenv("RERANK_PROVIDER", "") or llm_provider
48
  rerank_model: str = os.getenv("RERANK_MODEL", "") or llm_model
49
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50
  class Config:
51
  env_file = ".env"
52
 
 
2
  from functools import lru_cache
3
  import os
4
  from dotenv import load_dotenv
5
+ from pydantic import field_validator
6
 
7
  load_dotenv()
8
 
 
34
  # Gemini Configuration
35
  # Hỗ trợ nhiều API key và model cho Gemini
36
  # Định nghĩa biến môi trường: GEMINI_API_KEYS="key1,key2,..."; GEMINI_MODELS="model1,model2,..."
37
+ gemini_api_keys: list[str] = []
38
+ gemini_models: list[str] = []
39
  gemini_base_url: str = os.getenv("GEMINI_BASE_URL", "https://generativelanguage.googleapis.com/v1") or ""
40
 
41
  # LLM (chat/completion) provider/model
 
48
  rerank_provider: str = os.getenv("RERANK_PROVIDER", "") or llm_provider
49
  rerank_model: str = os.getenv("RERANK_MODEL", "") or llm_model
50
 
51
+ @field_validator("gemini_api_keys", mode="before")
52
+ @classmethod
53
+ def split_gemini_api_keys(cls, v):
54
+ if isinstance(v, str):
55
+ return [k.strip() for k in v.split(",") if k.strip()]
56
+ return v
57
+
58
+ @field_validator("gemini_models", mode="before")
59
+ @classmethod
60
+ def split_gemini_models(cls, v):
61
+ if isinstance(v, str):
62
+ return [m.strip() for m in v.split(",") if m.strip()]
63
+ return v
64
+
65
  class Config:
66
  env_file = ".env"
67
 
app/request_limit_manager.py CHANGED
@@ -12,8 +12,8 @@ class RequestLimitManager:
12
  def _init_keys_models(self):
13
  settings = get_settings()
14
  if self.provider == "gemini":
15
- self.api_keys: List[str] = [k.strip() for k in getattr(settings, 'gemini_api_keys', []) if k.strip()]
16
- self.models: List[str] = [m.strip() for m in getattr(settings, 'gemini_models', []) if m.strip()]
17
  # Có thể mở rộng cho provider khác ở đây
18
  self.status: Dict[str, Dict[str, Dict[str, Union[str, float]]]] = {}
19
  now = time.time()
 
12
  def _init_keys_models(self):
13
  settings = get_settings()
14
  if self.provider == "gemini":
15
+ self.api_keys: List[str] = getattr(settings, 'gemini_api_keys', [])
16
+ self.models: List[str] = getattr(settings, 'gemini_models', [])
17
  # Có thể mở rộng cho provider khác ở đây
18
  self.status: Dict[str, Dict[str, Dict[str, Union[str, float]]]] = {}
19
  now = time.time()