Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
| import asyncio | |
| from contextlib import asynccontextmanager | |
| from fastapi.responses import RedirectResponse | |
| import uvicorn | |
| from fastapi import FastAPI | |
| from modules.dropbox.audio import cleanup_audio_url_cache | |
| from modules.home.app import home_app | |
| from modules.youtube_metadata.app import youtube_metadata_app | |
| from server import router as mobile_router | |
| from app import gradio_app # your Blocks object | |
| import gradio as gr | |
| import logging | |
| from fastapi import Request | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from fastapi.staticfiles import StaticFiles | |
| from slowapi import Limiter, _rate_limit_exceeded_handler | |
| from slowapi.util import get_remote_address | |
| from slowapi.errors import RateLimitExceeded | |
| logging.basicConfig(level=logging.INFO) | |
| app = FastAPI(title="Sanatan AI Unified Server") | |
| limiter = Limiter(key_func=get_remote_address) | |
| app.state.limiter = limiter | |
| app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler) | |
| # Allow all origins (for dev) | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], # or ["https://your-flutter-web-app.com"] | |
| allow_credentials=True, | |
| allow_methods=["*"], # GET, POST, PUT, DELETE, OPTIONS | |
| allow_headers=["*"], # e.g. Authorization, Content-Type | |
| ) | |
| # Mount mobile endpoints | |
| app.include_router(mobile_router, prefix="/api") | |
| # Convert Gradio Blocks to ASGI app | |
| # app = gr.mount_gradio_app(app, gradio_app,"/sanatan_ai_web") | |
| # app = gr.mount_gradio_app(app, youtube_metadata_app,"/yt_web") | |
| app = gr.mount_gradio_app(app, home_app,"/web") | |
| app.mount("/home", StaticFiles(directory="static", html=True), name="static") | |
| # Redirect root URL to /home/ | |
| async def redirect_to_web(): | |
| return RedirectResponse(url="/home/") | |
| async def log_requests(request: Request, call_next): | |
| logging.info(f"Request: {request.method} {request.url}") | |
| response = await call_next(request) | |
| logging.info(f"Response status: {response.status_code}") | |
| return response | |
| async def lifespan(app: FastAPI): | |
| # Startup code: start cache cleanup | |
| asyncio.create_task(cleanup_audio_url_cache()) | |
| yield | |
| # Shutdown code (optional) can go here | |
| if __name__ == "__main__": | |
| uvicorn.run("main:app", host="0.0.0.0", port=7860, reload=False, access_log=False, log_level=logging.WARNING) | |