Spaces:
Sleeping
Sleeping
| from autogen import register_function, ConversableAgent | |
| from .data_source import * | |
| from .functional.coding import CodingUtils | |
| from typing import List, Callable | |
| from functools import wraps | |
| from pandas import DataFrame | |
| def stringify_output(func): | |
| def wrapper(*args, **kwargs): | |
| result = func(*args, **kwargs) | |
| if isinstance(result, DataFrame): | |
| return result.to_string() | |
| else: | |
| return str(result) | |
| return wrapper | |
| def register_toolkits( | |
| config: List[dict | Callable | type], | |
| caller: ConversableAgent, | |
| executor: ConversableAgent, | |
| **kwargs | |
| ): | |
| """Register tools from a configuration list.""" | |
| for tool in config: | |
| if isinstance(tool, type): | |
| register_tookits_from_cls(caller, executor, tool, **kwargs) | |
| continue | |
| tool_dict = {"function": tool} if callable(tool) else tool | |
| if "function" not in tool_dict or not callable(tool_dict["function"]): | |
| raise ValueError( | |
| "Function not found in tool configuration or not callable." | |
| ) | |
| tool_function = tool_dict["function"] | |
| name = tool_dict.get("name", tool_function.__name__) | |
| description = tool_dict.get("description", tool_function.__doc__) | |
| register_function( | |
| stringify_output(tool_function), | |
| caller=caller, | |
| executor=executor, | |
| name=name, | |
| description=description, | |
| ) | |
| def register_code_writing(caller: ConversableAgent, executor: ConversableAgent): | |
| """Register code writing tools.""" | |
| register_toolkits( | |
| [ | |
| { | |
| "function": CodingUtils.list_dir, | |
| "name": "list_files", | |
| "description": "List files in a directory.", | |
| }, | |
| { | |
| "function": CodingUtils.see_file, | |
| "name": "see_file", | |
| "description": "Check the contents of a chosen file.", | |
| }, | |
| { | |
| "function": CodingUtils.modify_code, | |
| "name": "modify_code", | |
| "description": "Replace old piece of code with new one.", | |
| }, | |
| { | |
| "function": CodingUtils.create_file_with_code, | |
| "name": "create_file_with_code", | |
| "description": "Create a new file with provided code.", | |
| }, | |
| ], | |
| caller, | |
| executor, | |
| ) | |
| def register_tookits_from_cls( | |
| caller: ConversableAgent, | |
| executor: ConversableAgent, | |
| cls: type, | |
| include_private: bool = False, | |
| ): | |
| """Register all methods of a class as tools.""" | |
| if include_private: | |
| funcs = [ | |
| func | |
| for func in dir(cls) | |
| if callable(getattr(cls, func)) and not func.startswith("__") | |
| ] | |
| else: | |
| funcs = [ | |
| func | |
| for func in dir(cls) | |
| if callable(getattr(cls, func)) | |
| and not func.startswith("__") | |
| and not func.startswith("_") | |
| ] | |
| register_toolkits([getattr(cls, func) for func in funcs], caller, executor) | |