diff --git a/src/main/java/com/olympus/hermione/controllers/ScenarioController.java b/src/main/java/com/olympus/hermione/controllers/ScenarioController.java index 1298f4c..e863549 100644 --- a/src/main/java/com/olympus/hermione/controllers/ScenarioController.java +++ b/src/main/java/com/olympus/hermione/controllers/ScenarioController.java @@ -60,6 +60,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 ff5f1d0..9b7ce6a 100644 --- a/src/main/java/com/olympus/hermione/services/ScenarioExecutionService.java +++ b/src/main/java/com/olympus/hermione/services/ScenarioExecutionService.java @@ -88,7 +88,7 @@ public class ScenarioExecutionService { ScenarioExecution scenarioExecution = o_scenarioExecution.get(); scenarioExecution.setCurrentStepId(scenarioExecution.getCurrentStepId()); - if(scenarioExecution.getExecSharedMap().get("scenario_output")!=null){ + if(scenarioExecution.getExecSharedMap()!=null && scenarioExecution.getExecSharedMap().get("scenario_output")!=null){ scenarioOutput.setScenarioExecution_id(scenarioExecution.getId()); scenarioOutput.setStatus("OK"); scenarioOutput.setStringOutput(scenarioExecution.getExecSharedMap().get("scenario_output").toString()); @@ -97,6 +97,12 @@ public class ScenarioExecutionService { scenarioOutput.setStatus("IN_PROGRESS"); } + if(scenarioExecution.getLatestStepStatus()!= null && 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() != null && 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);