import os import sys import subprocess import logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger("hf_app") # Satisfy Hugging Face ZeroGPU check if ZeroGPU hardware is selected try: import spaces @spaces.GPU(duration=1) def _zero_gpu_init(): return True _zero_gpu_init() logger.info("ZeroGPU check satisfied.") except Exception as e: logger.info(f"ZeroGPU check skipped: {e}") # Ensure Playwright browser binaries are installed try: logger.info("Verificando/instalando Playwright Chromium...") subprocess.run([sys.executable, "-m", "playwright", "install", "chromium"], check=False) except Exception as e: logger.warning(f"Advertencia al instalar Playwright Chromium: {e}") import gradio as gr from app.main import app as fastapi_app # Interfaz de Gradio with gr.Blocks(title="CrowData API Backend") as gradio_ui: gr.Markdown("# 🦅 CrowData API Backend") gr.Markdown("El backend de CrowData (FastAPI) está ejecutándose correctamente en Hugging Face Spaces con 16 GB RAM.") gr.Markdown("### 🔗 Accesos Directos:") gr.Markdown("- 📄 [Documentación de la API (Swagger UI)](/docs)") gr.Markdown("- 🩺 [Health Check](/api/health)") # Montar la interfaz de Gradio en /gradio sobre la app de FastAPI app = gr.mount_gradio_app(fastapi_app, gradio_ui, path="/gradio") # Exportar 'demo' apuntando a 'app' para que el ejecutor de Hugging Face Gradio Spaces lo sirva directamente demo = app if __name__ == "__main__": import uvicorn port = int(os.environ.get("PORT", 7860)) uvicorn.run(app, host="0.0.0.0", port=port)