Spaces:
Sleeping
Sleeping
| 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"<a href='/api/docs' target='_blank'>View FastAPI Docs</a>") | |
| 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") | |