Aggiungi supporto per temperatura personalizzata e strumenti nel solver AI

This commit is contained in:
Andrea Terzani
2025-07-09 11:43:04 +02:00
parent 170c5515eb
commit a0b84fedd5

View File

@@ -2,9 +2,11 @@ package com.olympus.hermione.stepSolvers;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.ai.chat.client.ChatClient.CallResponseSpec; import org.springframework.ai.chat.client.ChatClient.CallResponseSpec;
import org.springframework.ai.chat.client.ChatClient.ChatClientRequestSpec;
import org.springframework.ai.chat.memory.ChatMemory; import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.metadata.Usage; import org.springframework.ai.chat.metadata.Usage;
import org.springframework.ai.chat.model.ChatResponse; import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.prompt.ChatOptions;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
@@ -23,7 +25,11 @@ public class AdvancedAIPromptSolver extends StepSolver {
private String qai_output_entityType; private String qai_output_entityType;
private String qai_custom_memory_id; private String qai_custom_memory_id;
private String qai_available_tools; private String qai_available_tools;
private String qai_custom_temperaure;
private String qai_custom_max_tokens;
private double customTemperature = 0.7;
Logger logger = (Logger) LoggerFactory.getLogger(AdvancedAIPromptSolver.class); Logger logger = (Logger) LoggerFactory.getLogger(AdvancedAIPromptSolver.class);
private void loadParameters(){ private void loadParameters(){
@@ -61,6 +67,17 @@ public class AdvancedAIPromptSolver extends StepSolver {
this.qai_available_tools = (String) this.step.getAttributes().get("qai_available_tools"); this.qai_available_tools = (String) this.step.getAttributes().get("qai_available_tools");
logger.info("qai_available_tools: {}", this.qai_available_tools); logger.info("qai_available_tools: {}", this.qai_available_tools);
this.qai_custom_temperaure = (String) this.step.getAttributes().get("qai_custom_temperature");
if(this.qai_custom_temperaure !=null && !this.qai_custom_temperaure.isEmpty()){
logger.info("qai_custom_temperature: {}", this.qai_custom_temperaure);
customTemperature = Double.parseDouble(this.qai_custom_temperaure);
logger.info("Custom temperature set to: {}", customTemperature);
} else {
logger.info("qai_custom_temperature not specified, using default value of 0.7");
}
} }
@Override @Override
@@ -130,24 +147,34 @@ public class AdvancedAIPromptSolver extends StepSolver {
} else { } else {
logger.info("No tools specified or available"); logger.info("No tools specified or available");
} }
CallResponseSpec resp=null; CallResponseSpec resp=null;
if(tools==null){ ChatClientRequestSpec requestSpec = null;
logger.info("No tools available, calling chatClient without tools");
resp = chatClient.prompt() requestSpec = chatClient.prompt()
.user(this.qai_user_input) .user(this.qai_user_input)
.system(this.qai_system_prompt_template) .system(this.qai_system_prompt_template)
.advisors(advisor -> advisor.param(ChatMemory.CONVERSATION_ID, this.scenarioExecution.getId()+this.qai_custom_memory_id)) .advisors(advisor -> advisor.param(ChatMemory.CONVERSATION_ID, this.scenarioExecution.getId()+this.qai_custom_memory_id));
.call();
}else{ if(tools!=null){
logger.info("Calling chatClient with tools: {}", tools.getClass().getName()); logger.info("Calling chatClient with tools: {}", tools.getClass().getName());
resp = chatClient.prompt() requestSpec = requestSpec.tools(tools);
.user(this.qai_user_input)
.system(this.qai_system_prompt_template)
.advisors(advisor -> advisor
.param(ChatMemory.CONVERSATION_ID, this.scenarioExecution.getId()+this.qai_custom_memory_id))
.tools(tools)
.call();
} }
if(this.qai_custom_temperaure!=null){
logger.info("Setting custom temperature: {}", this.qai_custom_temperaure);
ChatOptions chatOptions = ChatOptions.builder()
.temperature(customTemperature)
.build();
requestSpec = requestSpec.options(chatOptions);
}
resp = requestSpec.call();
ChatResponse response = null; ChatResponse response = null;
if(qai_output_entityType!=null && qai_output_entityType.equals("CiaOutputEntity")){ if(qai_output_entityType!=null && qai_output_entityType.equals("CiaOutputEntity")){
logger.info("Output is of type CiaOutputEntity"); logger.info("Output is of type CiaOutputEntity");