This commit is contained in:
Florinda
2024-10-10 11:13:13 +02:00
17 changed files with 102 additions and 81 deletions

View File

@@ -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

View File

@@ -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

14
pom.xml
View File

@@ -32,11 +32,9 @@
</properties>
<dependencies>
<dependency>
<groupId>com.olympus</groupId>
<artifactId>olympus-common</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
@@ -115,6 +113,12 @@
<version>2.8.8</version>
</dependency>
<dependency>
<groupId>com.olympus</groupId>
<artifactId>olympus-common</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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())
*/

View File

@@ -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<ScenarioStep> steps;
private List<ScenarioInputs> inputs;
private boolean useChatMemory=false;
}

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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<String,Object> attributes;
}

View File

@@ -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;
}

View File

@@ -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<Scenario, String> {

View File

@@ -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");
}

View File

@@ -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();

View File

@@ -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<Generation> 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());

View File

@@ -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;

View File

@@ -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 {