From 78a36e8fccd1fe0696760f2d591898cc4b56d098 Mon Sep 17 00:00:00 2001 From: "andrea.terzani" Date: Tue, 29 Oct 2024 08:43:28 +0100 Subject: [PATCH] basic steps error handling --- .../controllers/ScenarioController.java | 1 + .../hermione/models/ScenarioExecution.java | 3 +- .../services/ScenarioExecutionService.java | 41 ++++++++++++++----- 3 files changed, 34 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/olympus/hermione/controllers/ScenarioController.java b/src/main/java/com/olympus/hermione/controllers/ScenarioController.java index 7c029ea..9513ae4 100644 --- a/src/main/java/com/olympus/hermione/controllers/ScenarioController.java +++ b/src/main/java/com/olympus/hermione/controllers/ScenarioController.java @@ -58,6 +58,7 @@ public class ScenarioController { @PostMapping("scenarios/execute") public ScenarioOutput executeScenario(@RequestBody ScenarioExecutionInput scenarioExecutionInput) { + ScenarioOutput preOutput = scenarioExecutionService.prepareScrenarioExecution(scenarioExecutionInput); scenarioExecutionService.executeScenarioAsync(preOutput); diff --git a/src/main/java/com/olympus/hermione/models/ScenarioExecution.java b/src/main/java/com/olympus/hermione/models/ScenarioExecution.java index a9ad069..e039e08 100644 --- a/src/main/java/com/olympus/hermione/models/ScenarioExecution.java +++ b/src/main/java/com/olympus/hermione/models/ScenarioExecution.java @@ -29,7 +29,8 @@ public class ScenarioExecution { private String currentStepDescription; private String executedByUserId; - + private String latestStepStatus; + private String latestStepOutput; private ScenarioExecutionInput scenarioExecutionInput; } diff --git a/src/main/java/com/olympus/hermione/services/ScenarioExecutionService.java b/src/main/java/com/olympus/hermione/services/ScenarioExecutionService.java index 0183592..cc54840 100644 --- a/src/main/java/com/olympus/hermione/services/ScenarioExecutionService.java +++ b/src/main/java/com/olympus/hermione/services/ScenarioExecutionService.java @@ -97,6 +97,12 @@ public class ScenarioExecutionService { scenarioOutput.setStatus("IN_PROGRESS"); } + if(scenarioExecution.getLatestStepStatus().equals("ERROR")){ + scenarioOutput.setScenarioExecution_id(scenarioExecution.getId()); + scenarioOutput.setStatus("ERROR"); + scenarioOutput.setMessage(scenarioExecution.getLatestStepOutput()); + } + }else{ scenarioOutput.setScenarioExecution_id(null); scenarioOutput.setStatus("ERROR"); @@ -168,9 +174,12 @@ public class ScenarioExecutionService { while (scenarioExecution.getNextStepId()!=null) { ScenarioStep step = steps.stream().filter(s -> s.getStepId().equals(scenarioExecution.getNextStepId())).findFirst().orElse(null); executeScenarioStep(step, scenarioExecution); - } - + if(scenarioExecution.getLatestStepStatus().equals("ERROR")){ + logger.error("Error while executing step: " + step.getStepId()); + break; + } + } } } @@ -204,18 +213,30 @@ public class ScenarioExecutionService { logger.info("Initializing step: " + step.getStepId()); - solver.init(step, scenarioExecution, - vectorStore,chatModel,chatClient,graphDriver,neo4JUitilityService - ,discoveryClient); - logger.info("Solving step: " + step.getStepId()); scenarioExecution.setCurrentStepId(step.getStepId()); scenarioExecution.setCurrentStepDescription(step.getName()); - - ScenarioExecution scenarioExecutionNew = solver.solveStep(); - logger.info("Step solved: " + step.getStepId()); - logger.info("Next step: " + scenarioExecutionNew.getNextStepId()); + ScenarioExecution scenarioExecutionNew=scenarioExecution; + + try{ + solver.init(step, scenarioExecution, + vectorStore,chatModel,chatClient,graphDriver,neo4JUitilityService + ,discoveryClient); + + scenarioExecutionNew = solver.solveStep(); + + logger.info("Step solved: " + step.getStepId()); + logger.info("Next step: " + scenarioExecutionNew.getNextStepId()); + + }catch (Exception e){ + logger.error("Error while solving step: " + step.getStepId() + " => " + e.getMessage()); + scenarioExecutionNew.setNextStepId(null); + scenarioExecutionNew.setLatestStepStatus("ERROR"); + scenarioExecutionNew.setLatestStepOutput(e.getMessage()); + + } + scenarioExecutionRepository.save(scenarioExecutionNew);