vanfun_be / config.py
moonbaek's picture
Upload 118 files
67819f1 verified
Raw
History Blame Contribute Delete
2.97 kB
"""
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()