Spaces:
Running
Running
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) | |