diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 991a8c6..3e3a22b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -9,7 +9,7 @@ build-job: image: maven:3.9.8-amazoncorretto-21-al2023 script: - echo "Building the project..." - - mvn clean install -DskipTests + - mvn clean install -DskipTests -Dmaven.repo.local=/root/.m2/repository artifacts: paths: - target/*.jar diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index 8f96f52..0000000 --- a/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1,19 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -wrapperVersion=3.3.2 -distributionType=only-script -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.7/apache-maven-3.9.7-bin.zip diff --git a/pom.xml b/pom.xml index c136ddd..0836f53 100644 --- a/pom.xml +++ b/pom.xml @@ -32,11 +32,9 @@ - - com.olympus - olympus-common - 1.0 - + + + org.springframework.boot spring-boot-starter-data-mongodb @@ -115,6 +113,12 @@ 2.8.8 + + com.olympus + olympus-common + 1.0 + + diff --git a/src/main/java/com/olympus/hermione/controllers/ScenarioController.java b/src/main/java/com/olympus/hermione/controllers/ScenarioController.java index ba6df4f..3e62c41 100644 --- a/src/main/java/com/olympus/hermione/controllers/ScenarioController.java +++ b/src/main/java/com/olympus/hermione/controllers/ScenarioController.java @@ -8,7 +8,7 @@ import org.springframework.web.bind.annotation.RestController; import com.olympus.hermione.dto.ScenarioExecutionInput; import com.olympus.hermione.dto.ScenarioOutput; -import com.olympus.models.Scenario; +import com.olympus.hermione.models.Scenario; import com.olympus.hermione.models.ScenarioExecution; import com.olympus.hermione.repository.ScenarioRepository; import com.olympus.hermione.repository.ScenarioExecutionRepository; diff --git a/src/main/java/com/olympus/hermione/dto/external/CodeRagResponse.java b/src/main/java/com/olympus/hermione/dto/external/CodeRagResponse.java deleted file mode 100644 index 8f74b81..0000000 --- a/src/main/java/com/olympus/hermione/dto/external/CodeRagResponse.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.olympus.hermione.dto.external; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -public class CodeRagResponse { - - private String fullyQualifiedName; - private String code; - private String description; - private String similarityScore; - private String documentId; - private String codeType; -} diff --git a/src/main/java/com/olympus/hermione/dto/external/SimilaritySearchCodeInput.java b/src/main/java/com/olympus/hermione/dto/external/SimilaritySearchCodeInput.java deleted file mode 100644 index 51e069a..0000000 --- a/src/main/java/com/olympus/hermione/dto/external/SimilaritySearchCodeInput.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.olympus.hermione.dto.external; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -public class SimilaritySearchCodeInput { - - private String query; - private String topK; - private String similarityThreshold; - private String filterExpression; - -} - - -/* - * .withQuery(query) - .withTopK(3) - .withSimilarityThreshold(0.8) - .withFilterExpression(b.eq("doc_type","GeneratedMethodDoc").build()) - */ \ No newline at end of file diff --git a/src/main/java/com/olympus/hermione/models/Scenario.java b/src/main/java/com/olympus/hermione/models/Scenario.java new file mode 100644 index 0000000..979216f --- /dev/null +++ b/src/main/java/com/olympus/hermione/models/Scenario.java @@ -0,0 +1,23 @@ +package com.olympus.hermione.models; + +import java.util.List; + +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; + +import lombok.Getter; +import lombok.Setter; + +@Document(collection = "scenarios") +@Getter @Setter +public class Scenario { + @Id + private String id; + private String name; + private String description; + private String startWithStepId; + private List steps; + private List inputs; + + private boolean useChatMemory=false; +} diff --git a/src/main/java/com/olympus/hermione/models/ScenarioExecution.java b/src/main/java/com/olympus/hermione/models/ScenarioExecution.java index 9ce0386..53fdac4 100644 --- a/src/main/java/com/olympus/hermione/models/ScenarioExecution.java +++ b/src/main/java/com/olympus/hermione/models/ScenarioExecution.java @@ -6,7 +6,7 @@ import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; import com.olympus.hermione.dto.ScenarioExecutionInput; -import com.olympus.models.Scenario; +import com.olympus.hermione.models.Scenario; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/com/olympus/hermione/models/ScenarioInputs.java b/src/main/java/com/olympus/hermione/models/ScenarioInputs.java new file mode 100644 index 0000000..c1cc09a --- /dev/null +++ b/src/main/java/com/olympus/hermione/models/ScenarioInputs.java @@ -0,0 +1,15 @@ +package com.olympus.hermione.models; + + + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class ScenarioInputs { + + private String name; + private String type; + private String label; +} diff --git a/src/main/java/com/olympus/hermione/models/ScenarioStep.java b/src/main/java/com/olympus/hermione/models/ScenarioStep.java new file mode 100644 index 0000000..a504bfd --- /dev/null +++ b/src/main/java/com/olympus/hermione/models/ScenarioStep.java @@ -0,0 +1,21 @@ +package com.olympus.hermione.models; + +import java.util.HashMap; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class ScenarioStep { + + private String type; + private String description; + private String name; + private int order; + + private String stepId; + private String nextStepId; + + private HashMap attributes; + +} diff --git a/src/main/java/com/olympus/hermione/models/ScenarioStepAttribute.java b/src/main/java/com/olympus/hermione/models/ScenarioStepAttribute.java new file mode 100644 index 0000000..9be25ef --- /dev/null +++ b/src/main/java/com/olympus/hermione/models/ScenarioStepAttribute.java @@ -0,0 +1,14 @@ +package com.olympus.hermione.models; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class ScenarioStepAttribute { + + private String name; + private String value; + + +} diff --git a/src/main/java/com/olympus/hermione/repository/ScenarioRepository.java b/src/main/java/com/olympus/hermione/repository/ScenarioRepository.java index b92f8cd..6500a34 100644 --- a/src/main/java/com/olympus/hermione/repository/ScenarioRepository.java +++ b/src/main/java/com/olympus/hermione/repository/ScenarioRepository.java @@ -3,7 +3,7 @@ package com.olympus.hermione.repository; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Repository; -import com.olympus.models.Scenario; +import com.olympus.hermione.models.Scenario; @Repository public interface ScenarioRepository extends CrudRepository { diff --git a/src/main/java/com/olympus/hermione/services/ScenarioExecutionService.java b/src/main/java/com/olympus/hermione/services/ScenarioExecutionService.java index 5b60c20..b92b7ff 100644 --- a/src/main/java/com/olympus/hermione/services/ScenarioExecutionService.java +++ b/src/main/java/com/olympus/hermione/services/ScenarioExecutionService.java @@ -20,9 +20,9 @@ import org.springframework.stereotype.Service; import com.olympus.hermione.dto.ScenarioExecutionInput; import com.olympus.hermione.dto.ScenarioOutput; -import com.olympus.models.Scenario; +import com.olympus.hermione.models.Scenario; import com.olympus.hermione.models.ScenarioExecution; -import com.olympus.models.ScenarioStep; +import com.olympus.hermione.models.ScenarioStep; import com.olympus.hermione.repository.ScenarioExecutionRepository; import com.olympus.hermione.repository.ScenarioRepository; import com.olympus.hermione.stepSolvers.AdvancedAIPromptSolver; @@ -218,7 +218,7 @@ public class ScenarioExecutionService { scenarioExecutionRepository.save(scenarioExecution); scenarioOutput.setScenarioExecution_id(scenarioExecution.getId()); - scenarioOutput.setStatus("IN_PROGRESS"); + scenarioOutput.setStatus("IN_PROGRESS"); } diff --git a/src/main/java/com/olympus/hermione/stepSolvers/AdvancedAIPromptSolver.java b/src/main/java/com/olympus/hermione/stepSolvers/AdvancedAIPromptSolver.java index 98e9828..8abbdc2 100644 --- a/src/main/java/com/olympus/hermione/stepSolvers/AdvancedAIPromptSolver.java +++ b/src/main/java/com/olympus/hermione/stepSolvers/AdvancedAIPromptSolver.java @@ -13,7 +13,6 @@ import com.olympus.hermione.utility.AttributeParser; import ch.qos.logback.classic.Logger; - public class AdvancedAIPromptSolver extends StepSolver { private String qai_system_prompt_template; @@ -21,6 +20,7 @@ public class AdvancedAIPromptSolver extends StepSolver { private String qai_output_variable; private boolean qai_load_graph_schema=false; private String qai_output_entityType; + private String qai_custom_memory_id; Logger logger = (Logger) LoggerFactory.getLogger(BasicQueryRagSolver.class); @@ -46,6 +46,7 @@ public class AdvancedAIPromptSolver extends StepSolver { this.qai_output_variable = (String) this.step.getAttributes().get("qai_output_variable"); this.qai_output_entityType = (String) this.step.getAttributes().get("qai_output_entityType"); + this.qai_custom_memory_id = (String) this.step.getAttributes().get("qai_custom_memory_id"); //TODO: Add memory ID attribute to have the possibility of multiple conversations } @@ -66,7 +67,8 @@ public class AdvancedAIPromptSolver extends StepSolver { CallResponseSpec resp = chatClient.prompt() .messages(userMessage,systemMessage) - .advisors(advisor -> advisor.param("chat_memory_conversation_id", this.scenarioExecution.getId()) + .advisors(advisor -> advisor + .param("chat_memory_conversation_id", this.scenarioExecution.getId()+this.qai_custom_memory_id) .param("chat_memory_response_size", 100)) .call(); diff --git a/src/main/java/com/olympus/hermione/stepSolvers/BasicAIPromptSolver.java b/src/main/java/com/olympus/hermione/stepSolvers/BasicAIPromptSolver.java index 524d6fc..9f7e805 100644 --- a/src/main/java/com/olympus/hermione/stepSolvers/BasicAIPromptSolver.java +++ b/src/main/java/com/olympus/hermione/stepSolvers/BasicAIPromptSolver.java @@ -2,6 +2,7 @@ package com.olympus.hermione.stepSolvers; import java.util.List; 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; @@ -10,7 +11,6 @@ import org.springframework.ai.chat.prompt.Prompt; import com.olympus.hermione.models.ScenarioExecution; import com.olympus.hermione.utility.AttributeParser; - import ch.qos.logback.classic.Logger; public class BasicAIPromptSolver extends StepSolver { @@ -56,12 +56,11 @@ public class BasicAIPromptSolver extends StepSolver { Message userMessage = new UserMessage(this.qai_user_input); Message systemMessage = new SystemMessage(this.qai_system_prompt_template); - Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); - - List response = chatModel.call(prompt).getResults(); - - String output = response.get(0).getOutput().getContent(); + CallResponseSpec resp = chatClient.prompt() + .messages(userMessage,systemMessage) + .call(); + String output = resp.content(); this.scenarioExecution.getExecSharedMap().put(this.qai_output_variable, output); this.scenarioExecution.setNextStepId(this.step.getNextStepId()); diff --git a/src/main/java/com/olympus/hermione/stepSolvers/SourceCodeRagSolver.java b/src/main/java/com/olympus/hermione/stepSolvers/SourceCodeRagSolver.java index 3817087..61d280b 100644 --- a/src/main/java/com/olympus/hermione/stepSolvers/SourceCodeRagSolver.java +++ b/src/main/java/com/olympus/hermione/stepSolvers/SourceCodeRagSolver.java @@ -7,10 +7,11 @@ 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.dto.external.CodeRagResponse; -import com.olympus.hermione.dto.external.SimilaritySearchCodeInput; + 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; diff --git a/src/main/java/com/olympus/hermione/stepSolvers/StepSolver.java b/src/main/java/com/olympus/hermione/stepSolvers/StepSolver.java index bc12b51..e18f343 100644 --- a/src/main/java/com/olympus/hermione/stepSolvers/StepSolver.java +++ b/src/main/java/com/olympus/hermione/stepSolvers/StepSolver.java @@ -9,7 +9,7 @@ import org.springframework.ai.vectorstore.VectorStore; import org.springframework.cloud.client.discovery.DiscoveryClient; import com.olympus.hermione.models.ScenarioExecution; -import com.olympus.models.ScenarioStep; +import com.olympus.hermione.models.ScenarioStep; import com.olympus.hermione.services.Neo4JUitilityService; public class StepSolver {