Spaces:
Build error
Build error
import json | |
import pytest | |
from openhands.core.logger import openhands_logger as logger | |
from openhands.events.action.browse import BrowseInteractiveAction | |
from openhands.events.observation.browse import BrowserOutputObservation | |
from tests.runtime.conftest import _close_test_runtime, _load_runtime | |
def has_miniwob(): | |
try: | |
import importlib.util | |
# try to find this browser environment, if it was installed | |
spec = importlib.util.find_spec('browsergym.miniwob') | |
if spec is None: | |
return False | |
# try to import this environment | |
importlib.util.module_from_spec(spec) | |
return True | |
except ImportError: | |
return False | |
def test_browsergym_eval_env(runtime_cls, temp_dir): | |
runtime, config = _load_runtime( | |
temp_dir, | |
runtime_cls=runtime_cls, | |
run_as_openhands=False, # need root permission to access file | |
base_container_image='xingyaoww/od-eval-miniwob:v1.0', | |
browsergym_eval_env='browsergym/miniwob.choose-list', | |
force_rebuild_runtime=True, | |
) | |
from openhands.runtime.browser.browser_env import ( | |
BROWSER_EVAL_GET_GOAL_ACTION, | |
BROWSER_EVAL_GET_REWARDS_ACTION, | |
) | |
# Test browse | |
action = BrowseInteractiveAction(browser_actions=BROWSER_EVAL_GET_GOAL_ACTION) | |
logger.info(action, extra={'msg_type': 'ACTION'}) | |
obs = runtime.run_action(action) | |
logger.info(obs, extra={'msg_type': 'OBSERVATION'}) | |
assert isinstance(obs, BrowserOutputObservation) | |
assert not obs.error | |
assert 'Select' in obs.content | |
assert 'from the list and click Submit' in obs.content | |
# Make sure the browser can produce observation in eval env | |
action = BrowseInteractiveAction(browser_actions='noop()') | |
logger.info(action, extra={'msg_type': 'ACTION'}) | |
obs = runtime.run_action(action) | |
logger.info(obs, extra={'msg_type': 'OBSERVATION'}) | |
assert ( | |
obs.url.strip() | |
== 'file:///miniwob-plusplus/miniwob/html/miniwob/choose-list.html' | |
) | |
# Make sure the rewards are working | |
action = BrowseInteractiveAction(browser_actions=BROWSER_EVAL_GET_REWARDS_ACTION) | |
logger.info(action, extra={'msg_type': 'ACTION'}) | |
obs = runtime.run_action(action) | |
logger.info(obs, extra={'msg_type': 'OBSERVATION'}) | |
assert json.loads(obs.content) == [0.0] | |
_close_test_runtime(runtime) | |