From 3e89600cce8605f63f875db7b52a2d54680682a4 Mon Sep 17 00:00:00 2001 From: marko-kraemer Date: Wed, 16 Apr 2025 23:12:28 +0100 Subject: [PATCH] still broken --- backend/agent/prompt.py | 24 ------ backend/agent/tools/message_tool.py | 128 ++++++++++++++-------------- 2 files changed, 64 insertions(+), 88 deletions(-) diff --git a/backend/agent/prompt.py b/backend/agent/prompt.py index b5f40ea2..a62e24b1 100644 --- a/backend/agent/prompt.py +++ b/backend/agent/prompt.py @@ -474,30 +474,6 @@ Ask user a question and wait for response. Use for: 1) Requesting clarification This information will help me make sure the cake meets your expectations for the celebration. - -## inform Tool Example (User CANNOT Respond): - -Inform the user about progress, completion of a major step, or important context. Use this tool: 1) To provide updates between major sections of work, 2) After accomplishing significant milestones, 3) When transitioning to a new phase of work, 4) To confirm actions were completed successfully, 5) To provide context about upcoming steps. IMPORTANT: Use FREQUENTLY throughout execution to provide UI context to the user. The user CANNOT respond to this tool - they can only respond to the 'ask' tool. Use this tool to keep the user informed without requiring their input." - - - - - - - - - - - - - I've completed the data analysis of the sales figures. Key findings include: - - Q4 sales were 28% higher than Q3 - - Product line A showed the strongest performance - - Three regions missed their targets - - I'll now proceed with creating the executive summary report based on these findings. - - """ def get_system_prompt(): diff --git a/backend/agent/tools/message_tool.py b/backend/agent/tools/message_tool.py index 1d7106e6..29e93848 100644 --- a/backend/agent/tools/message_tool.py +++ b/backend/agent/tools/message_tool.py @@ -14,76 +14,76 @@ class MessageTool(Tool): # Commented out as we are just doing this via prompt as there is no need to call it as a tool -# @openapi_schema({ -# "type": "function", -# "function": { -# "name": "ask", -# "description": "Ask user a question and wait for response. Use for: 1) Requesting clarification on ambiguous requirements, 2) Seeking confirmation before proceeding with high-impact changes, 3) Gathering additional information needed to complete a task, 4) Offering options and requesting user preference, 5) Validating assumptions when critical to task success. IMPORTANT: Use this tool only when user input is essential to proceed. Always provide clear context and options when applicable. Include relevant attachments when the question relates to specific files or resources.", -# "parameters": { -# "type": "object", -# "properties": { -# "text": { -# "type": "string", -# "description": "Question text to present to user - should be specific and clearly indicate what information you need. Include: 1) Clear question or request, 2) Context about why the input is needed, 3) Available options if applicable, 4) Impact of different choices, 5) Any relevant constraints or considerations." -# }, -# "attachments": { -# "anyOf": [ -# {"type": "string"}, -# {"items": {"type": "string"}, "type": "array"} -# ], -# "description": "(Optional) List of files or URLs to attach to the question. Include when: 1) Question relates to specific files or configurations, 2) User needs to review content before answering, 3) Options or choices are documented in files, 4) Supporting evidence or context is needed. Always use relative paths to /workspace directory." -# } -# }, -# "required": ["text"] -# } -# } -# }) -# @xml_schema( -# tag_name="ask", -# mappings=[ -# {"param_name": "text", "node_type": "content", "path": "."}, -# {"param_name": "attachments", "node_type": "attribute", "path": ".", "required": False} -# ], -# example=''' -# Ask user a question and wait for response. Use for: 1) Requesting clarification on ambiguous requirements, 2) Seeking confirmation before proceeding with high-impact changes, 3) Gathering additional information needed to complete a task, 4) Offering options and requesting user preference, 5) Validating assumptions when critical to task success. IMPORTANT: Use this tool only when user input is essential to proceed. Always provide clear context and options when applicable. Include relevant attachments when the question relates to specific files or resources. + @openapi_schema({ + "type": "function", + "function": { + "name": "ask", + "description": "Ask user a question and wait for response. Use for: 1) Requesting clarification on ambiguous requirements, 2) Seeking confirmation before proceeding with high-impact changes, 3) Gathering additional information needed to complete a task, 4) Offering options and requesting user preference, 5) Validating assumptions when critical to task success. IMPORTANT: Use this tool only when user input is essential to proceed. Always provide clear context and options when applicable. Include relevant attachments when the question relates to specific files or resources.", + "parameters": { + "type": "object", + "properties": { + "text": { + "type": "string", + "description": "Question text to present to user - should be specific and clearly indicate what information you need. Include: 1) Clear question or request, 2) Context about why the input is needed, 3) Available options if applicable, 4) Impact of different choices, 5) Any relevant constraints or considerations." + }, + "attachments": { + "anyOf": [ + {"type": "string"}, + {"items": {"type": "string"}, "type": "array"} + ], + "description": "(Optional) List of files or URLs to attach to the question. Include when: 1) Question relates to specific files or configurations, 2) User needs to review content before answering, 3) Options or choices are documented in files, 4) Supporting evidence or context is needed. Always use relative paths to /workspace directory." + } + }, + "required": ["text"] + } + } + }) + @xml_schema( + tag_name="ask", + mappings=[ + {"param_name": "text", "node_type": "content", "path": "."}, + {"param_name": "attachments", "node_type": "attribute", "path": ".", "required": False} + ], + example=''' +Ask user a question and wait for response. Use for: 1) Requesting clarification on ambiguous requirements, 2) Seeking confirmation before proceeding with high-impact changes, 3) Gathering additional information needed to complete a task, 4) Offering options and requesting user preference, 5) Validating assumptions when critical to task success. IMPORTANT: Use this tool only when user input is essential to proceed. Always provide clear context and options when applicable. Include relevant attachments when the question relates to specific files or resources. -# -# -# -# -# -# -# + + + + + + + -# -# I'm planning to bake the chocolate cake for your birthday party. The recipe mentions "rich frosting" but doesn't specify what type. Could you clarify your preferences? For example: -# 1. Would you prefer buttercream or cream cheese frosting? -# 2. Do you want any specific flavor added to the frosting (vanilla, coffee, etc.)? -# 3. Should I add any decorative toppings like sprinkles or fruit? -# 4. Do you have any dietary restrictions I should be aware of? + + I'm planning to bake the chocolate cake for your birthday party. The recipe mentions "rich frosting" but doesn't specify what type. Could you clarify your preferences? For example: + 1. Would you prefer buttercream or cream cheese frosting? + 2. Do you want any specific flavor added to the frosting (vanilla, coffee, etc.)? + 3. Should I add any decorative toppings like sprinkles or fruit? + 4. Do you have any dietary restrictions I should be aware of? -# This information will help me make sure the cake meets your expectations for the celebration. -# -# ''' -# ) -# async def ask(self, text: str, attachments: Optional[Union[str, List[str]]] = None) -> ToolResult: -# """Ask the user a question and wait for a response. + This information will help me make sure the cake meets your expectations for the celebration. + + ''' + ) + async def ask(self, text: str, attachments: Optional[Union[str, List[str]]] = None) -> ToolResult: + """Ask the user a question and wait for a response. -# Args: -# text: The question to present to the user -# attachments: Optional file paths or URLs to attach to the question + Args: + text: The question to present to the user + attachments: Optional file paths or URLs to attach to the question -# Returns: -# ToolResult indicating the question was successfully sent -# """ -# try: -# # Convert single attachment to list for consistent handling -# if attachments and isinstance(attachments, str): -# attachments = [attachments] + Returns: + ToolResult indicating the question was successfully sent + """ + try: + # Convert single attachment to list for consistent handling + if attachments and isinstance(attachments, str): + attachments = [attachments] -# return self.success_response({"status": "Awaiting user response..."}) -# except Exception as e: -# return self.fail_response(f"Error asking user: {str(e)}") + return self.success_response({"status": "Awaiting user response..."}) + except Exception as e: + return self.fail_response(f"Error asking user: {str(e)}") # @openapi_schema({ # "type": "function",