File size: 4,858 Bytes
ff4e38b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

import gradio as gr
from aiconfigurator.webapp.components.static_tab import create_static_tab
from aiconfigurator.webapp.components.ifb_tab import create_ifb_tab
from aiconfigurator.webapp.components.ifb_pareto_tab import create_ifb_pareto_tab
from aiconfigurator.webapp.components.disagg_pareto_tab import create_disagg_pareto_tab
from aiconfigurator.webapp.components.pareto_comparison_tab import create_pareto_comparison_tab
from aiconfigurator.webapp.components.disagg_pd_ratio_tab import create_disagg_pd_ratio_tab
from aiconfigurator.webapp.components.readme_tab import create_readme_tab
from aiconfigurator.webapp.events.event_handler import EventHandler
from collections import defaultdict
import argparse
import logging
import aiconfigurator
import sys
from typing import List

def configure_parser(parser):
    """
    Configures the argument parser for the WebApp.
    """
    parser.add_argument("--server_name", type=str, default="0.0.0.0", help="Server name")
    parser.add_argument("--server_port", type=int, default=7860, help="Server port")
    parser.add_argument("--enable_ifb", action="store_true", help="Enable IFB tab")
    parser.add_argument("--enable_disagg_pd_ratio", action="store_true", help="Enable Disagg PD Ratio tab")
    parser.add_argument("--debug", help="Debug mode", action="store_true")
    parser.add_argument("--experimental", help="enable experimental features", action="store_true")

def main(args):
    """
    Main function for the WebApp.
    """
    app_config = {
        'enable_ifb': args.enable_ifb,
        'enable_disagg_pd_ratio': args.enable_disagg_pd_ratio,
        'experimental': args.experimental,
        'debug': args.debug,
    }

    if app_config['debug']:
        logging.basicConfig(level=logging.DEBUG,
                    format="%(levelname)s %(asctime)s %(filename)s:%(lineno)d] %(message)s",
                    datefmt="%m-%d %H:%M:%S")
    else:
        logging.basicConfig(level=logging.INFO,
                    format="%(levelname)s %(asctime)s] %(message)s",
                    datefmt="%m-%d %H:%M:%S")
    
    with gr.Blocks(css="""
        .config-column {
            border-right: 5px solid #e0e0e0;
            padding-right: 20px;
        }
        .config-column:last-child {
            border-right: none;
        }
    """) as demo:
        pareto_results_state = gr.State(defaultdict())

        # title
        with gr.Row():
            gr.Markdown(
                f"""
                <div style="text-align: center;">
                    <h1>Dynamo aiconfigurator for Disaggregated Serving Deployment</h1>
                    <p style="font-size: 14px; margin-top: -10px;">Version {aiconfigurator.__version__}</p>
                </div>
                """
            )
        
        # create tabs
        with gr.Tabs() as tabs:
            readme_components = create_readme_tab(app_config)            
            static_components = create_static_tab(app_config)
            if app_config['enable_ifb']:
                ifb_components = create_ifb_tab(app_config)
            ifb_pareto_components = create_ifb_pareto_tab(app_config)
            disagg_pareto_components = create_disagg_pareto_tab(app_config)
            if app_config['enable_disagg_pd_ratio']:
                disagg_pd_ratio_components = create_disagg_pd_ratio_tab(app_config)
            pareto_comparison_components = create_pareto_comparison_tab(app_config)
        
        # setup events
        EventHandler.setup_static_events(static_components)
        if app_config['enable_ifb']:
            EventHandler.setup_ifb_events(ifb_components)
        EventHandler.setup_ifb_pareto_events(ifb_pareto_components)
        EventHandler.setup_disagg_pareto_events(disagg_pareto_components)
        EventHandler.setup_save_events(ifb_pareto_components['result_name'], ifb_pareto_components['save_btn'], ifb_pareto_components['result_df'], pareto_comparison_components['candidates_dropdown'], pareto_results_state)
        EventHandler.setup_save_events(disagg_pareto_components['result_name'], disagg_pareto_components['save_btn'], disagg_pareto_components['result_df'], pareto_comparison_components['candidates_dropdown'], pareto_results_state)
        if app_config['enable_disagg_pd_ratio']:
            EventHandler.setup_disagg_pd_ratio_events(disagg_pd_ratio_components)
        EventHandler.setup_pareto_comparison_events(pareto_comparison_components, pareto_results_state)

        demo.launch(server_name=args.server_name, server_port=args.server_port)


if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Dynamo aiconfigurator Web App")
    configure_parser(parser)
    args = parser.parse_args()
    main(args)