diff --git a/poetry.lock b/poetry.lock index e50ff090..2e77e426 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2165,6 +2165,20 @@ files = [ [package.dependencies] mpmath = ">=0.19" +[[package]] +name = "tabulate" +version = "0.9.0" +description = "Pretty-print tabular data" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, + {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, +] + +[package.extras] +widechars = ["wcwidth"] + [[package]] name = "threadpoolctl" version = "3.4.0" @@ -2610,4 +2624,4 @@ watchmedo = ["PyYAML (>=3.10)"] [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.12" -content-hash = "93a4e362ddaf2a1e65a6457c212896853b1c4409e0456f9209f33b795b5ec748" +content-hash = "64b8ef44533f8d72d76d866df9db0407b0f4e43ee286a4df5dd8107e6bc5d46e" diff --git a/pyproject.toml b/pyproject.toml index 7b591b28..db0270c2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,6 +30,7 @@ openai = "1.*" typing_extensions = "4.*" moviepy = "1.*" opencv-python-headless = "4.*" +tabulate = "^0.9.0" [tool.poetry.group.dev.dependencies] autoflake = "1.*" diff --git a/vision_agent/agent/vision_agent.py b/vision_agent/agent/vision_agent.py index 917f7cb8..5d34fe9e 100644 --- a/vision_agent/agent/vision_agent.py +++ b/vision_agent/agent/vision_agent.py @@ -4,6 +4,8 @@ from pathlib import Path from typing import Any, Callable, Dict, List, Optional, Tuple, Union +from tabulate import tabulate + from vision_agent.llm import LLM, OpenAILLM from vision_agent.lmm import LMM, OpenAILMM from vision_agent.tools import TOOLS @@ -268,6 +270,11 @@ def retrieval( {"task": question, "tool_name": tool_name, "parameters": parameters} ] + _LOGGER.info( + f"""Going to run the following {len(tool_results)} tool(s) in sequence: +{tabulate(tool_results, headers="keys", tablefmt="mixed_grid")}""" + ) + def parse_tool_results(result: Dict[str, Union[Dict, List]]) -> Any: call_results: List[Any] = [] if isinstance(result["parameters"], Dict): @@ -298,8 +305,6 @@ def create_tasks( {k: v["description"] for k, v in tools.items()}, reflections, ) - - _LOGGER.info(f"Tasks: {tasks}") if tasks is not None: task_list = [{"task": task, "id": i + 1} for i, task in enumerate(tasks)] task_list = task_topology(task_model, question, task_list) @@ -309,6 +314,10 @@ def create_tasks( _LOGGER.error(f"Failed topological_sort on: {task_list}") else: task_list = [] + _LOGGER.info( + f"""Planned tasks: +{tabulate(task_list, headers="keys", tablefmt="mixed_grid")}""" + ) return task_list