|
|
import os |
|
|
import re |
|
|
import urllib.parse |
|
|
from dotenv import load_dotenv |
|
|
|
|
|
class Config: |
|
|
def __init__(self): |
|
|
load_dotenv() |
|
|
|
|
|
|
|
|
self.is_hf_space = bool(os.getenv("SPACE_ID")) |
|
|
|
|
|
|
|
|
self.hf_token = os.getenv("HF_TOKEN") |
|
|
self.openai_api_key = os.getenv("OPENAI_API_KEY") |
|
|
|
|
|
|
|
|
self.hf_api_url = self._sanitize_url(os.getenv("HF_API_ENDPOINT_URL", "https://api-inference.huggingface.co/v1/")) |
|
|
|
|
|
|
|
|
self.use_fallback = os.getenv("USE_FALLBACK", "true").lower() == "true" |
|
|
|
|
|
|
|
|
self.redis_host = self._sanitize_host(os.getenv("REDIS_HOST", "")) |
|
|
self.redis_port = int(os.getenv("REDIS_PORT", "6379")) |
|
|
self.redis_username = os.getenv("REDIS_USERNAME", "") |
|
|
self.redis_password = os.getenv("REDIS_PASSWORD", "") |
|
|
self.redis_retries = int(os.getenv("REDIS_RETRIES", "3")) |
|
|
self.redis_retry_delay = int(os.getenv("REDIS_RETRY_DELAY", "1")) |
|
|
self.redis_disable_ssl = os.getenv("REDIS_DISABLE_SSL", "false").lower() == "true" |
|
|
|
|
|
|
|
|
self.local_model_name = os.getenv("LOCAL_MODEL_NAME", "mistral:latest") |
|
|
self.ollama_host = self._sanitize_url(os.getenv("OLLAMA_HOST", "")) |
|
|
|
|
|
|
|
|
self.openweather_api_key = os.getenv("OPENWEATHER_API_KEY") |
|
|
|
|
|
def _sanitize_url(self, url: str) -> str: |
|
|
"""Sanitize URL by removing whitespace and control characters""" |
|
|
if not url: |
|
|
return "" |
|
|
|
|
|
|
|
|
url = url.strip() |
|
|
|
|
|
|
|
|
url = re.sub(r'[\r\n\t\0\x0b\x0c]+', '', url) |
|
|
|
|
|
|
|
|
url = url.rstrip('%0a').rstrip('%0d') |
|
|
|
|
|
|
|
|
if url and not re.match(r'^https?://', url): |
|
|
|
|
|
if re.match(r'^[a-zA-Z0-9.-]+(?:\.[a-zA-Z]{2,})+', url) or 'ngrok' in url: |
|
|
|
|
|
url = 'https://' + url |
|
|
else: |
|
|
|
|
|
url = 'http://' + url |
|
|
|
|
|
return url |
|
|
|
|
|
def _sanitize_host(self, host: str) -> str: |
|
|
"""Sanitize host by removing whitespace and control characters""" |
|
|
if not host: |
|
|
return "" |
|
|
|
|
|
|
|
|
host = host.strip() |
|
|
|
|
|
|
|
|
host = re.sub(r'[\r\n\t\0\x0b\x0c]+', '', host) |
|
|
|
|
|
|
|
|
host = host.rstrip('%0a').rstrip('%0d') |
|
|
|
|
|
return host |
|
|
|
|
|
|
|
|
config = Config() |
|
|
|