|
import pytest
|
|
|
|
from openhands.agenthub.browsing_agent.response_parser import (
|
|
BrowseInteractiveAction,
|
|
BrowsingResponseParser,
|
|
)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
'action_str, expected',
|
|
[
|
|
("click('81'", "click('81')```"),
|
|
(
|
|
'"We need to search the internet\n```goto("google.com")',
|
|
'"We need to search the internet\n```goto("google.com")```',
|
|
),
|
|
("```click('81'", "```click('81')```"),
|
|
("click('81')", "click('81')```"),
|
|
(
|
|
"send_msg_to_user('The server might not be running or accessible. Please check the server status and try again.')",
|
|
"send_msg_to_user('The server might not be running or accessible. Please check the server status and try again.')```",
|
|
),
|
|
],
|
|
)
|
|
def test_parse_response(action_str: str, expected: str) -> None:
|
|
|
|
parser = BrowsingResponseParser()
|
|
response = {'choices': [{'message': {'content': action_str}}]}
|
|
result = parser.parse_response(response)
|
|
assert result == expected
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
'action_str, expected_browser_actions, expected_thought, expected_msg_content',
|
|
[
|
|
("click('81')```", "click('81')", '', ''),
|
|
("```click('81')```", "click('81')", '', ''),
|
|
(
|
|
"We need to perform a click\n```click('81')",
|
|
"click('81')",
|
|
'We need to perform a click',
|
|
'',
|
|
),
|
|
(
|
|
'Tell the user that the city was built in 1751.\n```send_msg_to_user("Based on the results of my search, the city was built in 1751.")',
|
|
'send_msg_to_user("Based on the results of my search, the city was built in 1751.")',
|
|
'Tell the user that the city was built in 1751.',
|
|
'Based on the results of my search, the city was built in 1751.',
|
|
),
|
|
(
|
|
'Tell the user that the city was built in 1751.\n```send_msg_to_user("Based on the results of my search, the city was built in 1751.")```',
|
|
'send_msg_to_user("Based on the results of my search, the city was built in 1751.")',
|
|
'Tell the user that the city was built in 1751.',
|
|
'Based on the results of my search, the city was built in 1751.',
|
|
),
|
|
(
|
|
"Tell the user that the city was built in 1751.\n```send_msg_to_user('Based on the results of my search, the city was built in 1751.')```",
|
|
"send_msg_to_user('Based on the results of my search, the city was built in 1751.')",
|
|
'Tell the user that the city was built in 1751.',
|
|
'Based on the results of my search, the city was built in 1751.',
|
|
),
|
|
(
|
|
"send_msg_to_user('The server might not be running or accessible. Please check the server status and try again.'))```",
|
|
"send_msg_to_user('The server might not be running or accessible. Please check the server status and try again.'))",
|
|
'',
|
|
'The server might not be running or accessible. Please check the server status and try again.',
|
|
),
|
|
],
|
|
)
|
|
def test_parse_action(
|
|
action_str: str,
|
|
expected_browser_actions: str,
|
|
expected_thought: str,
|
|
expected_msg_content: str,
|
|
) -> None:
|
|
|
|
parser = BrowsingResponseParser()
|
|
action = parser.parse_action(action_str)
|
|
assert isinstance(action, BrowseInteractiveAction)
|
|
assert action.browser_actions == expected_browser_actions
|
|
assert action.thought == expected_thought
|
|
assert action.browsergym_send_msg_to_user == expected_msg_content
|
|
|