diff --git a/skyvern/forge/agent.py b/skyvern/forge/agent.py index 4c6bb5d1..794e8911 100644 --- a/skyvern/forge/agent.py +++ b/skyvern/forge/agent.py @@ -621,7 +621,7 @@ class ForgeAgent: status=StepStatus.failed, output=detailed_agent_step_output.to_agent_step_output(), ) - return failed_step, detailed_agent_step_output + return failed_step, detailed_agent_step_output.get_clean_detailed_output() LOG.info( "Actions executed successfully, marking step as completed", @@ -637,7 +637,7 @@ class ForgeAgent: status=StepStatus.completed, output=detailed_agent_step_output.to_agent_step_output(), ) - return completed_step, detailed_agent_step_output + return completed_step, detailed_agent_step_output.get_clean_detailed_output() except CancelledError: LOG.exception( "CancelledError in agent_step, marking step as failed", @@ -651,7 +651,7 @@ class ForgeAgent: status=StepStatus.failed, output=detailed_agent_step_output.to_agent_step_output(), ) - return failed_step, detailed_agent_step_output + return failed_step, detailed_agent_step_output.get_clean_detailed_output() except Exception: LOG.exception( "Unexpected exception in agent_step, marking step as failed", @@ -665,7 +665,7 @@ class ForgeAgent: status=StepStatus.failed, output=detailed_agent_step_output.to_agent_step_output(), ) - return failed_step, detailed_agent_step_output + return failed_step, detailed_agent_step_output.get_clean_detailed_output() async def record_artifacts_after_action(self, task: Task, step: Step, browser_state: BrowserState) -> None: if not browser_state.page: diff --git a/skyvern/webeye/actions/models.py b/skyvern/webeye/actions/models.py index 59a92344..07665c63 100644 --- a/skyvern/webeye/actions/models.py +++ b/skyvern/webeye/actions/models.py @@ -60,9 +60,23 @@ class DetailedAgentStepOutput(BaseModel): errors.extend(action.errors) return errors - def to_agent_step_output(self) -> AgentStepOutput: - return AgentStepOutput( - action_results=self.action_results if self.action_results else [], - actions_and_results=(self.actions_and_results if self.actions_and_results else []), - errors=self.extract_errors(), + def get_clean_detailed_output(self) -> DetailedAgentStepOutput: + return DetailedAgentStepOutput( + scraped_page=self.scraped_page, + extract_action_prompt=self.extract_action_prompt, + llm_response=self.llm_response, + actions=self.actions, + action_results=self.action_results, + actions_and_results=None + if self.actions_and_results is None + else [(action, result) for action, result in self.actions_and_results if result], + ) + + def to_agent_step_output(self) -> AgentStepOutput: + clean_output = self.get_clean_detailed_output() + + return AgentStepOutput( + action_results=clean_output.action_results if clean_output.action_results else [], + actions_and_results=(clean_output.actions_and_results if clean_output.actions_and_results else []), + errors=clean_output.extract_errors(), )