diff --git a/vision_agent/tools/__init__.py b/vision_agent/tools/__init__.py index f9879626..51868dd9 100644 --- a/vision_agent/tools/__init__.py +++ b/vision_agent/tools/__init__.py @@ -7,6 +7,7 @@ TOOL_DOCSTRING, TOOLS, TOOLS_DF, + TOOLS_INFO, UTILITIES_DOCSTRING, blip_image_caption, clip, @@ -52,15 +53,16 @@ def register_tool(imports: Optional[List] = None) -> Callable: def decorator(tool: Callable) -> Callable: import inspect - from .tools import get_tool_descriptions, get_tools_df + from .tools import get_tool_descriptions, get_tools_df, get_tools_info - global TOOLS, TOOLS_DF, TOOL_DESCRIPTIONS, TOOL_DOCSTRING + global TOOLS, TOOLS_DF, TOOL_DESCRIPTIONS, TOOL_DOCSTRING, TOOLS_INFO if tool not in TOOLS: TOOLS.append(tool) TOOLS_DF = get_tools_df(TOOLS) # type: ignore TOOL_DESCRIPTIONS = get_tool_descriptions(TOOLS) # type: ignore TOOL_DOCSTRING = get_tool_documentation(TOOLS) # type: ignore + TOOLS_INFO = get_tools_info(TOOLS) # type: ignore globals()[tool.__name__] = tool if imports is not None: diff --git a/vision_agent/tools/tool_utils.py b/vision_agent/tools/tool_utils.py index 0ff56177..fda89526 100644 --- a/vision_agent/tools/tool_utils.py +++ b/vision_agent/tools/tool_utils.py @@ -142,3 +142,16 @@ def get_tools_df(funcs: List[Callable[..., Any]]) -> pd.DataFrame: data["doc"].append(doc) return pd.DataFrame(data) # type: ignore + + +def get_tools_info(funcs: List[Callable[..., Any]]) -> Dict[str, str]: + data: Dict[str, str] = {} + + for func in funcs: + desc = func.__doc__ + if desc is None: + desc = "" + + data[func.__name__] = f"{func.__name__}{inspect.signature(func)}:\n{desc}" + + return data diff --git a/vision_agent/tools/tools.py b/vision_agent/tools/tools.py index 0254a455..3070f1f2 100644 --- a/vision_agent/tools/tools.py +++ b/vision_agent/tools/tools.py @@ -19,6 +19,7 @@ get_tool_descriptions, get_tool_documentation, get_tools_df, + get_tools_info, ) from vision_agent.utils import extract_frames_from_video from vision_agent.utils.execute import FileSerializer, MimeType @@ -1317,6 +1318,7 @@ def overlay_heat_map( TOOLS_DF = get_tools_df(TOOLS) # type: ignore TOOL_DESCRIPTIONS = get_tool_descriptions(TOOLS) # type: ignore TOOL_DOCSTRING = get_tool_documentation(TOOLS) # type: ignore +TOOLS_INFO = get_tools_info(TOOLS) # type: ignore UTILITIES_DOCSTRING = get_tool_documentation( [ save_json,