New dto
This commit is contained in:
@@ -5,16 +5,22 @@ import org.springframework.web.bind.annotation.GetMapping;
|
|||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
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.models.Scenario;
|
||||||
import com.olympus.hermione.repository.ScenarioRepository;
|
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.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
public class ScenarioController {
|
public class ScenarioController {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
ScenarioRepository scenarioRepository;
|
ScenarioRepository scenarioRepository;
|
||||||
|
@Autowired
|
||||||
|
ScenarioExecutionService scenarioExecutionService;
|
||||||
|
|
||||||
@GetMapping("/scenarios")
|
@GetMapping("/scenarios")
|
||||||
public Iterable<Scenario> getScenarios() {
|
public Iterable<Scenario> getScenarios() {
|
||||||
@@ -25,4 +31,16 @@ public class ScenarioController {
|
|||||||
public Scenario createScenario(@RequestBody Scenario scenario) {
|
public Scenario createScenario(@RequestBody Scenario scenario) {
|
||||||
return scenarioRepository.save(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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
12
src/main/java/com/olympus/hermione/dto/ScenarioOutput.java
Normal file
12
src/main/java/com/olympus/hermione/dto/ScenarioOutput.java
Normal 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;
|
||||||
|
}
|
||||||
@@ -14,5 +14,6 @@ public class Scenario {
|
|||||||
@Id
|
@Id
|
||||||
private String id;
|
private String id;
|
||||||
private String name;
|
private String name;
|
||||||
|
private String description;
|
||||||
private List<ScenarioStep> steps;
|
private List<ScenarioStep> steps;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ import org.springframework.ai.vectorstore.VectorStore;
|
|||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
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.Scenario;
|
||||||
import com.olympus.hermione.models.ScenarioExecution;
|
import com.olympus.hermione.models.ScenarioExecution;
|
||||||
import com.olympus.hermione.models.ScenarioStep;
|
import com.olympus.hermione.models.ScenarioStep;
|
||||||
@@ -74,6 +76,48 @@ public class ScenarioExecutionService {
|
|||||||
return "";
|
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){
|
private void executeScenarioStep(ScenarioStep step, ScenarioExecution scenarioExecution, int stepIndex){
|
||||||
logger.info("Executing step: " + step.getName());
|
logger.info("Executing step: " + step.getName());
|
||||||
StepSolver solver=new StepSolver();
|
StepSolver solver=new StepSolver();
|
||||||
@@ -99,5 +143,4 @@ public class ScenarioExecutionService {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ import lombok.Setter;
|
|||||||
public class StepSolver {
|
public class StepSolver {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
protected ScenarioExecution scenarioExecution;
|
protected ScenarioExecution scenarioExecution;
|
||||||
protected ScenarioStep step;
|
protected ScenarioStep step;
|
||||||
protected VectorStore vectorStore;
|
protected VectorStore vectorStore;
|
||||||
@@ -31,5 +30,5 @@ public class StepSolver {
|
|||||||
this.vectorStore = vectorStore;
|
this.vectorStore = vectorStore;
|
||||||
this.chatModel = chatModel;
|
this.chatModel = chatModel;
|
||||||
System.out.println("Initializing StepSolver");
|
System.out.println("Initializing StepSolver");
|
||||||
};
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"folders": [
|
||||||
|
{
|
||||||
|
"path": "../../../../../../../../apollo"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "hermione",
|
||||||
|
"path": "../../../../../../.."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "hermione-fe",
|
||||||
|
"path": "../../../../../../../../hermione-fe"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"settings": {}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user