""" Cấu hình kết nối Qwen-72B API Hỗ trợ: Nvidia NIM, Together AI, hoặc bất kỳ OpenAI-compatible endpoint nào """ import os from dataclasses import dataclass from pathlib import Path try: from dotenv import load_dotenv dotenv_path = Path(__file__).resolve().parent / '.env' if dotenv_path.exists(): load_dotenv(dotenv_path=dotenv_path) print(f"✅ Loaded environment variables from {dotenv_path}") else: print(f"⚠️ .env file not found at {dotenv_path}. Please create it or export env vars.") except ImportError: print("⚠️ python-dotenv is not installed. .env file will not be loaded automatically.") @dataclass class QwenConfig: # --- Chọn 1 trong 3 provider bên dưới --- # Option 1: Nvidia NIM (khuyên dùng — latency thấp, chất lượng cao) NVIDIA_API_KEY: str = os.getenv("NVIDIA_API_KEY", "") NVIDIA_BASE_URL: str = "https://integrate.api.nvidia.com/v1" NVIDIA_MODEL: str = "qwen/qwen2.5-72b-instruct" # Option 2: Together AI TOGETHER_API_KEY: str = os.getenv("TOGETHER_API_KEY", "") TOGETHER_BASE_URL: str = "https://api.together.xyz/v1" TOGETHER_MODEL: str = "Qwen/Qwen2.5-72B-Instruct-Turbo" # Option 3: OpenRouter (fallback) OPENROUTER_API_KEY: str = os.getenv("OPENROUTER_API_KEY", "") OPENROUTER_BASE_URL: str = "https://openrouter.ai/api/v1" OPENROUTER_MODEL: str = "qwen/qwen-2.5-72b-instruct" # --- Provider đang dùng --- ACTIVE_PROVIDER: str = os.getenv("QWEN_PROVIDER", "nvidia") # nvidia | together | openrouter # --- Tham số generation --- # temperature thấp → output ổn định, JSON ít bị lỗi TEMPERATURE: float = 0.1 # max_tokens đủ lớn để tránh bị cắt cụt giữa JSON MAX_TOKENS: int = 2048 TOP_P: float = 0.9 # Dừng nếu gặp dấu hiệu JSON đã đóng xong STOP_SEQUENCES: list = None def __post_init__(self): if self.STOP_SEQUENCES is None: self.STOP_SEQUENCES = [] @property def active_api_key(self) -> str: mapping = { "nvidia": self.NVIDIA_API_KEY, "together": self.TOGETHER_API_KEY, "openrouter": self.OPENROUTER_API_KEY, } return mapping[self.ACTIVE_PROVIDER] @property def active_base_url(self) -> str: mapping = { "nvidia": self.NVIDIA_BASE_URL, "together": self.TOGETHER_BASE_URL, "openrouter": self.OPENROUTER_BASE_URL, } return mapping[self.ACTIVE_PROVIDER] @property def active_model(self) -> str: mapping = { "nvidia": self.NVIDIA_MODEL, "together": self.TOGETHER_MODEL, "openrouter": self.OPENROUTER_MODEL, } return mapping[self.ACTIVE_PROVIDER] # Singleton config config = QwenConfig()