Skip to content

Commit c92954a

Browse files
committed
test: update Javadoc to include exception details and enhance test coverage for OpenAiFunctionCall and OpenAiFunctionTool
1 parent cd03dac commit c92954a

File tree

4 files changed

+50
-0
lines changed

4 files changed

+50
-0
lines changed

foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiChatCompletionRequest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,7 @@ public OpenAiChatCompletionRequest withToolChoice(@Nonnull final OpenAiToolChoic
287287
*
288288
* @param tools the list of tools to be used
289289
* @return a new OpenAiChatCompletionRequest instance with the specified tools
290+
* @throws IllegalArgumentException if the tool type is not supported
290291
* @since 1.7.0
291292
*/
292293
@Nonnull

foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiFunctionTool.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ ChatCompletionTool createChatCompletionTool() {
6363
throw new IllegalArgumentException("Could not generate schema for " + clazz.getTypeName(), e);
6464
}
6565

66+
schema.setId(null);
6667
final var schemaMap =
6768
objectMapper.convertValue(schema, new TypeReference<Map<String, Object>>() {});
6869

foundation-models/openai/src/test/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiChatCompletionRequestTest.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@
44

55
import com.sap.ai.sdk.foundationmodels.openai.generated.model.ChatCompletionRequestUserMessage;
66
import com.sap.ai.sdk.foundationmodels.openai.generated.model.ChatCompletionRequestUserMessageContent;
7+
import com.sap.ai.sdk.foundationmodels.openai.generated.model.ChatCompletionTool;
78
import com.sap.ai.sdk.foundationmodels.openai.generated.model.ChatCompletionToolChoiceOption;
89
import com.sap.ai.sdk.foundationmodels.openai.generated.model.CreateChatCompletionRequestAllOfStop;
910
import java.math.BigDecimal;
1011
import java.util.ArrayList;
1112
import java.util.List;
13+
import java.util.Map;
1214
import org.junit.jupiter.api.Test;
1315

1416
class OpenAiChatCompletionRequestTest {
@@ -114,4 +116,45 @@ void messageListExternallyUnmodifiable() {
114116
.as("Modifying the original list should not affect the messages in the request object.")
115117
.hasSize(1);
116118
}
119+
120+
@Test
121+
void withOpenAiTools() {
122+
record DummyRequest(String param1, int param2) {}
123+
124+
var request =
125+
new OpenAiChatCompletionRequest(OpenAiMessage.user("Hello, world"))
126+
.withOpenAiTools(
127+
List.of(
128+
new OpenAiFunctionTool("toolA", DummyRequest.class)
129+
.withDescription("descA")
130+
.withStrict(true),
131+
new OpenAiFunctionTool("toolB", String.class)
132+
.withDescription("descB")
133+
.withStrict(false)));
134+
135+
var lowLevelRequest = request.createCreateChatCompletionRequest();
136+
assertThat(lowLevelRequest.getTools()).hasSize(2);
137+
138+
var toolA = lowLevelRequest.getTools().get(0);
139+
assertThat(toolA).isInstanceOf(ChatCompletionTool.class);
140+
assertThat(toolA.getType()).isEqualTo(ChatCompletionTool.TypeEnum.FUNCTION);
141+
assertThat(toolA.getFunction().getName()).isEqualTo("toolA");
142+
assertThat(toolA.getFunction().getDescription()).isEqualTo("descA");
143+
assertThat(toolA.getFunction().isStrict()).isTrue();
144+
assertThat(toolA.getFunction().getParameters())
145+
.isEqualTo(
146+
Map.of(
147+
"properties",
148+
Map.of("param1", Map.of("type", "string"), "param2", Map.of("type", "integer")),
149+
"type",
150+
"object"));
151+
152+
var toolB = lowLevelRequest.getTools().get(1);
153+
assertThat(toolB).isInstanceOf(ChatCompletionTool.class);
154+
assertThat(toolB.getType()).isEqualTo(ChatCompletionTool.TypeEnum.FUNCTION);
155+
assertThat(toolB.getFunction().getName()).isEqualTo("toolB");
156+
assertThat(toolB.getFunction().getDescription()).isEqualTo("descB");
157+
assertThat(toolB.getFunction().isStrict()).isFalse();
158+
assertThat(toolB.getFunction().getParameters()).isEqualTo(Map.of("type", "string"));
159+
}
117160
}

foundation-models/openai/src/test/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClientGeneratedTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -605,5 +605,10 @@ void chatCompletionToolCallGetMessage() {
605605
assertThat(toolCall.getId()).isEqualTo("call_CUYGJf2j7FRWJMHT3PN3aGxK");
606606
assertThat(toolCall.getName()).isEqualTo("fibonacci");
607607
assertThat(toolCall.getArguments()).isEqualTo("{\"N\":12}");
608+
assertThat(toolCall.getArgumentsAsMap()).isEqualTo(Map.of("N", 12));
609+
610+
record DummyRequest(int N) {}
611+
assertThat(toolCall.getArgumentsAsObject(DummyRequest.class)).isInstanceOf(DummyRequest.class);
612+
assertThat(toolCall.getArgumentsAsObject(DummyRequest.class).N()).isEqualTo(12);
608613
}
609614
}

0 commit comments

Comments
 (0)