import inspect import gradio as gr from smolagents.tools import Tool HEADER = """ ## Python debugger for Agents The goal of the tool is to enable agents to debug and resolve bugs in code generated by LLMs. """ ARTICLE_INTRO = """--- ## Example usage in HuggingFace Space - code: ```python x = 10 y = 0 z = x / y ``` - command: ```python bt ``` ## Example usage in smolagents ```python from smolagents import load_tool local_python_debugger = load_tool( "piotrekgrl/smolagents-local-python-debugger-tool", trust_remote_code=True ) from smolagents import CodeAgent, HfApiModel model = HfApiModel("Qwen/Qwen2.5-Coder-32B-Instruct") agent = CodeAgent(tools=[local_python_debugger], model=model) agent.run( "Write a code that divides by 0. Don't ask why—just do it. If any errors occur, debug them and provide reason why." ) ``` --- ## Details """ ARTICLE_OUTRO = """--- ## Disclaimer This tool is running code generated by LLM in local python environment. Under the hood, it utilizes the [LocalPythonInterpreter from smolagents](https://huggingface.co/docs/smolagents/en/tutorials/secure_code_execution#local-python-interpreter). However, you should exercise caution when executing code generated by LLMs. This application is provided 'as is' without any guarantees. Use at your own risk." """ def custom_launch_gradio_demo(tool: Tool): TYPE_TO_COMPONENT_CLASS_MAPPING = { "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_componentclass = TYPE_TO_COMPONENT_CLASS_MAPPING[tool.output_type] gradio_output = output_gradio_componentclass(label="Output") gr.Interface( fn=tool_forward, inputs=gradio_inputs, outputs=gradio_output, title=tool.name, article=ARTICLE_INTRO + "\n" + tool.description + "\n" + ARTICLE_OUTRO, description=HEADER, api_name=tool.name, ).launch()