lisa-on-cuda / app.py
alessandro trinca tornidor
feat: start refactor using samgis-core = 3.0.8
cc47f6d
raw
history blame
2.92 kB
import json
import logging
import os
import sys
from pathlib import Path
import gradio as gr
import structlog
import uvicorn
from dotenv import load_dotenv
from fastapi import FastAPI
from fastapi.responses import FileResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
from samgis_core.utilities import create_folders_if_not_exists
from samgis_core.utilities import frontend_builder
from samgis_core.utilities.session_logger import setup_logging
from spaces import GPU as SPACES_GPU
from lisa_on_cuda.utils import app_helpers
from lisa_on_cuda import routes
load_dotenv()
project_root_folder = Path(globals().get("__file__", "./_")).absolute().parent
workdir = os.getenv("WORKDIR", project_root_folder)
model_folder = Path(project_root_folder / "machine_learning_models")
log_level = os.getenv("LOG_LEVEL", "INFO")
setup_logging(log_level=log_level)
app_logger = structlog.stdlib.get_logger()
app_logger.info(f"PROJECT_ROOT_FOLDER:{project_root_folder}, WORKDIR:{workdir}.")
folders_map = os.getenv("FOLDERS_MAP", "{}")
markdown_text = os.getenv("MARKDOWN_TEXT", "")
examples_text_list = os.getenv("EXAMPLES_TEXT_LIST", "").split("\n")
example_body = json.loads(os.getenv("EXAMPLE_BODY", "{}"))
mount_gradio_app = bool(os.getenv("MOUNT_GRADIO_APP", ""))
static_dist_folder = Path(project_root_folder) / "static" / "dist"
input_css_path = os.getenv("INPUT_CSS_PATH", "src/input.css")
create_folders_if_not_exists.folders_creation(folders_map)
CUSTOM_GRADIO_PATH = "/"
CUSTOM_STATIC_PATH = "/static"
FASTAPI_TITLE = "lisa_app"
app = FastAPI(title=FASTAPI_TITLE, version="1.0")
app.include_router(routes.router)
frontend_builder.build_frontend(
project_root_folder=workdir,
input_css_path=input_css_path,
output_dist_folder=static_dist_folder
)
app_logger.info("build_frontend ok!")
app.mount(CUSTOM_STATIC_PATH, StaticFiles(directory=static_dist_folder), name="static")
@app.get(CUSTOM_STATIC_PATH)
async def static() -> FileResponse:
return FileResponse(path=str(static_dist_folder / "index.html"), media_type="text/html")
templates = Jinja2Templates(directory="templates")
app_logger.info(f"sys.argv:{sys.argv}.")
args = app_helpers.parse_args([])
app_logger.info(f"prepared default arguments:{args}.")
inference_fn = app_helpers.get_inference_model_by_args(args, inference_decorator=SPACES_GPU)
app_logger.info(f"prepared inference_fn function:{inference_fn.__name__}, creating gradio interface...")
io = app_helpers.get_gradio_interface(inference_fn, args=args)
app_logger.info("created gradio interface")
app = gr.mount_gradio_app(app, io, path=CUSTOM_GRADIO_PATH)
app_logger.info("mounted gradio app within fastapi")
if __name__ == '__main__':
try:
uvicorn.run(app, host="0.0.0.0", port=7860)
except Exception as ex:
logging.error(f"fastapi/gradio application {FASTAPI_TITLE} exception:{ex}.")
raise ex