in evals/elsuite/multistep_web_tasks/webarena/browser_env/basic_browser_env.py [0:0]
def step(self, action: BrowserAction) -> BrowserEnvOutput:
if not self.reset_finished:
raise RuntimeError("Call reset first before calling step.")
# handle stop separately
if action.data["action_type"] == BrowserActionTypes.STOP:
return BrowserEnvOutput(
observation=self._get_obs(),
reward=0.0,
done=True,
truncated=False,
info=PageInfo(
page=DetachedPage(self.page.url, self.page.content()),
fail_error="",
observation_metadata=self._get_obs_metadata(),
),
)
success = False
fail_error = ""
previous_obs = self._get_obs()
try:
execute_action(
action,
self.page,
self.observation_handler.action_processor,
)
success = True
except Exception as e:
logger.warning(f"Failed to execute action {action}: {e}")
fail_error = str(e)
# hard sleep TODO[shuyanzh] suboptimal, may need to check network
if self.sleep_after_execution > 0:
time.sleep(self.sleep_after_execution)
observation = self._get_obs()
if observation.data == previous_obs.data:
logger.warning(
f"\nObservation did not change after executing action:\n{action}\n=====\n"
)
observation_metadata = self._get_obs_metadata()
info = PageInfo(
page=DetachedPage(self.page.url, self.page.content()),
fail_error=fail_error,
observation_metadata=observation_metadata,
)
env_output = BrowserEnvOutput(
observation=observation,
reward=float(success),
done=False,
truncated=False,
info=info,
)
return env_output