rdune71's picture
Fix Redis SSL connection issues and Hugging Face provider deprecated parameters
3371ef4
raw
history blame
3.09 kB
import os
import re
import urllib.parse
from dotenv import load_dotenv
class Config:
def __init__(self):
load_dotenv()
# Detect if running on HF Spaces
self.is_hf_space = bool(os.getenv("SPACE_ID"))
# API tokens
self.hf_token = os.getenv("HF_TOKEN")
self.openai_api_key = os.getenv("OPENAI_API_KEY")
# API endpoints
self.hf_api_url = self._sanitize_url(os.getenv("HF_API_ENDPOINT_URL", "https://api-inference.huggingface.co/v1/"))
# Fallback settings
self.use_fallback = os.getenv("USE_FALLBACK", "true").lower() == "true"
# Redis configuration (optional for HF)
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"
# Local model configuration
self.local_model_name = os.getenv("LOCAL_MODEL_NAME", "mistral:latest")
self.ollama_host = self._sanitize_url(os.getenv("OLLAMA_HOST", ""))
# OpenWeather API
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 ""
# Remove leading/trailing whitespace and control characters
url = url.strip()
# Remove any newlines, carriage returns, tabs, and null bytes
url = re.sub(r'[\r\n\t\0\x0b\x0c]+', '', url)
# Remove any trailing URL encoding artifacts
url = url.rstrip('%0a').rstrip('%0d')
# Validate URL format - if it looks like a URL but missing scheme
if url and not re.match(r'^https?://', url):
# Check if it looks like a domain
if re.match(r'^[a-zA-Z0-9.-]+(?:\.[a-zA-Z]{2,})+', url) or 'ngrok' in url:
# Assume https for ngrok and domains
url = 'https://' + url
else:
# Otherwise default to http
url = 'http://' + url
return url
def _sanitize_host(self, host: str) -> str:
"""Sanitize host by removing whitespace and control characters"""
if not host:
return ""
# Remove leading/trailing whitespace and control characters
host = host.strip()
# Remove any newlines, carriage returns, tabs, and null bytes
host = re.sub(r'[\r\n\t\0\x0b\x0c]+', '', host)
# Remove any trailing URL encoding artifacts
host = host.rstrip('%0a').rstrip('%0d')
return host
# Global config instance
config = Config()