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.common_prompts import NEW_PROJECT_HINTS
|
||||
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 (
|
||||
RESEARCH_ONLY_PROMPT,
|
||||
RESEARCH_PROMPT,
|
||||
|
|
@ -977,6 +977,108 @@ def run_task_implementation_agent(
|
|||
formatted_project_info = "Project info unavailable"
|
||||
|
||||
# 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(
|
||||
current_date=current_date,
|
||||
|
|
@ -1001,8 +1103,9 @@ def run_task_implementation_agent(
|
|||
if config.get("web_research_enabled")
|
||||
else ""
|
||||
),
|
||||
env_inv=get_env_inv(),
|
||||
env_inv=env_inv,
|
||||
project_info=formatted_project_info,
|
||||
implementation_guidance_section=implementation_guidance_section,
|
||||
)
|
||||
|
||||
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.
|
||||
|
||||
{implementation_guidance_section}
|
||||
|
||||
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.
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
Working Directory: {working_directory}
|
||||
|
|
@ -51,6 +51,58 @@ It should be the most beautiful, elegant, simple logic ever.
|
|||
|
||||
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.
|
||||
|
||||
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