| 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() |
|
|