From 594e6d58adeb22b876600c5f01b148445e451a76 Mon Sep 17 00:00:00 2001 From: "andrea.terzani" Date: Thu, 14 Nov 2024 15:48:36 +0100 Subject: [PATCH 1/5] Refactor error handling and logging in ApplicationBrowserService; clean up unused code in ApplicationService; streamline message handling in AdvancedAIPromptSolver and SourceCodeRagSolver --- .../services/ApplicationBrowserService.java | 24 ++++---- .../hermione/services/ApplicationService.java | 12 ---- .../services/ScenarioExecutionService.java | 2 +- .../stepSolvers/AdvancedAIPromptSolver.java | 58 ++++++------------- .../stepSolvers/SourceCodeRagSolver.java | 14 ++--- 5 files changed, 33 insertions(+), 77 deletions(-) diff --git a/src/main/java/com/olympus/hermione/services/ApplicationBrowserService.java b/src/main/java/com/olympus/hermione/services/ApplicationBrowserService.java index c2a2153..23d7345 100644 --- a/src/main/java/com/olympus/hermione/services/ApplicationBrowserService.java +++ b/src/main/java/com/olympus/hermione/services/ApplicationBrowserService.java @@ -51,21 +51,17 @@ public class ApplicationBrowserService { } public ResponseEntity getProgressRev(String processId) { - logger.info("getProgressRev function:"); - ResponseEntity responseEntity = null; + ResponseEntity responseEntity = null; - try { - // Chiama il metodo getProcessStatus e memorizza il risultato - responseEntity = javaREModule.getProcessStatus(processId); + try { + // Chiama il metodo getProcessStatus e memorizza il risultato + responseEntity = javaREModule.getProcessStatus(processId); + } catch (Exception e) { + // In caso di eccezione + logger.error("Exception in getProgressRev: {}", e.getMessage()); + } - } catch (Exception e) { - // In caso di eccezione - logger.error("Exception in getProgressRev: {}", e.getMessage()); + return responseEntity; } - - return responseEntity; -} - - -} +} \ No newline at end of file diff --git a/src/main/java/com/olympus/hermione/services/ApplicationService.java b/src/main/java/com/olympus/hermione/services/ApplicationService.java index 0d320ed..3201f48 100644 --- a/src/main/java/com/olympus/hermione/services/ApplicationService.java +++ b/src/main/java/com/olympus/hermione/services/ApplicationService.java @@ -8,10 +8,8 @@ import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; import com.olympus.hermione.repository.ApplicationRepository; -import com.olympus.hermione.repository.ProjectRepository; import com.olympus.hermione.security.entity.User; import com.olympus.model.Application; -import com.olympus.model.Project; import java.util.List; @@ -27,19 +25,9 @@ public class ApplicationService { List lstApp = null; User principal = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - // lstApp = appRepo.findByProjectId(principal.getSelectedProject()); - - //List objectIds = convertToObjectIdList(principal.getSelected_progect()); - - //List lstProject = projectRepo.findAllById(objectIds); logger.info("getListProjectByIds function:"); - /* Application all = new Application(); - all.setFE_name("ALL"); - all.setInternal_name("ALL"); - all.setId(new ObjectId("ALL")); - lstApp.add(all);*/ return lstApp; diff --git a/src/main/java/com/olympus/hermione/services/ScenarioExecutionService.java b/src/main/java/com/olympus/hermione/services/ScenarioExecutionService.java index 087497c..9761855 100644 --- a/src/main/java/com/olympus/hermione/services/ScenarioExecutionService.java +++ b/src/main/java/com/olympus/hermione/services/ScenarioExecutionService.java @@ -142,7 +142,7 @@ public class ScenarioExecutionService { scenarioExecution.setScenario(scenario); } - chatModel = createChatModel(aiModel); + ChatModel chatModel = createChatModel(aiModel); scenarioExecutionRepository.save(scenarioExecution); diff --git a/src/main/java/com/olympus/hermione/stepSolvers/AdvancedAIPromptSolver.java b/src/main/java/com/olympus/hermione/stepSolvers/AdvancedAIPromptSolver.java index 1a959fa..f94c01f 100644 --- a/src/main/java/com/olympus/hermione/stepSolvers/AdvancedAIPromptSolver.java +++ b/src/main/java/com/olympus/hermione/stepSolvers/AdvancedAIPromptSolver.java @@ -1,21 +1,17 @@ package com.olympus.hermione.stepSolvers; -import org.slf4j.LoggerFactory; -import org.springframework.ai.azure.openai.metadata.AzureOpenAiUsage; -import org.springframework.ai.chat.client.ChatClient.CallResponseSpec; -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.metadata.Usage; -import org.springframework.ai.chat.model.ChatResponse; - +import ch.qos.logback.classic.Logger; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.olympus.hermione.dto.aientity.CiaOutputEntity; import com.olympus.hermione.models.ScenarioExecution; import com.olympus.hermione.utility.AttributeParser; - -import ch.qos.logback.classic.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.ai.chat.client.ChatClient.CallResponseSpec; +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.metadata.Usage; public class AdvancedAIPromptSolver extends StepSolver { @@ -66,38 +62,18 @@ public class AdvancedAIPromptSolver extends StepSolver { String userText = this.qai_user_input; + logger.info("Using model " + chatModel.getDefaultOptions().getModel()); - CallResponseSpec resp=null; - - - if( chatModel.getDefaultOptions().getModel().contains("o1-") ){ - //Non funziona - logger.info("Using o1- model => " + chatModel.getDefaultOptions().getModel()); - - String completePrompt = this.qai_system_prompt_template + userText; - - resp = chatClient.prompt() - .messages(new UserMessage(completePrompt)) - .advisors(advisor -> advisor - .param("chat_memory_conversation_id", this.scenarioExecution.getId()+this.qai_custom_memory_id) - .param("chat_memory_response_size", 100)) - .call(); - - }else{ - logger.info("Using standard model=> " + chatModel.getDefaultOptions().getModel()); - - Message userMessage = new UserMessage(userText); - Message systemMessage = new SystemMessage(this.qai_system_prompt_template); - - resp = chatClient.prompt() - .messages(userMessage,systemMessage) - .advisors(advisor -> advisor - .param("chat_memory_conversation_id", this.scenarioExecution.getId()+this.qai_custom_memory_id) - .param("chat_memory_response_size", 100)) - .call(); - } - + Message userMessage = new UserMessage(userText); + Message systemMessage = new SystemMessage(this.qai_system_prompt_template); + CallResponseSpec resp = chatClient.prompt() + .messages(userMessage,systemMessage) + .advisors(advisor -> advisor + .param("chat_memory_conversation_id", this.scenarioExecution.getId()+this.qai_custom_memory_id) + .param("chat_memory_response_size", 100)) + .call(); + Usage usage = resp.chatResponse().getMetadata().getUsage(); diff --git a/src/main/java/com/olympus/hermione/stepSolvers/SourceCodeRagSolver.java b/src/main/java/com/olympus/hermione/stepSolvers/SourceCodeRagSolver.java index 61d280b..7d01e4e 100644 --- a/src/main/java/com/olympus/hermione/stepSolvers/SourceCodeRagSolver.java +++ b/src/main/java/com/olympus/hermione/stepSolvers/SourceCodeRagSolver.java @@ -2,18 +2,14 @@ package com.olympus.hermione.stepSolvers; +import ch.qos.logback.classic.Logger; +import com.olympus.dto.CodeRagResponse; +import com.olympus.dto.SimilaritySearchCodeInput; +import com.olympus.hermione.models.ScenarioExecution; +import com.olympus.hermione.utility.AttributeParser; import org.slf4j.LoggerFactory; import org.springframework.cloud.client.ServiceInstance; import org.springframework.web.client.RestTemplate; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.ObjectWriter; - -import com.olympus.hermione.models.ScenarioExecution; -import com.olympus.hermione.utility.AttributeParser; -import com.olympus.dto.CodeRagResponse; -import com.olympus.dto.SimilaritySearchCodeInput; - -import ch.qos.logback.classic.Logger; public class SourceCodeRagSolver extends StepSolver { From be8b51d4044dfff704e5d0bd931286080f62358c Mon Sep 17 00:00:00 2001 From: "andrea.terzani" Date: Thu, 14 Nov 2024 15:58:21 +0100 Subject: [PATCH 2/5] Rimuovi il log del modello utilizzato in AdvancedAIPromptSolver --- .../olympus/hermione/stepSolvers/AdvancedAIPromptSolver.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/com/olympus/hermione/stepSolvers/AdvancedAIPromptSolver.java b/src/main/java/com/olympus/hermione/stepSolvers/AdvancedAIPromptSolver.java index f94c01f..b38858f 100644 --- a/src/main/java/com/olympus/hermione/stepSolvers/AdvancedAIPromptSolver.java +++ b/src/main/java/com/olympus/hermione/stepSolvers/AdvancedAIPromptSolver.java @@ -61,8 +61,6 @@ public class AdvancedAIPromptSolver extends StepSolver { loadParameters(); String userText = this.qai_user_input; - - logger.info("Using model " + chatModel.getDefaultOptions().getModel()); Message userMessage = new UserMessage(userText); Message systemMessage = new SystemMessage(this.qai_system_prompt_template); From 30bf8e727e449dcdf80e82c616cdcb8c46c500a7 Mon Sep 17 00:00:00 2001 From: Andrea Terzani Date: Fri, 15 Nov 2024 12:16:08 +0000 Subject: [PATCH 3/5] Updated AdvancedAIPromptSolver.java --- .../olympus/hermione/stepSolvers/AdvancedAIPromptSolver.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/olympus/hermione/stepSolvers/AdvancedAIPromptSolver.java b/src/main/java/com/olympus/hermione/stepSolvers/AdvancedAIPromptSolver.java index b38858f..7e9dcf5 100644 --- a/src/main/java/com/olympus/hermione/stepSolvers/AdvancedAIPromptSolver.java +++ b/src/main/java/com/olympus/hermione/stepSolvers/AdvancedAIPromptSolver.java @@ -73,14 +73,14 @@ public class AdvancedAIPromptSolver extends StepSolver { .call(); - Usage usage = resp.chatResponse().getMetadata().getUsage(); + /*Usage usage = resp.chatResponse().getMetadata().getUsage(); if (usage != null) { Long usedTokens = usage.getTotalTokens(); this.scenarioExecution.setUsedTokens(usedTokens); } else { logger.info("Token usage information is not available."); - } + }*/ if(qai_output_entityType!=null && qai_output_entityType.equals("CiaOutputEntity")){ logger.info("Output is of type CiaOutputEntity"); From 5179bad78a622e0fc743981221c0cb03f98d3938 Mon Sep 17 00:00:00 2001 From: Andrea Terzani Date: Fri, 15 Nov 2024 12:16:48 +0000 Subject: [PATCH 4/5] Updated hermione-deployment.yaml --- manifests/hermione-deployment.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/manifests/hermione-deployment.yaml b/manifests/hermione-deployment.yaml index 80f9da4..9ae12c5 100644 --- a/manifests/hermione-deployment.yaml +++ b/manifests/hermione-deployment.yaml @@ -21,5 +21,7 @@ spec: name: olympus-db-shared-cfg - configMapRef: name: olympus-common-shared-cfg + - configMapRef: + name: olympus-ai-shared-cfg resources: {} imagePullPolicy: Always \ No newline at end of file From 202bb8a5e1e33030130d1a3f8d02af2e6cc81e97 Mon Sep 17 00:00:00 2001 From: Emanuele Ferrelli Date: Fri, 15 Nov 2024 16:45:45 +0100 Subject: [PATCH 5/5] fixed usedTokens count --- .../services/ScenarioExecutionService.java | 8 +++----- .../stepSolvers/AdvancedAIPromptSolver.java | 18 ++++++++---------- .../stepSolvers/BasicAIPromptSolver.java | 3 ++- 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/olympus/hermione/services/ScenarioExecutionService.java b/src/main/java/com/olympus/hermione/services/ScenarioExecutionService.java index 9761855..a3240de 100644 --- a/src/main/java/com/olympus/hermione/services/ScenarioExecutionService.java +++ b/src/main/java/com/olympus/hermione/services/ScenarioExecutionService.java @@ -177,17 +177,14 @@ public class ScenarioExecutionService { executeScenarioStep(startStep, scenarioExecution); Long usedTokens = (scenarioExecution.getUsedTokens() != null) ? scenarioExecution.getUsedTokens() : Long.valueOf(0); - scenarioExecution.setUsedTokens(usedTokens); - scenarioExecutionRepository.save(scenarioExecution); - while (scenarioExecution.getNextStepId()!=null) { ScenarioStep step = steps.stream().filter(s -> s.getStepId().equals(scenarioExecution.getNextStepId())).findFirst().orElse(null); executeScenarioStep(step, scenarioExecution); if (scenarioExecution.getUsedTokens() != null && scenarioExecution.getUsedTokens() != 0) { usedTokens += scenarioExecution.getUsedTokens(); - scenarioExecution.setUsedTokens(usedTokens); - scenarioExecutionRepository.save(scenarioExecution); + + scenarioExecution.setUsedTokens(Long.valueOf(0)); //resetting value for next step if is not an AI step } if(scenarioExecution.getLatestStepStatus() != null && scenarioExecution.getLatestStepStatus().equals("ERROR")){ @@ -196,6 +193,7 @@ public class ScenarioExecutionService { } } + scenarioExecution.setUsedTokens(usedTokens); scenarioExecution.setEndDate(new java.util.Date()); scenarioExecutionRepository.save(scenarioExecution); } diff --git a/src/main/java/com/olympus/hermione/stepSolvers/AdvancedAIPromptSolver.java b/src/main/java/com/olympus/hermione/stepSolvers/AdvancedAIPromptSolver.java index 7e9dcf5..d3d9d70 100644 --- a/src/main/java/com/olympus/hermione/stepSolvers/AdvancedAIPromptSolver.java +++ b/src/main/java/com/olympus/hermione/stepSolvers/AdvancedAIPromptSolver.java @@ -72,16 +72,6 @@ public class AdvancedAIPromptSolver extends StepSolver { .param("chat_memory_response_size", 100)) .call(); - - /*Usage usage = resp.chatResponse().getMetadata().getUsage(); - - if (usage != null) { - Long usedTokens = usage.getTotalTokens(); - this.scenarioExecution.setUsedTokens(usedTokens); - } else { - logger.info("Token usage information is not available."); - }*/ - if(qai_output_entityType!=null && qai_output_entityType.equals("CiaOutputEntity")){ logger.info("Output is of type CiaOutputEntity"); @@ -99,6 +89,14 @@ public class AdvancedAIPromptSolver extends StepSolver { String output = resp.content(); this.scenarioExecution.getExecSharedMap().put(this.qai_output_variable, output); } + + Usage usage = resp.chatResponse().getMetadata().getUsage(); + if (usage != null) { + Long usedTokens = usage.getTotalTokens(); + this.scenarioExecution.setUsedTokens(usedTokens); + } else { + logger.info("Token usage information is not available."); + } this.scenarioExecution.setNextStepId(this.step.getNextStepId()); diff --git a/src/main/java/com/olympus/hermione/stepSolvers/BasicAIPromptSolver.java b/src/main/java/com/olympus/hermione/stepSolvers/BasicAIPromptSolver.java index 5ab8ad2..65874b0 100644 --- a/src/main/java/com/olympus/hermione/stepSolvers/BasicAIPromptSolver.java +++ b/src/main/java/com/olympus/hermione/stepSolvers/BasicAIPromptSolver.java @@ -61,6 +61,8 @@ public class BasicAIPromptSolver extends StepSolver { .messages(userMessage,systemMessage) .call(); + String output = resp.content(); + Usage usage = resp.chatResponse().getMetadata().getUsage(); if (usage != null) { Long usedTokens = usage.getTotalTokens(); @@ -69,7 +71,6 @@ public class BasicAIPromptSolver extends StepSolver { logger.info("Token usage information is not available."); } - String output = resp.content(); this.scenarioExecution.getExecSharedMap().put(this.qai_output_variable, output); this.scenarioExecution.setNextStepId(this.step.getNextStepId());