File size: 2,950 Bytes
cc47f6d
326115c
a84a5a1
 
19270a8
b0660fb
719ecfd
cc47f6d
b0660fb
cc47f6d
719ecfd
c13c67e
a84a5a1
 
cc47f6d
 
 
cd399d1
b0660fb
e5c9ee0
cc47f6d
b0660fb
c13c67e
326115c
cc47f6d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
326115c
c5fe4a2
c13c67e
 
 
8959fb9
3bd20e4
c13c67e
cc47f6d
 
 
c13c67e
cc47f6d
c13c67e
cc47f6d
c13c67e
 
 
 
cc47f6d
c13c67e
 
a84a5a1
 
 
cc47f6d
8959fb9
cc47f6d
b0660fb
cc47f6d
 
 
f623930
cc47f6d
b0660fb
 
 
 
 
 
c13c67e
b0660fb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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
# for some reason this do
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