diff --git a/ra_aid/console/formatting.py b/ra_aid/console/formatting.py index eb3c9a9..1a888ad 100644 --- a/ra_aid/console/formatting.py +++ b/ra_aid/console/formatting.py @@ -31,7 +31,7 @@ def print_stage_header(stage: str) -> None: icon = icons.get(stage_key, "🚀") # Create styled panel with icon - panel_content = f"{icon} {stage_title}" + panel_content = f" {icon} {stage_title}" console.print(Panel(panel_content, style="green bold", padding=0)) diff --git a/ra_aid/prompts.py b/ra_aid/prompts.py index 97d71ed..840112b 100644 --- a/ra_aid/prompts.py +++ b/ra_aid/prompts.py @@ -119,7 +119,9 @@ Prioritize checking current documentation for technical advice. # New project hints NEW_PROJECT_HINTS = """ -If the user did not specify a stack, use your best judgment, or make a proposal and ask the human if the human-in-the-loop tool is available. +Because this is a new project: +- If the user did not specify a stack, use your best judgment, or make a proposal and ask the human if the human-in-the-loop tool is available. +- If the user did not specify a directory to create the project in, create directly in the current directory. """ # Research stage prompt - guides initial codebase analysis @@ -286,10 +288,6 @@ You have often been criticized for: {human_section} {web_research_section} -If you make tool calls incorrectly, you **WILL** get errors like the following: - -Error: 1 validation error for emit_research_notes notes Field required [type=missing, input_value=, input_type=dict] - NEVER ANNOUNCE WHAT YOU ARE DOING, JUST DO IT! """ @@ -501,12 +499,6 @@ You have often been criticized for: - Not indicating confidence levels or noting uncertainties - Not calling tools/functions properly, e.g. leaving off required arguments, calling a tool in a loop, calling tools inappropriately. - - -If you make tool calls incorrectly, you **WILL** get errors like the following: - -Error: 1 validation error for emit_research_notes notes Field required [type=missing, input_value=, input_type=dict] - NEVER ANNOUNCE WHAT YOU ARE DOING, JUST DO IT! """ @@ -602,52 +594,32 @@ NEVER ANNOUNCE WHAT YOU ARE DOING, JUST DO IT! IMPLEMENTATION_PROMPT = """Current Date: {current_date} Working Directory: {working_directory} -Base-level task (for reference only): - -{base_task} - - -keep it simple. if the expert tool is available, use it frequently for high level logic and planning. - -Plan Overview (for reference only, remember you are only implementing your specific task): -{plan} - -Key Facts: + {key_facts} + -Key Snippets: + {key_snippets} + -Relevant Files: + {related_files} + -Research Notes: + {research_notes} - -Work done so far: - -{work_log} - + Important Notes: - Focus solely on the given task and implement it as described. - Scale the complexity of your solution to the complexity of the request. For simple requests, keep it straightforward and minimal. For complex requests, maintain the previously planned depth. -- Use delete_key_facts to remove facts that become outdated, irrelevant, or duplicated. - Use emit_key_snippets to manage code sections before and after modifications in batches. -- Regularly remove outdated snippets with delete_key_snippets. -Instructions: -1. Review the provided base task, plan, and key facts. -2. Implement only the specified task: - -{task} - -3. Work incrementally, validating as you go. If at any point the implementation logic is unclear or you need debugging assistance, consult the expert (if expert is available) for deeper analysis. -4. Use delete_key_facts to remove any key facts that no longer apply. -5. Do not add features not explicitly required. -6. Only create or modify files directly related to this task. -7. Use file_str_replace and write_file_tool for simple file modifications. -8. Delegate to run_programming_task for more complex programming tasks. This is a capable human programmer that can work on multiple files at once. +- Work incrementally, validating as you go. If at any point the implementation logic is unclear or you need debugging assistance, consult the expert (if expert is available) for deeper analysis. +- Do not add features not explicitly required. +- Only create or modify files directly related to this task. +- Use file_str_replace and write_file_tool for simple file modifications. +- Delegate to run_programming_task for more complex programming tasks. This is a capable human programmer that can work on multiple files at once. Testing: @@ -659,7 +631,7 @@ Testing: - Only test UI components if there is already a UI testing system in place. - Only test things that can be tested by an automated process. -Once the task is complete, ensure all updated files are emitted. +Once the task is complete, ensure all updated files are registered with emit_related_files. {expert_section} {human_section} @@ -670,10 +642,16 @@ You have often been criticized for: - Doing changes outside of the specific scoped instructions. - Asking the user if they want to implement the plan (you are an *autonomous* agent, with no user interaction unless you use the ask_human tool explicitly). - Not calling tools/functions properly, e.g. leaving off required arguments, calling a tool in a loop, calling tools inappropriately. + - Using run_programming_task to simply write the full contents of files when you could have used write_file_tool instead. -If you make tool calls incorrectly, you **WILL** get errors like the following: +Instructions: +1. Review the provided base task, plan, and key facts. +2. Implement only the specified task: + +{task} + -Error: 1 validation error for run_programming_task instructions Field required [type=missing, input_value=, input_type=dict] +KEEP IT SIMPLE NEVER ANNOUNCE WHAT YOU ARE DOING, JUST DO IT! """ diff --git a/ra_aid/tool_configs.py b/ra_aid/tool_configs.py index 241c32f..3950ecd 100644 --- a/ra_aid/tool_configs.py +++ b/ra_aid/tool_configs.py @@ -30,6 +30,7 @@ from ra_aid.tools.agent import ( request_web_research, ) from ra_aid.tools.memory import one_shot_completed +from ra_aid.tools.write_file import write_file_tool # Read-only tools that don't modify system state @@ -48,10 +49,11 @@ def get_read_only_tools( tools = [ emit_related_files, emit_key_facts, - delete_key_facts, emit_key_snippets, - delete_key_snippets, - deregister_related_files, + # *TEMPORARILY* disabled to improve tool calling perf. + # delete_key_facts, + # delete_key_snippets, + # deregister_related_files, list_directory_tree, read_file_tool, fuzzy_find_project_files, @@ -70,14 +72,15 @@ def get_read_only_tools( # Define constant tool groups READ_ONLY_TOOLS = get_read_only_tools() -MODIFICATION_TOOLS = [run_programming_task] +MODIFICATION_TOOLS = [run_programming_task, write_file_tool] COMMON_TOOLS = get_read_only_tools() EXPERT_TOOLS = [emit_expert_context, ask_expert] RESEARCH_TOOLS = [ emit_research_notes, - one_shot_completed, - monorepo_detected, - ui_detected, + # *TEMPORARILY* disabled to improve tool calling perf. + # one_shot_completed, + # monorepo_detected, + # ui_detected, ] @@ -129,9 +132,10 @@ def get_planning_tools( # Add planning-specific tools planning_tools = [ - emit_plan, request_task_implementation, - plan_implementation_completed, + # *TEMPORARILY* disabled to improve tool calling perf. + # emit_plan, + # plan_implementation_completed, ] tools.extend(planning_tools) @@ -202,9 +206,10 @@ def get_chat_tools( request_research, request_research_and_implementation, emit_key_facts, - delete_key_facts, - delete_key_snippets, - deregister_related_files, + # *TEMPORARILY* disabled to improve tool calling perf. + # delete_key_facts, + # delete_key_snippets, + # deregister_related_files, ] if web_research_enabled: diff --git a/ra_aid/tools/agent.py b/ra_aid/tools/agent.py index 1872d9c..7ef5e99 100644 --- a/ra_aid/tools/agent.py +++ b/ra_aid/tools/agent.py @@ -248,6 +248,8 @@ def request_research_and_implementation(query: str) -> Dict[str, Any]: def request_task_implementation(task_spec: str) -> Dict[str, Any]: """Spawn an implementation agent to execute the given task. + Task specs should have the requirements. Generally, the spec will not include any code. + Args: task_spec: REQUIRED The full task specification (markdown format, typically one part of the overall plan) """ diff --git a/ra_aid/tools/memory.py b/ra_aid/tools/memory.py index fab91a3..5ea25f1 100644 --- a/ra_aid/tools/memory.py +++ b/ra_aid/tools/memory.py @@ -387,6 +387,8 @@ def plan_implementation_completed(message: str) -> str: Returns: Confirmation message """ + _global_memory["task_completed"] = True + _global_memory["completion_message"] = message _global_memory["plan_completed"] = True _global_memory["completion_message"] = message _global_memory["tasks"].clear() # Clear task list when plan is completed diff --git a/ra_aid/tools/programmer.py b/ra_aid/tools/programmer.py index 008a737..4f62f92 100644 --- a/ra_aid/tools/programmer.py +++ b/ra_aid/tools/programmer.py @@ -33,16 +33,20 @@ def run_programming_task( The programmer sees only what you provide, no conversation history. - Give detailed instructions but do not write their code. + Give detailed instructions including multi-file tasks but do not write their code. - They are intelligent and can edit multiple files. + The programmer cannot run commands. If new files are created, emit them after finishing. They can add/modify files, but not remove. Use run_shell_command to remove files. If referencing files you’ll delete, remove them after they finish. + + Use write_file_tool instead if you need to write the entire contents of file(s). + + If the programmer wrote files, they actually wrote to disk. You do not need to rewrite the output of what the programmer showed you. Args: - instructions: REQUIRED Programming task instructions (markdown format, use newlines and as many tokens as needed) + instructions: REQUIRED Programming task instructions (markdown format, use newlines and as many tokens as needed, no commands allowed) files: Optional; if not provided, uses related_files Returns: { "output": stdout+stderr, "return_code": 0 if success, "success": True/False }