@@ -262,7 +262,7 @@ def step(self, action: str) -> tuple:
262262 self ._wait_for_user_message ()
263263
264264 # extract reward, done, user_message, info (task-specific)
265- reward , done , user_message , info = self .task . validate ( self . page , self . chat . messages )
265+ reward , done , user_message , info = self ._task_validate ( )
266266
267267 # add any user message sent by the task to the chat
268268 if user_message :
@@ -277,6 +277,24 @@ def step(self, action: str) -> tuple:
277277
278278 return obs , reward , terminated , truncated , info
279279
280+ def _task_validate (self ):
281+ # back-up these in case validate() navigates pages and messes the history
282+ prev_active_page = self .page
283+ prev_page_history = self .page_history .copy ()
284+
285+ # call validate
286+ reward , done , user_message , info = self .task .validate (self .page , self .chat .messages )
287+
288+ # safety fix, in case validate() did mess up the active page and/or page history
289+ if prev_active_page != self .page or prev_page_history != self .page_history :
290+ logging .warning (
291+ "The active page and / or page history has changed during task.validate(). A recovery fix will be applied."
292+ )
293+ self .page = prev_active_page
294+ self .page_history = prev_page_history
295+
296+ return reward , done , user_message , info
297+
280298 def _wait_for_user_message (self ):
281299 # if last message is from the assistant, wait for a user message to continue
282300 # TODO: be smarter about when to wait for a user message (different action from the assistant?)
0 commit comments