Skip to content

Commit 6a6dece

Browse files
committed
Fix tests
1 parent 818917a commit 6a6dece

9 files changed

+57
-22
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// Copyright (c) Microsoft. All rights reserved.
2+
package com.microsoft.semantickernel.aiservices.openai.chatcompletion;
3+
4+
import com.azure.core.util.BinaryData;
5+
import javax.annotation.Nullable;
6+
7+
public class BinaryDataUtils {
8+
9+
@Nullable
10+
public static String toString(@Nullable BinaryData b) {
11+
if (b == null) {
12+
return null;
13+
}
14+
return b.toString();
15+
}
16+
}

aiservices/openai/src/main/java/com/microsoft/semantickernel/aiservices/openai/chatcompletion/OpenAIChatCompletion.java

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.azure.ai.openai.models.ChatCompletions;
77
import com.azure.ai.openai.models.ChatCompletionsFunctionToolCall;
88
import com.azure.ai.openai.models.ChatCompletionsFunctionToolDefinition;
9+
import com.azure.ai.openai.models.ChatCompletionsFunctionToolDefinitionFunction;
910
import com.azure.ai.openai.models.ChatCompletionsJsonResponseFormat;
1011
import com.azure.ai.openai.models.ChatCompletionsNamedToolSelection;
1112
import com.azure.ai.openai.models.ChatCompletionsOptions;
@@ -26,6 +27,7 @@
2627
import com.azure.ai.openai.models.ChatResponseMessage;
2728
import com.azure.ai.openai.models.CompletionsUsage;
2829
import com.azure.ai.openai.models.FunctionCall;
30+
import com.azure.ai.openai.models.FunctionDefinition;
2931
import com.azure.json.JsonOptions;
3032
import com.azure.json.implementation.DefaultJsonReader;
3133
import com.fasterxml.jackson.core.JsonProcessingException;
@@ -734,7 +736,8 @@ private List<ChatMessageContent<?>> toOpenAIChatMessageContent(
734736
if (message instanceof ChatRequestUserMessage) {
735737
return new OpenAIChatMessageContent<>(
736738
AuthorRole.USER,
737-
((ChatRequestUserMessage) message).getContent().toString(),
739+
BinaryDataUtils
740+
.toString(((ChatRequestUserMessage) message).getContent()),
738741
null,
739742
null,
740743
null,
@@ -743,7 +746,8 @@ private List<ChatMessageContent<?>> toOpenAIChatMessageContent(
743746
} else if (message instanceof ChatRequestSystemMessage) {
744747
return new OpenAIChatMessageContent<>(
745748
AuthorRole.SYSTEM,
746-
((ChatRequestSystemMessage) message).getContent(),
749+
BinaryDataUtils
750+
.toString(((ChatRequestSystemMessage) message).getContent()),
747751
null,
748752
null,
749753
null,
@@ -755,7 +759,8 @@ private List<ChatMessageContent<?>> toOpenAIChatMessageContent(
755759
((ChatRequestAssistantMessage) message).getToolCalls());
756760
return new OpenAIChatMessageContent<>(
757761
AuthorRole.ASSISTANT,
758-
((ChatRequestAssistantMessage) message).getContent(),
762+
BinaryDataUtils
763+
.toString(((ChatRequestAssistantMessage) message).getContent()),
759764
null,
760765
null,
761766
null,
@@ -767,7 +772,8 @@ private List<ChatMessageContent<?>> toOpenAIChatMessageContent(
767772
} else if (message instanceof ChatRequestToolMessage) {
768773
return new OpenAIChatMessageContent<>(
769774
AuthorRole.TOOL,
770-
((ChatRequestToolMessage) message).getContent(),
775+
BinaryDataUtils
776+
.toString(((ChatRequestToolMessage) message).getContent()),
771777
null,
772778
null,
773779
null,
@@ -966,10 +972,14 @@ private static void configureToolCallBehaviorOptions(
966972

967973
List<ChatCompletionsToolDefinition> toolDefinitions = new ArrayList<>();
968974

975+
FunctionDefinition function = OpenAIFunction.toFunctionDefinition(
976+
toolChoice.getMetadata(),
977+
toolChoice.getPluginName());
978+
969979
toolDefinitions.add(new ChatCompletionsFunctionToolDefinition(
970-
OpenAIFunction.toFunctionDefinition(
971-
toolChoice.getMetadata(),
972-
toolChoice.getPluginName())));
980+
new ChatCompletionsFunctionToolDefinitionFunction(function.getName())
981+
.setDescription(function.getDescription())
982+
.setParameters(function.getParameters())));
973983

974984
options.setTools(toolDefinitions);
975985
try {
@@ -1003,7 +1013,10 @@ private static void configureToolCallBehaviorOptions(
10031013
function.getName());
10041014
})
10051015
.map(OpenAIFunction::getFunctionDefinition)
1006-
.map(ChatCompletionsFunctionToolDefinition::new)
1016+
.map(it -> new ChatCompletionsFunctionToolDefinitionFunction(it.getName())
1017+
.setDescription(it.getDescription())
1018+
.setParameters(it.getParameters()))
1019+
.map(it -> new ChatCompletionsFunctionToolDefinition(it))
10071020
.collect(Collectors.toList());
10081021

10091022
if (toolDefinitions.isEmpty()) {

aiservices/openai/src/main/java/com/microsoft/semantickernel/aiservices/openai/chatcompletion/OpenAiXMLPromptParser.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,19 +118,23 @@ public static ChatRequestMessage unescapeRequest(ChatRequestMessage message) {
118118
if (message instanceof ChatRequestUserMessage) {
119119
ChatRequestUserMessage chatRequestMessage = (ChatRequestUserMessage) message;
120120
String content = StringEscapeUtils.unescapeXml(
121-
chatRequestMessage.getContent().toString());
121+
BinaryDataUtils.toString(chatRequestMessage.getContent()));
122122

123123
return new ChatRequestUserMessage(content)
124124
.setName(chatRequestMessage.getName());
125125
} else if (message instanceof ChatRequestSystemMessage) {
126126
ChatRequestSystemMessage chatRequestMessage = (ChatRequestSystemMessage) message;
127-
String content = StringEscapeUtils.unescapeXml(chatRequestMessage.getContent());
127+
String content = StringEscapeUtils
128+
.unescapeXml(
129+
BinaryDataUtils.toString(chatRequestMessage.getContent()));
128130

129131
return new ChatRequestSystemMessage(content)
130132
.setName(chatRequestMessage.getName());
131133
} else if (message instanceof ChatRequestAssistantMessage) {
132134
ChatRequestAssistantMessage chatRequestMessage = (ChatRequestAssistantMessage) message;
133-
String content = StringEscapeUtils.unescapeXml(chatRequestMessage.getContent());
135+
String content = StringEscapeUtils
136+
.unescapeXml(
137+
BinaryDataUtils.toString(chatRequestMessage.getContent()));
134138

135139
return new ChatRequestAssistantMessage(content)
136140
.setToolCalls(chatRequestMessage.getToolCalls())
@@ -145,7 +149,9 @@ public static ChatRequestMessage unescapeRequest(ChatRequestMessage message) {
145149
content);
146150
} else if (message instanceof ChatRequestToolMessage) {
147151
ChatRequestToolMessage chatRequestMessage = (ChatRequestToolMessage) message;
148-
String content = StringEscapeUtils.unescapeXml(chatRequestMessage.getContent());
152+
String content = StringEscapeUtils
153+
.unescapeXml(
154+
BinaryDataUtils.toString(chatRequestMessage.getContent()));
149155

150156
return new ChatRequestToolMessage(
151157
content,

api-test/integration-tests/src/test/java/com/microsoft/semantickernel/tests/RenderingTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -240,10 +240,10 @@ public void canHandleIterableReturnFromFunction() {
240240
.block();
241241

242242
String requestBody = wm.getAllServeEvents().get(0).getRequest().getBodyAsString();
243-
Assertions.assertTrue(requestBody.contains("{\"content\":\"[]"));
244-
Assertions.assertTrue(requestBody.contains("{\"content\":\"[1, 2, 3]"));
245-
Assertions.assertTrue(requestBody.contains("{\"content\":\"[4, 5, 6]"));
246-
Assertions.assertTrue(requestBody.contains("{\"content\":\"[7, 8, 9]"));
243+
Assertions.assertTrue(requestBody.contains("\"content\":\"[]"));
244+
Assertions.assertTrue(requestBody.contains("\"content\":\"[1, 2, 3]"));
245+
Assertions.assertTrue(requestBody.contains("\"content\":\"[4, 5, 6]"));
246+
Assertions.assertTrue(requestBody.contains("\"content\":\"[7, 8, 9]"));
247247
}
248248

249249
private Kernel buildTextKernel() {

api-test/integration-tests/src/test/java/com/microsoft/semantickernel/tests/ToolCallBehaviourTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ private ChatCompletionService getChatCompletionService() {
282282

283283
public static MappingBuilder buildTextResponse(String bodyMatcher, String responseBody) {
284284
return post(urlEqualTo(
285-
"//openai/deployments/gpt-35-turbo-2/completions?api-version=2024-07-01-preview"))
285+
"//openai/deployments/gpt-35-turbo-2/completions?api-version=2024-08-01-preview"))
286286
.withRequestBody(new ContainsPattern(bodyMatcher))
287287
.willReturn(
288288
aResponse()
@@ -293,7 +293,7 @@ public static MappingBuilder buildTextResponse(String bodyMatcher, String respon
293293

294294
public static MappingBuilder buildResponse(String bodyMatcher, String responseBody) {
295295
return post(urlEqualTo(
296-
"//openai/deployments/gpt-35-turbo-2/chat/completions?api-version=2024-07-01-preview"))
296+
"//openai/deployments/gpt-35-turbo-2/chat/completions?api-version=2024-08-01-preview"))
297297
.withRequestBody(new ContainsPattern(bodyMatcher))
298298
.willReturn(
299299
aResponse()

api-test/integration-tests/src/test/resources/wiremock/mappings/deployments_gpt-35-turbo-2_chat_completions-12b6744e-443f-4fe7-82e2-55cc41195ff1.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"priority": 1,
33
"request": {
44
"method": "POST",
5-
"url": "//openai/deployments/gpt-35-turbo-2/chat/completions?api-version=2024-07-01-preview",
5+
"url": "//openai/deployments/gpt-35-turbo-2/chat/completions?api-version=2024-08-01-preview",
66
"bodyPatterns": [
77
{
88
"contains": "That is all"

api-test/integration-tests/src/test/resources/wiremock/mappings/deployments_gpt-35-turbo-2_chat_completions-71b07779-49a8-44e5-a60b-ee5b0a3ad697.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"request": {
33
"method": "POST",
4-
"url": "//openai/deployments/gpt-35-turbo-2/chat/completions?api-version=2024-07-01-preview"
4+
"url": "//openai/deployments/gpt-35-turbo-2/chat/completions?api-version=2024-08-01-preview"
55
},
66
"response": {
77
"body": "{\"id\":\"chatcmpl-xxx\",\"object\":\"chat.completion\",\"created\":1707253061,\"model\":\"gpt-35-turbo\",\"prompt_filter_results\":[{\"prompt_index\":0,\"content_filter_results\":{\"hate\":{\"filtered\":false,\"severity\":\"safe\"},\"self_harm\":{\"filtered\":false,\"severity\":\"safe\"},\"sexual\":{\"filtered\":false,\"severity\":\"safe\"},\"violence\":{\"filtered\":false,\"severity\":\"safe\"}}}],\"choices\":[{\"finish_reason\":\"stop\",\"index\":0,\"message\":{\"role\":\"assistant\",\"content\":\"1979b4ce-5463-4cfb-8ec8-1d05c4b44ccf\"},\"content_filter_results\":{\"hate\":{\"filtered\":false,\"severity\":\"safe\"},\"self_harm\":{\"filtered\":false,\"severity\":\"safe\"},\"sexual\":{\"filtered\":false,\"severity\":\"safe\"},\"violence\":{\"filtered\":false,\"severity\":\"safe\"}}}],\"usage\":{\"prompt_tokens\":17,\"completion_tokens\":67,\"total_tokens\":84}}",

api-test/integration-tests/src/test/resources/wiremock/mappings/deployments_gpt-35-turbo_chat_completions-0c8046c5-74ad-4836-8aa9-09da60f367a2.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"request": {
33
"method": "POST",
4-
"url": "//openai/deployments/gpt-35-turbo/chat/completions?api-version=2024-07-01-preview"
4+
"url": "//openai/deployments/gpt-35-turbo/chat/completions?api-version=2024-08-01-preview"
55
},
66
"response": {
77
"body": "{\"id\":\"chatcmpl-xxx\",\"object\":\"chat.completion\",\"created\":1707253039,\"model\":\"gpt-35-turbo\",\"prompt_filter_results\":[{\"prompt_index\":0,\"content_filter_results\":{\"hate\":{\"filtered\":false,\"severity\":\"safe\"},\"self_harm\":{\"filtered\":false,\"severity\":\"safe\"},\"sexual\":{\"filtered\":false,\"severity\":\"safe\"},\"violence\":{\"filtered\":false,\"severity\":\"safe\"}}}],\"choices\":[{\"finish_reason\":\"stop\",\"index\":0,\"message\":{\"role\":\"assistant\",\"content\":\"ac9817bc-7e1a-48e4-b06c-0ff7618b88c6\"},\"content_filter_results\":{\"hate\":{\"filtered\":false,\"severity\":\"safe\"},\"self_harm\":{\"filtered\":false,\"severity\":\"safe\"},\"sexual\":{\"filtered\":false,\"severity\":\"safe\"},\"violence\":{\"filtered\":false,\"severity\":\"safe\"}}}],\"usage\":{\"prompt_tokens\":26,\"completion_tokens\":131,\"total_tokens\":157}}",

api-test/integration-tests/src/test/resources/wiremock/mappings/deployments_text-davinci-003_completions-0215b128-4822-4368-ac3d-2f580a221f00.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"request": {
33
"method": "POST",
4-
"url": "//openai/deployments/text-davinci-003/completions?api-version=2024-07-01-preview"
4+
"url": "//openai/deployments/text-davinci-003/completions?api-version=2024-08-01-preview"
55
},
66
"response": {
77
"body": "{\"id\":\"cmpl-xxx\",\"object\":\"text_completion\",\"created\":1707253062,\"model\":\"text-davinci-003\",\"prompt_filter_results\":[{\"prompt_index\":0,\"content_filter_results\":{\"hate\":{\"filtered\":false,\"severity\":\"safe\"},\"self_harm\":{\"filtered\":false,\"severity\":\"safe\"},\"sexual\":{\"filtered\":false,\"severity\":\"safe\"},\"violence\":{\"filtered\":false,\"severity\":\"safe\"}}}],\"choices\":[{\"text\":\"7949e981-c632-422f-9b76-335a2379cd83\",\"index\":0,\"finish_reason\":\"stop\",\"logprobs\":null,\"content_filter_results\":{\"hate\":{\"filtered\":false,\"severity\":\"safe\"},\"self_harm\":{\"filtered\":false,\"severity\":\"safe\"},\"sexual\":{\"filtered\":false,\"severity\":\"safe\"},\"violence\":{\"filtered\":false,\"severity\":\"safe\"}}}],\"usage\":{\"prompt_tokens\":10,\"completion_tokens\":26,\"total_tokens\":36}}",

0 commit comments

Comments
 (0)