Autism_QA / run_main.py
A7m0d's picture
Upload folder using huggingface_hub
712579e verified
import sys
import os
import logging
from typing import Optional
from pathlib import Path
# Add the current directory to Python path
current_dir = Path(__file__).parent.absolute()
sys.path.insert(0, str(current_dir))
# Import functional modules
try:
from main import main, validate_environment
from audio_utils import validate_environment as validate_audio_env
except ImportError as e:
print(f"Error importing functional modules: {e}")
print("Please ensure all required dependencies are installed.")
sys.exit(1)
# Configure logging
def setup_logging(level: str = "INFO") -> logging.Logger:
"""Set up application logging."""
log_level = getattr(logging, level.upper(), logging.INFO)
logging.basicConfig(
level=log_level,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.StreamHandler(sys.stdout),
logging.FileHandler('wisal_app.log', mode='a')
]
)
return logging.getLogger('WisalApp')
def check_dependencies() -> bool:
"""Check if all required dependencies are available."""
required_packages = [
'gradio',
'numpy',
'soundfile',
'webrtcvad',
'fastrtc',
'google.genai',
'openai',
'weaviate',
'langdetect',
'requests',
'langchain',
'pypdf',
'docx', # python-docx imports as 'docx'
'dotenv'
]
missing_packages = []
for package in required_packages:
try:
__import__(package.replace('-', '_').replace('.', '.'))
except ImportError:
missing_packages.append(package)
if missing_packages:
print(f"Missing required packages: {', '.join(missing_packages)}")
print("Please install them using: pip install " + " ".join(missing_packages))
return False
return True
def check_environment_files() -> bool:
"""Check if required environment files exist."""
required_files = ['.env']
missing_files = []
for file_path in required_files:
if not os.path.exists(file_path):
missing_files.append(file_path)
if missing_files:
print(f"Missing required files: {', '.join(missing_files)}")
print("Please create a .env file with the required API keys.")
return False
return True
def print_startup_banner():
"""Print application startup banner."""
banner = """
╔═══════════════════════════════════════════════════════════════╗
β•‘ β•‘
β•‘ πŸ€– Wisal: Autism AI Assistant β•‘
β•‘ β•‘
β•‘ Functional Programming Version β•‘
β•‘ Developed by Compumacy AI β•‘
β•‘ β•‘
β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
"""
print(banner)
def print_feature_overview():
"""Print overview of available features."""
features = """
πŸ”§ Available Features:
β”œβ”€β”€ πŸ’¬ Text-based chat with autism expertise
β”œβ”€β”€ 🎀 Voice input with transcription
β”œβ”€β”€ πŸ”Š Text-to-speech responses
β”œβ”€β”€ πŸ“„ Document upload and Q&A
β”œβ”€β”€ πŸ” Web search integration
β”œβ”€β”€ 🧠 RAG (Retrieval Augmented Generation)
β”œβ”€β”€ 🎯 Functional programming architecture
└── 🌐 Real-time voice chat (WebRTC)
"""
print(features)
def run_pre_flight_checks() -> bool:
"""Run all pre-flight checks before starting the application."""
app_logger = setup_logging()
print_startup_banner()
app_logger.info("Starting pre-flight checks...")
# Check 1: Dependencies
app_logger.info("Checking dependencies...")
if not check_dependencies():
app_logger.error("Dependency check failed")
return False
app_logger.info("βœ… Dependencies check passed")
# Check 2: Environment files
app_logger.info("Checking environment files...")
if not check_environment_files():
app_logger.error("Environment files check failed")
return False
app_logger.info("βœ… Environment files check passed")
# Check 3: Environment variables
app_logger.info("Validating environment variables...")
if not validate_environment():
app_logger.warning("⚠️ Some environment variables are missing - features may be limited")
else:
app_logger.info("βœ… Environment variables validated")
# Check 4: Audio environment
app_logger.info("Checking audio environment...")
if not validate_audio_env():
app_logger.warning("⚠️ Audio environment not fully configured - voice features may be limited")
else:
app_logger.info("βœ… Audio environment validated")
app_logger.info("Pre-flight checks completed")
print_feature_overview()
return True
def handle_graceful_shutdown():
"""Handle graceful application shutdown."""
print("\nπŸ”„ Shutting down Wisal gracefully...")
print("πŸ‘‹ Thank you for using Wisal!")
def run_application():
"""Run the main application with error handling."""
try:
print("πŸš€ Starting Wisal application...")
main()
except KeyboardInterrupt:
handle_graceful_shutdown()
except Exception as e:
print(f"❌ Application error: {e}")
logging.error(f"Application error: {e}", exc_info=True)
sys.exit(1)
def main_runner():
"""Main runner function."""
try:
# Run pre-flight checks
if not run_pre_flight_checks():
print("❌ Pre-flight checks failed. Cannot start application.")
sys.exit(1)
print("βœ… All checks passed. Starting application...")
# Run the application
run_application()
except Exception as e:
print(f"❌ Fatal error during startup: {e}")
logging.error(f"Fatal startup error: {e}", exc_info=True)
sys.exit(1)
if __name__ == "__main__":
main_runner()