File size: 3,007 Bytes
317d1fd 45df059 317d1fd 86b116d 5b5f50c 317d1fd 5b5f50c 45df059 5b5f50c 86b116d b127732 84ae379 86b116d 45df059 5b5f50c 1fda7a5 45df059 1fda7a5 45df059 260a069 2a0dea8 260a069 2a0dea8 260a069 2a0dea8 45df059 1fda7a5 45df059 1fda7a5 45df059 260a069 45df059 317d1fd 86b116d 317d1fd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
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"
# 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')
# Handle the specific case where environment variable name is included
if 'hf_api_endpoint_url=' in url.lower():
# Extract the actual URL part
url = url.split('=')[-1]
# Remove any protocol prefix issues
url = url.replace('hf_api_endpoint_url=', '')
url = url.replace('HF_API_ENDPOINT_URL=', '')
# Ensure proper URL format
if url and not url.startswith(('http://', 'https://')):
# Check if it looks like a domain
if re.match(r'^[a-zA-Z0-9.-]+(?:\.[a-zA-Z]{2,})+', url) or 'huggingface.cloud' in url:
url = 'https://' + url
else:
url = 'https://' + url
# Remove double slashes (but keep ://)
if '://' in url:
protocol, rest = url.split('://', 1)
rest = re.sub(r'//+', '/', rest)
url = protocol + '://' + rest
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()
|