from typing import Callable, Dict, Literal, Union import gradio as gr def get_app( models: list[str], default_model: str, src: Union[Callable[[str, str | None], gr.Blocks], Literal["models"], Dict[str, gr.Blocks]], accept_token: bool = False, dropdown_label: str = "Select Model", **kwargs, ) -> gr.Blocks: def update_model(new_model: str) -> list[gr.Column]: return [gr.Column(visible=model_name == new_model) for model_name in models] with gr.Blocks(fill_height=True) as demo: model = gr.Dropdown(label=dropdown_label, choices=models, value=default_model) columns = [] for model_name in models: with gr.Column(visible=model_name == default_model) as column: if isinstance(src, dict): src[model_name].render() else: gr.load(name=model_name, src=src, accept_token=accept_token, **kwargs) columns.append(column) model.change( fn=update_model, inputs=model, outputs=columns, api_name=False, queue=False, ) for fn in demo.fns.values(): fn.api_name = False return demo