Merge branch 'develop' of https://dev.azure.com/olympusai/Olympus/_git/hermione into develop
This commit is contained in:
@@ -101,20 +101,27 @@ public class ScenarioController {
|
|||||||
return scenarioExecutionService.getExecutionProgress(id);
|
return scenarioExecutionService.getExecutionProgress(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@GetMapping("/scenarios/execute/{id}")
|
@GetMapping("/scenarios/execute/{id}")
|
||||||
public ScenarioExecution getScenarioExecution(@PathVariable String id) {
|
public ScenarioExecution getScenarioExecution(@PathVariable String id) {
|
||||||
return scenarioExecutionRepository.findById(id).get();
|
ScenarioExecution scenarioExecution = scenarioExecutionRepository.findById(id).get();
|
||||||
|
String apiKey = scenarioExecution.getScenario().getAiModel().getApiKey();
|
||||||
|
String endpoint = scenarioExecution.getScenario().getAiModel().getEndpoint();
|
||||||
|
List<Project> availableForProject = scenarioExecution.getScenario().getAvailableForProjects();
|
||||||
|
List<Project> availableForApplication = scenarioExecution.getScenario().getAvailableForApplications();
|
||||||
|
if (apiKey != null) {
|
||||||
|
scenarioExecution.getScenario().getAiModel().setApiKey("**********");
|
||||||
}
|
}
|
||||||
|
if (endpoint != null) {
|
||||||
@GetMapping("/executions/based")
|
scenarioExecution.getScenario().getAiModel().setEndpoint("**********");
|
||||||
public Page<ScenarioExecution> getScenarioByUser( @RequestParam(defaultValue = "0") int page,
|
|
||||||
@RequestParam(defaultValue = "10") int size,
|
|
||||||
@RequestParam(required = false) String scenarioName,
|
|
||||||
@RequestParam(required = false) String executedBy,
|
|
||||||
@RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate startDate) {
|
|
||||||
return scenarioExecutionService.getListExecutionScenarioOptional(page, size, scenarioName, executedBy, startDate);
|
|
||||||
}
|
}
|
||||||
|
if (availableForProject != null) {
|
||||||
|
scenarioExecution.getScenario().setAvailableForProjects(null);
|
||||||
|
}
|
||||||
|
if (availableForApplication != null) {
|
||||||
|
scenarioExecution.getScenario().setAvailableForApplications(null);
|
||||||
|
}
|
||||||
|
return scenarioExecution;
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping("/executions")
|
@PostMapping("/executions")
|
||||||
public Page<ScenarioExecution> getAdvancedExecutions(
|
public Page<ScenarioExecution> getAdvancedExecutions(
|
||||||
|
|||||||
@@ -19,5 +19,6 @@ public class AiModel {
|
|||||||
private Integer maxTokens;
|
private Integer maxTokens;
|
||||||
private String apiKey;
|
private String apiKey;
|
||||||
private boolean isDefault = false;
|
private boolean isDefault = false;
|
||||||
|
private boolean isCanvasDefault = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,6 +37,6 @@ public class Scenario {
|
|||||||
|
|
||||||
private boolean useChatMemory=false;
|
private boolean useChatMemory=false;
|
||||||
private String outputType;
|
private String outputType;
|
||||||
|
private boolean canvasEnabled=false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,11 @@
|
|||||||
package com.olympus.hermione.repository;
|
package com.olympus.hermione.repository;
|
||||||
|
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
import org.springframework.data.mongodb.repository.MongoRepository;
|
import org.springframework.data.mongodb.repository.MongoRepository;
|
||||||
import com.olympus.hermione.models.AiModel;
|
import com.olympus.hermione.models.AiModel;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public interface AiModelRepository extends MongoRepository<AiModel, String>{
|
public interface AiModelRepository extends MongoRepository<AiModel, String>{
|
||||||
AiModel findByIsDefault(Boolean isDefault);
|
AiModel findByIsDefault(Boolean isDefault);
|
||||||
|
AiModel findByIsCanvasDefault(Boolean isCanvasDefault);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,91 +1,115 @@
|
|||||||
package com.olympus.hermione.services;
|
package com.olympus.hermione.services;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.ai.chat.messages.Message;
|
|
||||||
import org.springframework.ai.chat.messages.SystemMessage;
|
|
||||||
import org.springframework.ai.chat.messages.UserMessage;
|
|
||||||
import org.springframework.ai.chat.model.ChatModel;
|
|
||||||
import org.springframework.ai.chat.model.Generation;
|
|
||||||
import org.springframework.ai.chat.prompt.Prompt;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import com.olympus.hermione.client.OlympusChatClient;
|
||||||
|
import com.olympus.hermione.client.AzureOpenApiChatClient;
|
||||||
|
import com.olympus.hermione.client.GoogleGeminiChatClient;
|
||||||
|
import com.olympus.hermione.client.OlympusChatClientResponse;
|
||||||
import com.olympus.hermione.dto.CanvasExecutionInput;
|
import com.olympus.hermione.dto.CanvasExecutionInput;
|
||||||
import com.olympus.hermione.dto.CanvasOutput;
|
import com.olympus.hermione.dto.CanvasOutput;
|
||||||
|
import com.olympus.hermione.models.AiModel;
|
||||||
|
import com.olympus.hermione.repository.AiModelRepository;
|
||||||
|
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class CanvasExecutionService {
|
public class CanvasExecutionService {
|
||||||
|
|
||||||
|
|
||||||
private final ChatModel chatModel;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public CanvasExecutionService(@Qualifier("openAiChatModel") ChatModel chatModel) {
|
private AiModelRepository aiModelRepository;
|
||||||
this.chatModel = chatModel;
|
|
||||||
}
|
private OlympusChatClient olympusChatClient = null;
|
||||||
|
|
||||||
private Logger logger = LoggerFactory.getLogger(CanvasExecutionService.class);
|
private Logger logger = LoggerFactory.getLogger(CanvasExecutionService.class);
|
||||||
|
|
||||||
|
public OlympusChatClient createCanvasClient(AiModelRepository aiModelRepository){
|
||||||
|
AiModel aiModel = aiModelRepository.findByIsCanvasDefault(true);
|
||||||
|
if (aiModel == null) {
|
||||||
|
logger.error("No default AI model found");
|
||||||
|
throw new IllegalArgumentException("No default AI model found");
|
||||||
|
}
|
||||||
|
if (aiModel.getApiProvider().equals("AzureOpenAI")) {
|
||||||
|
olympusChatClient = new AzureOpenApiChatClient();
|
||||||
|
}
|
||||||
|
if (aiModel.getApiProvider().equals("GoogleGemini")) {
|
||||||
|
olympusChatClient = new GoogleGeminiChatClient();
|
||||||
|
}
|
||||||
|
|
||||||
|
olympusChatClient.init(aiModel.getEndpoint(), aiModel.getApiKey(), aiModel.getMaxTokens());
|
||||||
|
|
||||||
|
return olympusChatClient;
|
||||||
|
}
|
||||||
|
|
||||||
public CanvasOutput askHermione(CanvasExecutionInput canvasExecutionInput){
|
public CanvasOutput askHermione(CanvasExecutionInput canvasExecutionInput){
|
||||||
|
try{
|
||||||
CanvasOutput canvasOutput = new CanvasOutput();
|
CanvasOutput canvasOutput = new CanvasOutput();
|
||||||
String input = canvasExecutionInput.getInput();
|
String input = canvasExecutionInput.getInput();
|
||||||
if(input != null){
|
if(input != null){
|
||||||
Message userMessage = new UserMessage(input);
|
olympusChatClient = createCanvasClient(aiModelRepository);
|
||||||
Message systemMessage = new SystemMessage("Please answer the question accurately.");
|
String userText = input;
|
||||||
Prompt prompt = new Prompt(List.of(userMessage,systemMessage));
|
String systemText = "Answer the following question: ";
|
||||||
List<Generation> response = chatModel.call(prompt).getResults();
|
OlympusChatClientResponse resp = olympusChatClient.getChatCompletion(systemText +"\n"+ userText);
|
||||||
|
|
||||||
canvasOutput.setStringOutput(response.get(0).getOutput().getText());
|
canvasOutput.setStringOutput(resp.getContent());
|
||||||
return canvasOutput;
|
return canvasOutput;
|
||||||
} else{
|
} else{
|
||||||
logger.error("Input is not correct");
|
logger.error("Input is not correct");
|
||||||
canvasOutput.setStringOutput(null);
|
canvasOutput.setStringOutput(null);
|
||||||
}
|
}
|
||||||
return canvasOutput;
|
return canvasOutput;
|
||||||
|
} catch (Exception e){
|
||||||
|
logger.error("Error in askHermione: " + e.getMessage());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public CanvasOutput rephraseText(CanvasExecutionInput canvasExecutionInput) {
|
public CanvasOutput rephraseText(CanvasExecutionInput canvasExecutionInput) {
|
||||||
|
try{
|
||||||
CanvasOutput canvasOutput = new CanvasOutput();
|
CanvasOutput canvasOutput = new CanvasOutput();
|
||||||
String input = canvasExecutionInput.getInput();
|
String input = canvasExecutionInput.getInput();
|
||||||
if(input != null){
|
if(input != null){
|
||||||
Message userMessage = new UserMessage(input);
|
olympusChatClient = createCanvasClient(aiModelRepository);
|
||||||
Message systemMessage = new SystemMessage("Please rephrase the following text: ");
|
String userText = input;
|
||||||
Prompt prompt = new Prompt(List.of(userMessage,systemMessage));
|
String systemText = "Rephrase the following text: ";
|
||||||
List<Generation> response = chatModel.call(prompt).getResults();
|
OlympusChatClientResponse resp = olympusChatClient.getChatCompletion(systemText+"\n"+userText);
|
||||||
|
|
||||||
canvasOutput.setStringOutput(response.get(0).getOutput().getText());
|
canvasOutput.setStringOutput(resp.getContent());
|
||||||
return canvasOutput;
|
return canvasOutput;
|
||||||
} else{
|
} else{
|
||||||
logger.error("Input is not correct");
|
logger.error("Input is not correct");
|
||||||
canvasOutput.setStringOutput(null);
|
canvasOutput.setStringOutput(null);
|
||||||
}
|
}
|
||||||
return canvasOutput;
|
return canvasOutput;
|
||||||
|
} catch (Exception e){
|
||||||
|
logger.error("Error in rephraseText: " + e.getMessage());
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public CanvasOutput summarizeText(CanvasExecutionInput canvasExecutionInput) {
|
public CanvasOutput summarizeText(CanvasExecutionInput canvasExecutionInput) {
|
||||||
|
try{
|
||||||
CanvasOutput canvasOutput = new CanvasOutput();
|
CanvasOutput canvasOutput = new CanvasOutput();
|
||||||
String input = canvasExecutionInput.getInput();
|
String input = canvasExecutionInput.getInput();
|
||||||
if(input != null){
|
if(input != null){
|
||||||
Message userMessage = new UserMessage(input);
|
olympusChatClient = createCanvasClient(aiModelRepository);
|
||||||
Message systemMessage = new SystemMessage("Please summarize the following text: ");
|
String userText = input;
|
||||||
Prompt prompt = new Prompt(List.of(userMessage,systemMessage));
|
String systemText = "Summarize the following text: ";
|
||||||
List<Generation> response = chatModel.call(prompt).getResults();
|
OlympusChatClientResponse resp = olympusChatClient.getChatCompletion(systemText+"\n"+userText);
|
||||||
|
|
||||||
canvasOutput.setStringOutput(response.get(0).getOutput().getText());
|
canvasOutput.setStringOutput(resp.getContent());
|
||||||
return canvasOutput;
|
return canvasOutput;
|
||||||
} else{
|
} else{
|
||||||
logger.error("Input is not correct");
|
logger.error("Input is not correct");
|
||||||
canvasOutput.setStringOutput(null);
|
canvasOutput.setStringOutput(null);
|
||||||
}
|
}
|
||||||
return canvasOutput;
|
return canvasOutput;
|
||||||
|
} catch (Exception e){
|
||||||
|
logger.error("Error in summarizeText: " + e.getMessage());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user