From b5cc9db88a89356917fc876955ab9a80b5674e5f Mon Sep 17 00:00:00 2001 From: Craig Walls Date: Thu, 27 Jun 2024 17:20:14 -0600 Subject: [PATCH] Accept response as a String instead of ChatResponse in EvaluationRequest - Update docs --- .../ai/evaluation/EvaluationRequest.java | 17 ++++++++--------- .../ai/evaluation/RelevancyEvaluator.java | 6 +----- .../antora/modules/ROOT/pages/api/testing.adoc | 16 ++++++++-------- 3 files changed, 17 insertions(+), 22 deletions(-) diff --git a/spring-ai-core/src/main/java/org/springframework/ai/evaluation/EvaluationRequest.java b/spring-ai-core/src/main/java/org/springframework/ai/evaluation/EvaluationRequest.java index 1beb2a5df..40c043bc0 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/evaluation/EvaluationRequest.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/evaluation/EvaluationRequest.java @@ -1,6 +1,5 @@ package org.springframework.ai.evaluation; -import org.springframework.ai.chat.model.ChatResponse; import org.springframework.ai.model.Content; import java.util.List; @@ -20,12 +19,12 @@ public class EvaluationRequest { private final List dataList; - private final ChatResponse chatResponse; + private final String responseContent; - public EvaluationRequest(String userText, List dataList, ChatResponse chatResponse) { + public EvaluationRequest(String userText, List dataList, String responseContent) { this.userText = userText; this.dataList = dataList; - this.chatResponse = chatResponse; + this.responseContent = responseContent; } public String getUserText() { @@ -36,14 +35,14 @@ public class EvaluationRequest { return dataList; } - public ChatResponse getChatResponse() { - return chatResponse; + public String getResponseContent() { + return responseContent; } @Override public String toString() { return "EvaluationRequest{" + "userText='" + userText + '\'' + ", dataList=" + dataList + ", chatResponse=" - + chatResponse + '}'; + + responseContent + '}'; } @Override @@ -53,12 +52,12 @@ public class EvaluationRequest { if (!(o instanceof EvaluationRequest that)) return false; return Objects.equals(userText, that.userText) && Objects.equals(dataList, that.dataList) - && Objects.equals(chatResponse, that.chatResponse); + && Objects.equals(responseContent, that.responseContent); } @Override public int hashCode() { - return Objects.hash(userText, dataList, chatResponse); + return Objects.hash(userText, dataList, responseContent); } } diff --git a/spring-ai-core/src/main/java/org/springframework/ai/evaluation/RelevancyEvaluator.java b/spring-ai-core/src/main/java/org/springframework/ai/evaluation/RelevancyEvaluator.java index 650e32bd2..c912854b2 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/evaluation/RelevancyEvaluator.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/evaluation/RelevancyEvaluator.java @@ -30,7 +30,7 @@ public class RelevancyEvaluator implements Evaluator { @Override public EvaluationResponse evaluate(EvaluationRequest evaluationRequest) { - var response = doGetResponse(evaluationRequest); + var response = evaluationRequest.getResponseContent(); var context = doGetSupportingData(evaluationRequest); String evaluationResponse = this.chatClientBuilder.build() @@ -52,10 +52,6 @@ public class RelevancyEvaluator implements Evaluator { return new EvaluationResponse(passing, score, "", Collections.emptyMap()); } - protected String doGetResponse(EvaluationRequest evaluationRequest) { - return evaluationRequest.getChatResponse().getResult().getOutput().getContent(); - } - protected String doGetSupportingData(EvaluationRequest evaluationRequest) { List data = evaluationRequest.getDataList(); String supportingData = data.stream() diff --git a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/testing.adoc b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/testing.adoc index 9836a56d1..df6a6fffd 100644 --- a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/testing.adoc +++ b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/testing.adoc @@ -26,21 +26,21 @@ public class EvaluationRequest { private final List dataList; - private final ChatResponse chatResponse; + private final String responseContent; - public EvaluationRequest(String userText, List dataList, ChatResponse chatResponse) { + public EvaluationRequest(String userText, List dataList, String responseContent) { this.userText = userText; this.dataList = dataList; - this.chatResponse = chatResponse; + this.responseContent = responseContent; } ... } ---- -* `userText`: The raw input from the user. +* `userText`: The raw input from the user as a `String` * `dataList`: Contextual data, such as from Retrieval Augmented Generation, appended to the raw input. -* `chatResponse`: The AI model's response. +* `responseContent`: The AI model's response content as a `String` == RelevancyEvaluator @@ -73,17 +73,17 @@ void testEvaluation() { String userText = "What is the purpose of Carina?"; - ChatResponse response = ChatClient.builder(chatModel) + String responseContent = ChatClient.builder(chatModel) .build().prompt() .advisors(new QuestionAnswerAdvisor(vectorStore, SearchRequest.defaults())) .user(userText) .call() - .chatResponse(); + .content(); var relevancyEvaluator = new RelevancyEvaluator(ChatClient.builder(chatModel)); EvaluationRequest evaluationRequest = new EvaluationRequest(userText, - (List) response.getMetadata().get(QuestionAnswerAdvisor.RETRIEVED_DOCUMENTS), response); + (List) response.getMetadata().get(QuestionAnswerAdvisor.RETRIEVED_DOCUMENTS), responseContent); EvaluationResponse evaluationResponse = relevancyEvaluator.evaluate(evaluationRequest);