add quota manager
Browse files- app/config.py +17 -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] =
|
| 37 |
-
gemini_models: list[str] =
|
| 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] =
|
| 16 |
-
self.models: List[str] =
|
| 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()
|