import gradio as gr import fastapi from fastapi import FastAPI from fastapi.staticfiles import StaticFiles import uvicorn import os import logging from pathlib import Path logging.basicConfig(level=logging.DEBUG) # Create FastAPI app app = FastAPI() # Function for Gradio button def on_button_click(): return "Button clicked!" # Create Gradio Blocks app with gr.Blocks() as demo: button = gr.Button("Click Me") output = gr.Textbox() button.click(on_button_click, inputs=[], outputs=[output]) # Create ASGI app for Gradio gradio_asgi_app = demo.launch(share=False, inbrowser=False, server_name="0.0.0.0", server_port=7860, inline=False) # Mount the Gradio ASGI app onto FastAPI at "/gradio" app.mount("/gradio", gradio_asgi_app) # Static files directory for FastAPI static_dir = Path('./static') static_dir.mkdir(parents=True, exist_ok=True) app.mount("/static", StaticFiles(directory=static_dir), name="static") # Check Gradio and FastAPI versions logging.debug(f"Gradio version: {gr.__version__}") logging.debug(f"FastAPI version: {fastapi.__version__}") # Run the FastAPI server using uvicorn if __name__ == "__main__": port = int(os.getenv("PORT", 7860)) # Default to 7860 if PORT is not set uvicorn.run(app, host="0.0.0.0", port=port)