|
import importlib |
|
import gradio as gr |
|
import os |
|
import sys |
|
import copy |
|
import pathlib |
|
from fastapi import FastAPI, Request |
|
from fastapi.templating import Jinja2Templates |
|
import uvicorn |
|
from gradio.utils import get_space |
|
|
|
os.environ["GRADIO_ANALYTICS_ENABLED"] = "False" |
|
|
|
demo_dir = pathlib.Path(__file__).parent / "demos" |
|
|
|
|
|
app = FastAPI() |
|
|
|
templates = Jinja2Templates(directory="templates") |
|
|
|
names = sorted(os.listdir("./demos")) |
|
|
|
|
|
@app.get("/") |
|
def index(request: Request): |
|
names = [[p[0], p[2]] for p in all_demos] |
|
return templates.TemplateResponse("index.html", {"request": request, "names": names, |
|
"initial_demo": names[0][0], "is_space": get_space()}) |
|
|
|
|
|
all_demos = [] |
|
demo_module = None |
|
for p in sorted(os.listdir("./demos")): |
|
old_path = copy.deepcopy(sys.path) |
|
sys.path = [os.path.join(demo_dir, p)] + sys.path |
|
try: |
|
if demo_module is None: |
|
demo_module = importlib.import_module(f"run") |
|
else: |
|
demo_module = importlib.reload(demo_module) |
|
all_demos.append((p, demo_module.demo.queue(), False)) |
|
except Exception as e: |
|
with gr.Blocks() as demo: |
|
gr.Markdown(f"Error loading demo: {e}") |
|
all_demos.append((p, demo, True)) |
|
|
|
for demo_name, demo, _ in all_demos: |
|
app = gr.mount_gradio_app(app, demo, f"/demo/{demo_name}") |
|
|
|
|
|
if __name__ == "__main__": |
|
uvicorn.run(app, port=7860, host="0.0.0.0") |
|
|