44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
import gradio as gr
|
|
|
|
COMPONENTS_CLASS = {
|
|
"text": gr.components.Textbox,
|
|
"checkbox": gr.components.CheckboxGroup,
|
|
"dropdown": gr.components.Dropdown,
|
|
"file": gr.components.File,
|
|
"image": gr.components.Image,
|
|
"number": gr.components.Number,
|
|
"radio": gr.components.Radio,
|
|
"slider": gr.components.Slider,
|
|
}
|
|
SUPPORTED_COMPONENTS = set(COMPONENTS_CLASS.keys())
|
|
DEFAULT_COMPONENT_BY_TYPES = {
|
|
"str": "text",
|
|
"bool": "checkbox",
|
|
"int": "number",
|
|
"float": "number",
|
|
"list": "dropdown",
|
|
}
|
|
|
|
|
|
def get_component(component_def: dict) -> gr.components.Component:
|
|
"""Get the component based on component definition"""
|
|
component_cls = None
|
|
|
|
if "component" in component_def:
|
|
component = component_def["component"]
|
|
if component not in SUPPORTED_COMPONENTS:
|
|
raise ValueError(
|
|
f"Unsupported UI component: {component}. "
|
|
f"Must be one of {SUPPORTED_COMPONENTS}"
|
|
)
|
|
|
|
component_cls = COMPONENTS_CLASS[component]
|
|
else:
|
|
raise ValueError(
|
|
f"Cannot decide the component from {component_def}. "
|
|
"Please specify `component` with 1 of the following "
|
|
f"values: {SUPPORTED_COMPONENTS}"
|
|
)
|
|
|
|
return component_cls(**component_def.get("params", {}))
|