reasoning assistance for implementation tasks

This commit is contained in:
AI Christianson 2025-03-08 15:12:13 -05:00
parent cfb0ec148f
commit ff653c7208
3 changed files with 161 additions and 4 deletions

View File

@ -71,7 +71,7 @@ from ra_aid.prompts.human_prompts import (
from ra_aid.prompts.implementation_prompts import IMPLEMENTATION_PROMPT from ra_aid.prompts.implementation_prompts import IMPLEMENTATION_PROMPT
from ra_aid.prompts.common_prompts import NEW_PROJECT_HINTS from ra_aid.prompts.common_prompts import NEW_PROJECT_HINTS
from ra_aid.prompts.planning_prompts import PLANNING_PROMPT from ra_aid.prompts.planning_prompts import PLANNING_PROMPT
from ra_aid.prompts.reasoning_assist_prompt import REASONING_ASSIST_PROMPT_PLANNING from ra_aid.prompts.reasoning_assist_prompt import REASONING_ASSIST_PROMPT_PLANNING, REASONING_ASSIST_PROMPT_IMPLEMENTATION
from ra_aid.prompts.research_prompts import ( from ra_aid.prompts.research_prompts import (
RESEARCH_ONLY_PROMPT, RESEARCH_ONLY_PROMPT,
RESEARCH_PROMPT, RESEARCH_PROMPT,
@ -977,6 +977,108 @@ def run_task_implementation_agent(
formatted_project_info = "Project info unavailable" formatted_project_info = "Project info unavailable"
# Get environment inventory information # Get environment inventory information
env_inv = get_env_inv()
# Get model configuration to check for reasoning_assist_default
provider = config.get("provider") if config else get_config_repository().get("provider", "")
model_name = config.get("model") if config else get_config_repository().get("model", "")
logger.debug("Checking for reasoning_assist_default on %s/%s", provider, model_name)
model_config = {}
provider_models = models_params.get(provider, {})
if provider_models and model_name in provider_models:
model_config = provider_models[model_name]
# Check if reasoning assist is enabled
reasoning_assist_enabled = model_config.get("reasoning_assist_default", False)
logger.debug("Reasoning assist enabled: %s", reasoning_assist_enabled)
# Initialize implementation guidance section
implementation_guidance_section = ""
# If reasoning assist is enabled, make a one-off call to the expert model
if reasoning_assist_enabled:
try:
logger.info("Reasoning assist enabled for model %s, getting implementation guidance", model_name)
# Collect tool descriptions
tool_metadata = []
from ra_aid.tools.reflection import get_function_info as get_tool_info
for tool in tools:
try:
tool_info = get_tool_info(tool.func)
name = tool.func.__name__
description = inspect.getdoc(tool.func)
tool_metadata.append(f"Tool: {name}\\nDescription: {description}\\n")
except Exception as e:
logger.warning(f"Error getting tool info for {tool}: {e}")
# Format tool metadata
formatted_tool_metadata = "\\n".join(tool_metadata)
# Initialize expert model
expert_model = initialize_expert_llm(provider, model_name)
# Format the reasoning assist prompt for implementation
reasoning_assist_prompt = REASONING_ASSIST_PROMPT_IMPLEMENTATION.format(
current_date=current_date,
working_directory=working_directory,
task=task,
key_facts=key_facts,
key_snippets=format_key_snippets_dict(get_key_snippet_repository().get_snippets_dict()),
research_notes=formatted_research_notes,
related_files="\\n".join(related_files),
env_inv=env_inv,
tool_metadata=formatted_tool_metadata,
)
# Show the reasoning assist query in a panel
console.print(
Panel(Markdown("Consulting with the reasoning model on the best implementation approach."), title="📝 Thinking about implementation...", border_style="yellow")
)
logger.debug("Invoking expert model for implementation reasoning assist")
# Make the call to the expert model
response = expert_model.invoke(reasoning_assist_prompt)
# Check if the model supports think tags
supports_think_tag = model_config.get("supports_think_tag", False)
supports_thinking = model_config.get("supports_thinking", False)
# Process response content
content = None
if hasattr(response, 'content'):
content = response.content
else:
# Fallback if content attribute is missing
content = str(response)
# Process the response content using the centralized function
content, extracted_thinking = process_thinking_content(
content=content,
supports_think_tag=supports_think_tag,
supports_thinking=supports_thinking,
panel_title="💭 Implementation Thinking",
panel_style="yellow",
logger=logger
)
# Display the implementation guidance in a panel
console.print(
Panel(Markdown(content), title="Implementation Guidance", border_style="blue")
)
# Format the implementation guidance section for the prompt
implementation_guidance_section = f"""<implementation guidance>
{content}
</implementation guidance>"""
logger.info("Received implementation guidance")
except Exception as e:
logger.error("Error getting implementation guidance: %s", e)
implementation_guidance_section = ""
prompt = IMPLEMENTATION_PROMPT.format( prompt = IMPLEMENTATION_PROMPT.format(
current_date=current_date, current_date=current_date,
@ -1001,8 +1103,9 @@ def run_task_implementation_agent(
if config.get("web_research_enabled") if config.get("web_research_enabled")
else "" else ""
), ),
env_inv=get_env_inv(), env_inv=env_inv,
project_info=formatted_project_info, project_info=formatted_project_info,
implementation_guidance_section=implementation_guidance_section,
) )
config = get_config_repository().get_all() if not config else config config = get_config_repository().get_all() if not config else config

View File

@ -45,6 +45,8 @@ YOU MUST **EXPLICITLY** INCLUDE ANY PATHS FROM THE ABOVE INFO IF NEEDED. IT IS N
READ AND STUDY ACTUAL LIBRARY HEADERS/CODE FROM THE ENVIRONMENT, IF AVAILABLE AND RELEVANT. READ AND STUDY ACTUAL LIBRARY HEADERS/CODE FROM THE ENVIRONMENT, IF AVAILABLE AND RELEVANT.
{implementation_guidance_section}
Important Notes: Important Notes:
- Focus solely on the given task and implement it as described. - 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. - 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.

View File

@ -1,4 +1,4 @@
"""Reasoning assist prompts for planning stage.""" """Reasoning assist prompts for planning and implementation stages."""
REASONING_ASSIST_PROMPT_PLANNING = """Current Date: {current_date} REASONING_ASSIST_PROMPT_PLANNING = """Current Date: {current_date}
Working Directory: {working_directory} Working Directory: {working_directory}
@ -51,6 +51,58 @@ It should be the most beautiful, elegant, simple logic ever.
YOUR OUTPUT MUST BE MARKDOWN. YOUR OUTPUT MUST BE MARKDOWN.
WE ARE IN THE **PLANNING** STAGE RIGHT NOW. NO CODE SHOULD BE WRITTEN. WE SHOULD BE THINKING LOGICALLY ABOUT HOW TO APPROACH THE PROBLEM, PLANNING OUT WHICH TASKS TO REQUEST IMPLEMENTATION OF, ETC. WE ARE IN THE **PLANNING** STAGE RIGHT NOW. NO CODE SHOULD BE WRITTEN. WE SHOULD BE THINKING LOGICALLY ABOUT HOW TO APPROACH THE PROBLEM, PLANNING OUT WHICH TASKS TO REQUEST IMPLEMENTATION OF, ETC.
DO NOT OVERTHINK OR OVERCOMPLICATE THE ANSWER. YOU ARE AN EXPERT AND CAN RESPOND ASSERTIVELY AND CONFIDENTLY.
"""
REASONING_ASSIST_PROMPT_IMPLEMENTATION = """Current Date: {current_date}
Working Directory: {working_directory}
I am an agent about to implement the following task. I need your assistance in thinking through the implementation details in a structured, logical way before I start writing code. The task is:
<task definition>
{task}
</task definition>
<key facts>
{key_facts}
</key facts>
<key snippets>
{key_snippets}
</key snippets>
<research notes>
{research_notes}
</research notes>
<related files>
{related_files}
</related files>
<environment information>
{env_inv}
</environment information>
<available tools>
{tool_metadata}
</available tools>
Please provide detailed implementation guidance including:
1. Code structure and patterns to follow
2. Potential edge cases to handle
3. Testing strategies to validate the implementation
4. Key files to modify and how
5. Dependencies and their interactions
6. Error handling considerations
7. Performance considerations
Please be concise, practical, and specific to this task. Avoid generic advice.
Your output should include pseudo-code where appropriate and clear step-by-step implementation instructions. Remember I am an agent and will use this logic to guide my implementation actions.
You are guiding an agent. Suggest how and when to use the tools. Write a couple paragraphs about it in markdown and you're done.
DO NOT OVERTHINK OR OVERCOMPLICATE THE ANSWER. YOU ARE AN EXPERT AND CAN RESPOND ASSERTIVELY AND CONFIDENTLY.
""" """