Spaces:
Running
Running
| """ | |
| RoutePilot - GNN-LLM Intelligent Selection System | |
| Hugging Face Spaces Entry Point | |
| This is the main entry point for the Hugging Face Spaces deployment. | |
| It imports the necessary components from the existing application and | |
| sets up the Gradio interface for deployment. | |
| """ | |
| import os | |
| import sys | |
| import gradio as gr | |
| # Add the current directory to Python path for imports | |
| sys.path.append(os.path.dirname(__file__)) | |
| # Import the main application components | |
| from demo import create_interface, initialize_nvidia_client, test_nvidia_api_connection | |
| # Set up environment variables for Hugging Face Spaces | |
| def setup_environment(): | |
| """Set up environment variables for Hugging Face Spaces deployment""" | |
| # Check if we're running on Hugging Face Spaces | |
| if os.getenv("SPACE_ID"): | |
| print("π Running on Hugging Face Spaces") | |
| # Check for NVIDIA API key | |
| api_key = os.getenv("NVIDIA_API_KEY") | |
| if not api_key: | |
| print("β οΈ NVIDIA_API_KEY not set in Space secrets.") | |
| print(" Please set NVIDIA_API_KEY in the Space Repository Secrets.") | |
| print(" Some features may be limited without API access.") | |
| else: | |
| print("β NVIDIA_API_KEY found in Space secrets") | |
| print(f" Key length: {len(api_key)} characters") | |
| print(f" Key starts with: {api_key[:8]}...") | |
| print(f" Key ends with: ...{api_key[-4:]}") | |
| print(f" Key is all uppercase: {'Yes' if api_key.isupper() else 'No'}") | |
| # Check for common API key patterns | |
| if api_key.startswith('nvapi-'): | |
| print(" β Key format appears correct (starts with 'nvapi-')") | |
| elif api_key.startswith('nv-'): | |
| print(" β Key format appears correct (starts with 'nv-')") | |
| else: | |
| print(" β οΈ Key format may be incorrect (should start with 'nvapi-' or 'nv-')") | |
| # Set CUDA device for Spaces (usually limited resources) | |
| os.environ["CUDA_VISIBLE_DEVICES"] = "0" | |
| # Set memory optimization flags | |
| os.environ["PYTORCH_CUDA_ALLOC_CONF"] = "max_split_size_mb:128" | |
| else: | |
| print("π Running locally") | |
| # Check for local .env file | |
| api_key = os.getenv("NVIDIA_API_KEY") | |
| if not api_key: | |
| print("βΉοΈ NVIDIA_API_KEY not found. For local development, create a .env file") | |
| print(" or set the environment variable manually.") | |
| def main(): | |
| """Main function to launch the application""" | |
| # Set up environment | |
| setup_environment() | |
| # Reinitialize NVIDIA client after environment setup | |
| print("π Reinitializing NVIDIA API client...") | |
| # Import demo module and reinitialize client | |
| import demo | |
| print(f"π Initial client status: {'β Available' if demo.client is not None else 'β None'}") | |
| print(f"π API key in environment: {'β Present' if os.getenv('NVIDIA_API_KEY') else 'β Missing'}") | |
| if demo.client is None and os.getenv("NVIDIA_API_KEY"): | |
| print("π Attempting to reinitialize client with environment variables...") | |
| # Reinitialize the client and update the module variable | |
| demo.client = initialize_nvidia_client() | |
| print(f"π Client reinitialized: {'β Success' if demo.client is not None else 'β Failed'}") | |
| elif demo.client is not None: | |
| print("β Client already initialized") | |
| else: | |
| print("β No API key available for client initialization") | |
| # Final client status check | |
| print(f"π Final client status: {'β Available' if demo.client is not None else 'β None'}") | |
| # Test API connection | |
| if os.getenv("NVIDIA_API_KEY") and demo.client is not None: | |
| print("π§ͺ Testing NVIDIA API connection...") | |
| test_nvidia_api_connection() | |
| # Create the Gradio interface | |
| print("π― Creating RoutePilot interface...") | |
| demo_interface = create_interface() | |
| # Launch the application | |
| # For Hugging Face Spaces, we don't need to specify server_name and port | |
| # The platform handles this automatically | |
| demo_interface.launch( | |
| show_error=True, | |
| debug=False, # Set to False for production | |
| show_api=False | |
| ) | |
| if __name__ == "__main__": | |
| main() |