AI-Life-Coach-Streamlit2 / utils /config_validator.py
rdune71's picture
Clean up old Redis configuration references and simplify config parsing
1fda7a5
import logging
import re
import urllib.parse
from utils.config import config
logger = logging.getLogger(__name__)
class ConfigValidator:
"""Utility for validating configuration values"""
@staticmethod
def validate_all() -> dict:
"""Validate all configuration values and return report"""
report = {
'valid': True,
'errors': [],
'warnings': []
}
# Log current configuration for debugging
logger.info(f"Current configuration:")
logger.info(f" OLLAMA_HOST: '{config.ollama_host}'")
# Validate Ollama host
if config.ollama_host:
sanitized = config._sanitize_url(config.ollama_host)
if sanitized != config.ollama_host:
logger.info(f"Sanitized OLLAMA_HOST from '{config.ollama_host}' to '{sanitized}'")
if not ConfigValidator._is_valid_url(sanitized):
report['errors'].append(f"Invalid OLLAMA_HOST format: {config.ollama_host}")
report['valid'] = False
else:
report['warnings'].append("OLLAMA_HOST not set, local Ollama won't be available")
# Validate Hugging Face token
if config.hf_token:
if len(config.hf_token) < 10: # Basic sanity check
report['warnings'].append("HF_TOKEN seems too short to be valid")
else:
report['warnings'].append("HF_TOKEN not set, Hugging Face models won't be available")
# Validate OpenAI API key
if config.openai_api_key:
if not re.match(r'^sk-[a-zA-Z0-9]{32,}', config.openai_api_key):
report['warnings'].append("OPENAI_API_KEY format looks invalid")
else:
report['warnings'].append("OPENAI_API_KEY not set, OpenAI models won't be available")
return report
@staticmethod
def _is_valid_url(url: str) -> bool:
"""Check if URL is valid"""
try:
result = urllib.parse.urlparse(url)
return all([result.scheme, result.netloc])
except:
return False
@staticmethod
def _is_valid_host(host: str) -> bool:
"""Check if host is valid"""
if not host:
return False
# Basic regex for hostname validation
pattern = r'^[a-zA-Z0-9.-]+$'
return bool(re.match(pattern, host))
def validate_configuration():
"""Validate configuration and log results"""
validator = ConfigValidator()
report = validator.validate_all()
if report['errors']:
logger.error("Configuration validation errors:")
for error in report['errors']:
logger.error(f" - {error}")
if report['warnings']:
logger.warning("Configuration warnings:")
for warning in report['warnings']:
logger.warning(f" - {warning}")
return report['valid']
# Run validation on import
validate_configuration()