import os from agentflow.tools.base import BaseTool from agentflow.engine.factory import create_llm_engine # Tool name mapping - this defines the external name for this tool TOOL_NAME = "Generalist_Solution_Generator_Tool" LIMITATION = f""" The {TOOL_NAME} may provide hallucinated or incorrect responses. """ BEST_PRACTICE = f""" For optimal results with the {TOOL_NAME}: 1. Use it for general queries or tasks that don't require specialized knowledge or specific tools in the toolbox. 2. Provide clear, specific query. 3. Use it to answer the original query through step by step reasoning for tasks without complex or multi-step reasoning. 4. For complex queries, break them down into subtasks and use the tool multiple times. 5. Use it as a starting point for complex tasks, then refine with specialized tools. 6. Verify important information from its responses. """ class Base_Generator_Tool(BaseTool): require_llm_engine = True def __init__(self, model_string="gpt-4o-mini"): super().__init__( tool_name=TOOL_NAME, tool_description="A generalized tool that takes query from the user, and answers the question step by step to the best of its ability. It can also accept an image.", tool_version="1.0.0", input_types={ "query": "str - The query that includes query from the user to guide the agent to generate response.", # "query": "str - The query that includes query from the user to guide the agent to generate response (Examples: 'Describe this image in detail').", # "image": "str - The path to the image file if applicable (default: None).", }, output_type="str - The generated response to the original query", demo_commands=[ { "command": 'execution = tool.execute(query="Summarize the following text in a few lines")', "description": "Generate a short summary given the query from the user." }, # { # "command": 'execution = tool.execute(query="Explain the mood of this scene.", image="path/to/image1.png")', # "description": "Generate a caption focusing on the mood using a specific query and image." # }, # { # "command": 'execution = tool.execute(query="Give your best coordinate estimate for the pacemaker in the image and return (x1, y1, x2, y2)", image="path/to/image2.png")', # "description": "Generate bounding box coordinates given the image and query from the user. The format should be (x1, y1, x2, y2)." # }, # { # "command": 'execution = tool.execute(query="Is the number of tiny objects that are behind the small metal jet less than the number of tiny things left of the tiny sedan?", image="path/to/image2.png")', # "description": "Answer a question step by step given the image." # } ], user_metadata = { "limitation": LIMITATION, "best_practice": BEST_PRACTICE } ) self.model_string = model_string print(f"Initializing Generalist Tool with model: {self.model_string}") # multimodal = True if image else False multimodal = False # llm_engine = create_llm_engine(model_string=self.model_string, is_multimodal=multimodal, base_url=self.base_url) # NOTE: deterministic mode self.llm_engine = create_llm_engine( model_string=self.model_string, is_multimodal=multimodal, temperature=0.0, top_p=1.0, frequency_penalty=0.0, presence_penalty=0.0 ) def execute(self, query, image=None): try: input_data = [query] response = self.llm_engine(input_data[0]) return response except Exception as e: return f"Error generating response: {str(e)}" def get_metadata(self): metadata = super().get_metadata() return metadata if __name__ == "__main__": # Test command: """ Run the following commands in the terminal to test the script: cd agentflow/tools/base_generator python tool.py """ # Get the directory of the current script script_dir = os.path.dirname(os.path.abspath(__file__)) print(f"Script directory: {script_dir}") # Example usage of the Generalist_Tool tool = Base_Generator_Tool() tool = Base_Generator_Tool(model_string="gpt-4o-mini") # NOTE: strong LLM for tool # tool = Base_Generator_Tool(model_string="gemini-1.5-flash") # NOTE: weak 8B model for tool # tool = Base_Generator_Tool(model_string="dashscope") # NOTE: weak Qwen2.5-7B model for tool # Get tool metadata metadata = tool.get_metadata() print(metadata) query = "What is the capital of France?" # Execute the tool with default query try: execution = tool.execute(query=query) print("Generated Response:") print(execution) except Exception as e: print(f"Execution failed: {e}") print("Done!")