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 """

P1 Elder Paperwork Co-Pilot

Select the P1 project and click a load button to seed a bundled demo pack.

""" 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())