From 1af362a6cbb78018b6b36d819ad4f2eb85f4cf92 Mon Sep 17 00:00:00 2001 From: Nourhan Shata Date: Wed, 23 Jul 2025 16:35:24 +0200 Subject: [PATCH 1/8] Creation of the ete test as well as fixing the empty tools array bug. --- .../openai/OpenAiAssistantMessage.java | 3 ++- .../ai/sdk/app/services/OpenAiService.java | 26 +++++++++++++++++++ .../ai/sdk/app/controllers/OpenAiTest.java | 5 ++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiAssistantMessage.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiAssistantMessage.java index e36646f0e..d2edc094e 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiAssistantMessage.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiAssistantMessage.java @@ -72,7 +72,8 @@ public class OpenAiAssistantMessage implements OpenAiMessage { ChatCompletionRequestAssistantMessage createChatCompletionRequestMessage() { final var message = new ChatCompletionRequestAssistantMessage() - .role(ChatCompletionRequestAssistantMessage.RoleEnum.fromValue(role())); + .role(ChatCompletionRequestAssistantMessage.RoleEnum.fromValue(role())) + .toolCalls(null); final var items = content().items(); if (!items.isEmpty() && items.get(0) instanceof OpenAiTextItem textItem) { diff --git a/sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/services/OpenAiService.java b/sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/services/OpenAiService.java index 13400d059..c0a15a890 100644 --- a/sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/services/OpenAiService.java +++ b/sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/services/OpenAiService.java @@ -11,7 +11,10 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.module.jsonSchema.JsonSchemaGenerator; import com.sap.ai.sdk.core.AiCoreService; +import com.sap.ai.sdk.foundationmodels.openai.OpenAiChatCompletionRequest; +import com.sap.ai.sdk.foundationmodels.openai.OpenAiChatCompletionResponse; import com.sap.ai.sdk.foundationmodels.openai.OpenAiClient; +import com.sap.ai.sdk.foundationmodels.openai.OpenAiMessage; import com.sap.ai.sdk.foundationmodels.openai.model.OpenAiChatCompletionDelta; import com.sap.ai.sdk.foundationmodels.openai.model.OpenAiChatCompletionFunction; import com.sap.ai.sdk.foundationmodels.openai.model.OpenAiChatCompletionOutput; @@ -27,6 +30,7 @@ import java.util.stream.Stream; import javax.annotation.Nonnull; import lombok.extern.slf4j.Slf4j; +import lombok.val; import org.springframework.stereotype.Service; /** Service class for OpenAI service */ @@ -46,6 +50,28 @@ public OpenAiChatCompletionOutput chatCompletion(@Nonnull final String prompt) { return OpenAiClient.forModel(GPT_4O_MINI).chatCompletion(prompt); } + /** + * Chat request to OpenAI + * + * @param previousMessage The request to send to the assistant + * @return the assistant message response + */ + @Nonnull + public OpenAiChatCompletionResponse messagesHistory(@Nonnull final String previousMessage) { + val messagesList = new ArrayList(); + messagesList.add(OpenAiMessage.user(previousMessage)); + + final OpenAiChatCompletionResponse result = + OpenAiClient.forModel(GPT_4O_MINI) + .chatCompletion(new OpenAiChatCompletionRequest(messagesList)); + + messagesList.add(result.getMessage()); + messagesList.add(OpenAiMessage.user("What is the typical food there?")); + + return OpenAiClient.forModel(GPT_4O_MINI) + .chatCompletion(new OpenAiChatCompletionRequest(messagesList)); + } + /** * Asynchronous stream of an OpenAI chat request * diff --git a/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/OpenAiTest.java b/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/OpenAiTest.java index 7a029ebdd..29ceb5e75 100644 --- a/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/OpenAiTest.java +++ b/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/OpenAiTest.java @@ -31,6 +31,11 @@ void chatCompletion() { assertThat(message.getContent()).isNotEmpty(); } + @Test + void testMessagesHistory() { + assertThat(service.messagesHistory("What is the capital of France?").getContent()).isNotEmpty(); + } + @Test void chatCompletionImage() { final var completion = From c2939f41fa649628dc71baca892119a611089969 Mon Sep 17 00:00:00 2001 From: Nourhan Shata Date: Thu, 24 Jul 2025 13:15:19 +0200 Subject: [PATCH 2/8] Editing the release notes as well as index.html file of fix: Bug OpenAI AssistantMessage #511 pull request. --- docs/release_notes.md | 2 +- .../spring-app/src/main/resources/static/index.html | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/release_notes.md b/docs/release_notes.md index 5745d6681..31859989e 100644 --- a/docs/release_notes.md +++ b/docs/release_notes.md @@ -20,4 +20,4 @@ ### 🐛 Fixed Issues -- +- OpenAi: Fix AssistantMessage Bug by now being able to send Assistant Messages using our API Client. diff --git a/sample-code/spring-app/src/main/resources/static/index.html b/sample-code/spring-app/src/main/resources/static/index.html index 1e807a880..4af787cf0 100644 --- a/sample-code/spring-app/src/main/resources/static/index.html +++ b/sample-code/spring-app/src/main/resources/static/index.html @@ -589,6 +589,17 @@
OpenAI
+
  • +
    + +
    + Chat request to OpenAI using message history. +
    +
    +
  • -
  • -
    - -
    - Chat request to OpenAI using message history. -
    -
    -