#!/usr/bin/env python3 """ Hugging Face optimized startup script for Scira Reverse API This file is the entry point for Hugging Face Spaces """ import os import sys import logging from pathlib import Path # Add current directory to Python path sys.path.insert(0, str(Path(__file__).parent)) # Configure logging for Hugging Face logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', handlers=[ logging.StreamHandler(sys.stdout) ] ) logger = logging.getLogger(__name__) def setup_environment(): """Setup environment variables for Hugging Face deployment""" # Set default port for Hugging Face if not os.getenv("PORT"): os.environ["PORT"] = "7860" # Set default host if not os.getenv("HOST"): os.environ["HOST"] = "0.0.0.0" # Set production mode os.environ["ENVIRONMENT"] = "production" # Disable debug mode in production os.environ["DEBUG"] = "false" # Set default session token if not provided if not os.getenv("SCIRA_SESSION_TOKEN"): logger.warning("SCIRA_SESSION_TOKEN not set, using default (may not work)") os.environ["SCIRA_SESSION_TOKEN"] = "QZkIjAJihMAA2Eju4uV54BpqwOFScwUl.Ptbu8Y%2FO%2BU4%2BimLLh6unpkg%2FMGdvFThciJvInvNAV8Y%3D" # Set default PostHog token if not provided if not os.getenv("SCIRA_POSTHOG_TOKEN"): logger.warning("SCIRA_POSTHOG_TOKEN not set, using default") os.environ["SCIRA_POSTHOG_TOKEN"] = "%7B%22distinct_id%22%3A%2201970149-15a6-74b8-8abd-93a5932c0b14%22%2C%22%24sesid%22%3A%5B1754648371696%2C%220198891e-aee2-7b9f-962c-305a2214e83c%22%2C1754647146210%5D%2C%22%24epp%22%3Atrue%2C%22%24initial_person_info%22%3A%7B%22r%22%3A%22https%3A%2F%2Fscira.ai%2F%22%2C%22u%22%3A%22https%3A%2F%2Fscira.ai%2F%22%7D%7D" # Disable proxy by default in Hugging Face (can be enabled via env vars) if not os.getenv("PROXY_ENABLED"): os.environ["PROXY_ENABLED"] = "false" # Set conservative rate limiting for public deployment if not os.getenv("MIN_DELAY"): os.environ["MIN_DELAY"] = "1.0" if not os.getenv("MAX_DELAY"): os.environ["MAX_DELAY"] = "3.0" logger.info("Environment setup completed for Hugging Face deployment") def main(): """Main entry point for Hugging Face Spaces""" try: # Setup environment setup_environment() # Import and start the server logger.info("Starting Scira Reverse API for Hugging Face...") # Import the FastAPI app from scira_server import app # Get configuration host = os.getenv("HOST", "0.0.0.0") port = int(os.getenv("PORT", 7860)) logger.info(f"🚀 Starting server on {host}:{port}") logger.info("📡 OpenAI-compatible endpoints:") logger.info(" - POST /v1/chat/completions") logger.info(" - GET /v1/models") logger.info("📡 Legacy Scira endpoints:") logger.info(" - POST /api/search") logger.info(" - GET /health") # Start with uvicorn import uvicorn uvicorn.run( app, host=host, port=port, log_level="info", access_log=True, workers=1, # Single worker for Hugging Face loop="asyncio" ) except Exception as e: logger.error(f"❌ Failed to start server: {e}") sys.exit(1) if __name__ == "__main__": main() # Export the app for direct import try: from scira_server import app logger.info("✅ FastAPI app exported successfully") except ImportError as e: logger.error(f"❌ Failed to import FastAPI app: {e}") app = None