Skip to content

Commit

Permalink
AgentDelegateAction: make delegate start with the task in execute tag…
Browse files Browse the repository at this point in the history
…s, not the rest of the parent LLM response (All-Hands-AI#4327)
  • Loading branch information
enyst authored Oct 13, 2024
1 parent ff8a9a1 commit df23168
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 7 deletions.
11 changes: 9 additions & 2 deletions openhands/agenthub/codeact_agent/action_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -158,8 +158,15 @@ def parse(self, action_str: str) -> Action:
), 'self.agent_delegate should not be None when parse is called'
thought = action_str.replace(self.agent_delegate.group(0), '').strip()
browse_actions = self.agent_delegate.group(1).strip()
task = f'{thought}. I should start with: {browse_actions}'
return AgentDelegateAction(agent='BrowsingAgent', inputs={'task': task})
thought = (
f'{thought}\nI should start with: {browse_actions}'
if thought
else f'I should start with: {browse_actions}'
)

return AgentDelegateAction(
agent='BrowsingAgent', thought=thought, inputs={'task': browse_actions}
)


class CodeActActionParserMessage(ActionParser):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ possible next action to accomplish your goal. Your answer will be interpreted
and executed by a program, make sure to follow the formatting instructions.

# Goal:
. I should start with: Get the content on "http://localhost:8000"
Get the content on "http://localhost:8000"

# Action Space

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ possible next action to accomplish your goal. Your answer will be interpreted
and executed by a program, make sure to follow the formatting instructions.

# Goal:
. I should start with: Get the content on "http://localhost:8000"
Get the content on "http://localhost:8000"

# Action Space

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ possible next action to accomplish your goal. Your answer will be interpreted
and executed by a program, make sure to follow the formatting instructions.

# Goal:
. I should start with: Get the content on "http://localhost:8000"
Get the content on "http://localhost:8000"

# Action Space

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -406,9 +406,9 @@ Browse localhost:8000, and tell me the ultimate answer to life. Do not ask me fo

----------


I should start with: Get the content on "http://localhost:8000"
<execute_browse>
. I should start with: Get the content on "http://localhost:8000"
Get the content on "http://localhost:8000"
</execute_browse>

----------
Expand Down
53 changes: 53 additions & 0 deletions tests/unit/test_codeact_agent_parser.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import pytest

from openhands.agenthub.codeact_agent.action_parser import (
CodeActActionParserAgentDelegate,
)
from openhands.events.action import AgentDelegateAction


@pytest.mark.parametrize(
'action_str, expected_agent, expected_thought, expected_task',
[
(
'I need to search for information.\n<execute_browse>Tell me who is the Vice President of the USA</execute_browse>',
'BrowsingAgent',
'I need to search for information.\nI should start with: Tell me who is the Vice President of the USA',
'Tell me who is the Vice President of the USA',
),
(
'<execute_browse>Search for recent climate change data</execute_browse>',
'BrowsingAgent',
'I should start with: Search for recent climate change data',
'Search for recent climate change data',
),
(
"Let's use the browsing agent to find this information.\n<execute_browse>Find the population of Tokyo in 2023</execute_browse>\nThis will help us answer the question.",
'BrowsingAgent',
"Let's use the browsing agent to find this information.\n\nThis will help us answer the question.\nI should start with: Find the population of Tokyo in 2023",
'Find the population of Tokyo in 2023',
),
],
)
def test_codeact_action_parser_agent_delegate(
action_str, expected_agent, expected_thought, expected_task
):
parser = CodeActActionParserAgentDelegate()
assert parser.check_condition(action_str)

action = parser.parse(action_str)

assert isinstance(action, AgentDelegateAction)
assert action.agent == expected_agent
assert action.thought == expected_thought
assert action.inputs['task'] == expected_task


def test_codeact_action_parser_agent_delegate_no_match():
parser = CodeActActionParserAgentDelegate()
action_str = 'This is a regular message without any browse command.'

assert not parser.check_condition(action_str)

with pytest.raises(AssertionError):
parser.parse(action_str)

0 comments on commit df23168

Please sign in to comment.