This commit is contained in:
2024-08-01 11:23:05 +02:00
parent 57ad21a14c
commit ff156655c0
7 changed files with 105 additions and 3 deletions

View File

@@ -5,16 +5,22 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import com.olympus.hermione.dto.ScenarioExecutionInput;
import com.olympus.hermione.dto.ScenarioOutput;
import com.olympus.hermione.models.Scenario;
import com.olympus.hermione.repository.ScenarioRepository;
import com.olympus.hermione.services.ScenarioExecutionService;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
@RestController
public class ScenarioController {
@Autowired
ScenarioRepository scenarioRepository;
@Autowired
ScenarioExecutionService scenarioExecutionService;
@GetMapping("/scenarios")
public Iterable<Scenario> getScenarios() {
@@ -25,4 +31,16 @@ public class ScenarioController {
public Scenario createScenario(@RequestBody Scenario scenario) {
return scenarioRepository.save(scenario);
}
@GetMapping("/scenarios/{id}")
public Scenario getScenario(@RequestParam String id) {
return scenarioRepository.findById(id).get();
}
@PostMapping("scenarios/execute")
public ScenarioOutput executeScenario(@RequestBody ScenarioExecutionInput scenarioExecutionInput) {
return scenarioExecutionService.executeScenario(scenarioExecutionInput);
}
}

View File

@@ -0,0 +1,13 @@
package com.olympus.hermione.dto;
import java.util.HashMap;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class ScenarioExecutionInput {
private String scenario_id;
private HashMap<String,String> inputs;
}

View File

@@ -0,0 +1,12 @@
package com.olympus.hermione.dto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class ScenarioOutput {
private String stringOutput;
private String status;
private String message;
}

View File

@@ -14,5 +14,6 @@ public class Scenario {
@Id
private String id;
private String name;
private String description;
private List<ScenarioStep> steps;
}

View File

@@ -13,6 +13,8 @@ import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.olympus.hermione.dto.ScenarioExecutionInput;
import com.olympus.hermione.dto.ScenarioOutput;
import com.olympus.hermione.models.Scenario;
import com.olympus.hermione.models.ScenarioExecution;
import com.olympus.hermione.models.ScenarioStep;
@@ -74,6 +76,48 @@ public class ScenarioExecutionService {
return "";
}
public ScenarioOutput executeScenario(ScenarioExecutionInput scenarioExecutionInput){
String scenarioId = scenarioExecutionInput.getScenario_id();
HashMap<String,String> inputs = scenarioExecutionInput.getInputs();
ScenarioOutput scenarioOutput = new ScenarioOutput();
Optional<Scenario> o_scenario = scenarioRepository.findById(scenarioId);
if(o_scenario.isPresent()){
Scenario scenario = o_scenario.get();
logger.info("Executing scenario: " + scenario.getName());
ScenarioExecution scenarioExecution = new ScenarioExecution();
scenarioExecution.setScenario(scenario);
HashMap<String, Object> execSharedMap = new HashMap<String, Object>();
execSharedMap.put("user_input", inputs);
scenarioExecution.setExecSharedMap(execSharedMap);
scenarioExecutionRepository.save(scenarioExecution);
List<ScenarioStep> steps = scenario.getSteps();
steps.sort(Comparator.comparingInt(ScenarioStep::getOrder));
for (ScenarioStep step : steps) {
executeScenarioStep(step, scenarioExecution, step.getOrder());
}
scenarioOutput.setStringOutput(scenarioExecution.getExecSharedMap().get("scenario_output").toString());
scenarioOutput.setStatus("OK");
return scenarioOutput;
}else{
logger.error("Scenario not found with id: " + scenarioId);
scenarioOutput.setStatus("ERROR");
scenarioOutput.setMessage("Scenario not found");
}
return scenarioOutput;
}
private void executeScenarioStep(ScenarioStep step, ScenarioExecution scenarioExecution, int stepIndex){
logger.info("Executing step: " + step.getName());
StepSolver solver=new StepSolver();
@@ -99,5 +143,4 @@ public class ScenarioExecutionService {
}
}

View File

@@ -15,7 +15,6 @@ import lombok.Setter;
public class StepSolver {
protected ScenarioExecution scenarioExecution;
protected ScenarioStep step;
protected VectorStore vectorStore;
@@ -31,5 +30,5 @@ public class StepSolver {
this.vectorStore = vectorStore;
this.chatModel = chatModel;
System.out.println("Initializing StepSolver");
};
}
}

View File

@@ -0,0 +1,16 @@
{
"folders": [
{
"path": "../../../../../../../../apollo"
},
{
"name": "hermione",
"path": "../../../../../../.."
},
{
"name": "hermione-fe",
"path": "../../../../../../../../hermione-fe"
}
],
"settings": {}
}