in src/smolagents/tools.py [0:0]
def launch_gradio_demo(tool: Tool):
"""
Launches a gradio demo for a tool. The corresponding tool class needs to properly implement the class attributes
`inputs` and `output_type`.
Args:
tool (`Tool`): The tool for which to launch the demo.
"""
try:
import gradio as gr
except ImportError:
raise ImportError("Gradio should be installed in order to launch a gradio demo.")
TYPE_TO_COMPONENT_CLASS_MAPPING = {
"boolean": gr.Checkbox,
"image": gr.Image,
"audio": gr.Audio,
"string": gr.Textbox,
"integer": gr.Textbox,
"number": gr.Textbox,
}
def tool_forward(*args, **kwargs):
return tool(*args, sanitize_inputs_outputs=True, **kwargs)
tool_forward.__signature__ = inspect.signature(tool.forward)
gradio_inputs = []
for input_name, input_details in tool.inputs.items():
input_gradio_component_class = TYPE_TO_COMPONENT_CLASS_MAPPING[input_details["type"]]
new_component = input_gradio_component_class(label=input_name)
gradio_inputs.append(new_component)
output_gradio_component_class = TYPE_TO_COMPONENT_CLASS_MAPPING[tool.output_type]
gradio_output = output_gradio_component_class(label="Output")
gr.Interface(
fn=tool_forward,
inputs=gradio_inputs,
outputs=gradio_output,
title=tool.name,
description=tool.description,
api_name=tool.name,
).launch()