File size: 2,256 Bytes
f9a9b47
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from __future__ import annotations

from pathlib import Path
import os

from .config import load_app_config
from .demo_packs import load_demo_pack
from .logging_utils import setup_logging
from .model_registry import load_model_registry
from .storage import SQLiteStore


THEME_CSS_PATH = Path(__file__).resolve().parents[2] / "assets" / "theme.css"


def build_index_page() -> str:
    return """
    <h1>P1 Elder Paperwork Co-Pilot</h1>
    <p>Select the P1 project and click a load button to seed a bundled demo pack.</p>
    <ul>
      <li>P1: Elder Paperwork Co-Pilot</li>
    </ul>
    """


def create_launcher():
    import gradio as gr

    root = Path(os.environ.get('APP_ROOT_DIR', Path.cwd())).resolve()
    config = load_app_config('p1')
    registry = load_model_registry(config.model_registry_path)
    logger = setup_logging('app_kit.server')
    logger.info('app kit server started: %s', list(registry.get('projects', {}).keys()))
    store = SQLiteStore(config.sqlite_path, config.artifact_dir)

    with gr.Blocks(title='P1 Elder Paperwork Co-Pilot', css_paths=THEME_CSS_PATH) as demo:
        gr.HTML(build_index_page())
        project = gr.Dropdown(choices=['p1'], value='p1', label='Project')
        pack = gr.Textbox(label='Demo pack path', placeholder=str(root / 'data' / 'demo_packs' / 'p1_elder_paperwork'))
        output = gr.JSON(label='Latest result')
        status = gr.Textbox(label='Status')

        def load_pack(path: str):
            demo_pack = load_demo_pack(path)
            return demo_pack.manifest, f'loaded {demo_pack.pack_id}'

        def show_history(proj: str):
            return store.history(proj)

        load_button = gr.Button('Load demo pack')
        history_button = gr.Button('Refresh history')
        load_button.click(load_pack, inputs=[pack], outputs=[output, status])
        history_button.click(show_history, inputs=[project], outputs=[output])

    return demo


def main() -> int:
    launcher = create_launcher()
    launcher.launch(
        server_name=os.environ.get('GRADIO_SERVER_NAME', '0.0.0.0'),
        server_port=int(os.environ.get('PORT', '7860')),
        show_error=True,
        share=False,
    )
    return 0


if __name__ == '__main__':
    raise SystemExit(main())