| from pydantic_settings import BaseSettings |
| from functools import lru_cache |
| import os |
| from dotenv import load_dotenv |
| from pydantic import field_validator |
|
|
| load_dotenv() |
|
|
| class Settings(BaseSettings): |
| """ |
| Lưu trữ và quản lý cấu hình ứng dụng từ biến môi trường. |
| Các thuộc tính: facebook_verify_token, facebook_app_secret, ... |
| """ |
| |
| facebook_verify_token: str = os.getenv("FACEBOOK_VERIFY_TOKEN") or "" |
| facebook_app_secret: str = os.getenv("FACEBOOK_APP_SECRET") or "" |
| |
| |
| google_sheets_credentials_file: str = os.getenv("GOOGLE_SHEETS_CREDENTIALS_FILE") or "" |
| google_sheets_token_file: str = os.getenv("GOOGLE_SHEETS_TOKEN_FILE") or "" |
| conversation_sheet_id: str = os.getenv("CONVERSATION_SHEET_ID") or "" |
| |
| |
| supabase_url: str = os.getenv("SUPABASE_URL") or "" |
| supabase_key: str = os.getenv("SUPABASE_KEY") or "" |
| |
| |
| host: str = os.getenv("HOST", "0.0.0.0") or "" |
| port: int = int(os.getenv("PORT", "8000")) or 8000 |
| |
| |
| log_level: str = os.getenv("LOG_LEVEL", "INFO") or "INFO" |
|
|
| |
| |
| |
| gemini_api_keys: str = "" |
| gemini_models: str = "" |
| gemini_base_url: str = os.getenv("GEMINI_BASE_URL", "https://generativelanguage.googleapis.com/v1") or "" |
|
|
| |
| llm_provider: str = os.getenv("LLM_PROVIDER", "gemini") or "" |
| llm_model: str = os.getenv("LLM_MODEL", "gemini-1.5-flash-latest") or "" |
| |
| embedding_provider: str = os.getenv("EMBEDDING_PROVIDER", "gemini") or "" |
| embedding_model: str = os.getenv("EMBEDDING_MODEL", "models/embedding-001") or "" |
|
|
| rerank_provider: str = os.getenv("RERANK_PROVIDER", "") or llm_provider |
| rerank_model: str = os.getenv("RERANK_MODEL", "") or llm_model |
|
|
| @property |
| def gemini_api_keys_list(self): |
| return [k.strip() for k in self.gemini_api_keys.split(",") if k.strip()] |
|
|
| @property |
| def gemini_models_list(self): |
| return [m.strip() for m in self.gemini_models.split(",") if m.strip()] |
|
|
| class Config: |
| env_file = ".env" |
|
|
| @lru_cache() |
| def get_settings() -> Settings: |
| """ |
| Lấy instance Settings đã cache (singleton). |
| Input: None |
| Output: Settings instance. |
| """ |
| return Settings() |