Spaces:
Sleeping
Sleeping
| """ | |
| HuggingFace Spaces entry point for ChatCal.ai | |
| Minimal changes - uses JWT sessions instead of Redis | |
| """ | |
| import os | |
| import sys | |
| import uvicorn | |
| from datetime import datetime | |
| # Add the current directory to Python path for imports | |
| sys.path.insert(0, '/app') | |
| # Set HF-specific environment variables | |
| os.environ.setdefault("SESSION_BACKEND", "jwt") | |
| os.environ.setdefault("APP_ENV", "production") | |
| os.environ.setdefault("APP_PORT", "7860") # HF Spaces default port | |
| # Import after setting up the path | |
| from app.api.main import app | |
| if __name__ == "__main__": | |
| # Setup enhanced dual logging (stdout + file) | |
| from app.core.logging_config import setup_enhanced_logging, setup_breakpoint_debugging | |
| # Enable DEBUG level for comprehensive logging | |
| log_level = os.environ.get("LOG_LEVEL", "DEBUG") | |
| log_file = setup_enhanced_logging(log_level=log_level, log_file="/tmp/app.log") | |
| setup_breakpoint_debugging() | |
| import logging | |
| logger = logging.getLogger("app.startup") | |
| port = int(os.environ.get("PORT", os.environ.get("APP_PORT", 7860))) | |
| logger.info(f"π Starting ChatCal.ai VoiceCal-ai-v1 on port {port}") | |
| logger.info(f"π§ Session Backend: {os.environ.get('SESSION_BACKEND', 'unknown')}") | |
| logger.info(f"π Environment: {os.environ.get('APP_ENV', 'unknown')}") | |
| logger.info(f"π Log file: {log_file}") | |
| logger.info(f"π SSH debugging available via Dev Mode") | |
| # Additional startup diagnostics | |
| logger.debug("π Environment check:") | |
| required_vars = ["GROQ_API_KEY", "GOOGLE_CLIENT_ID", "GOOGLE_CLIENT_SECRET", "SECRET_KEY"] | |
| for var in required_vars: | |
| value = os.environ.get(var, "NOT_SET") | |
| masked = value[:10] + "..." if len(value) > 10 and value != "NOT_SET" else value | |
| logger.debug(f" {var}: {masked}") | |
| try: | |
| # Add startup delay to prevent rapid restart loops | |
| import time | |
| time.sleep(2) # Give HF Spaces time to stabilize | |
| uvicorn.run( | |
| app, | |
| host="0.0.0.0", | |
| port=port, | |
| log_level="warning", # Reduce uvicorn noise, our dual logger handles app logs | |
| access_log=False, # Reduce access log spam | |
| reload=False, # Never use reload in production | |
| workers=1 # Single worker for HF Spaces | |
| ) | |
| except Exception as e: | |
| logger.critical(f"π₯ Application startup failed: {e}") | |
| raise |