reasoning assistance for implementation tasks
This commit is contained in:
parent
cfb0ec148f
commit
ff653c7208
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue