import gradio as gr from api import app as fastapi_app import uvicorn import threading import time import os import logging from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import RedirectResponse # Configure logging logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) logger = logging.getLogger(__name__) # Create a Gradio app that will also host the FastAPI app def create_interface(): with gr.Blocks(title="ChatDocxAI Backend") as interface: gr.Markdown("# ChatDocxAI Backend") gr.Markdown(f""" This is the backend server for ChatDocxAI. It provides the following endpoints: - `/api/upload` - Upload documents - `/api/ask` - Ask questions about uploaded documents - `/api/status` - Check API status The frontend should be configured to communicate with this backend. """) with gr.Row(): with gr.Column(): gr.Markdown("## Server Status") status = gr.Textbox(value="Server is running", label="Status") with gr.Row(): with gr.Column(): gr.Markdown("## API Documentation") doc_link = gr.HTML(f"View FastAPI Docs") return interface # Create a new FastAPI app that will mount both the original FastAPI app and the Gradio app app = FastAPI() # Mount the original FastAPI app under the /api prefix logger.info("Mounting FastAPI app at /api") app.mount("/api", fastapi_app) # Create the Gradio interface logger.info("Creating Gradio interface") interface = create_interface() # Gradio blocks to FastAPI app logger.info("Mounting Gradio app at /") app = gr.mount_gradio_app(app, interface, path="/") # When running directly, start the app if __name__ == "__main__": logger.info("Starting server on port 7860") uvicorn.run(app, host="0.0.0.0", port=7860, log_level="info")