Skip to content

Commit 3b1162e

Browse files
committed
add UT for internalToolCallingExecutionMaxAttempts in some options
Signed-off-by: lambochen <[email protected]>
1 parent ae8d1ab commit 3b1162e

File tree

8 files changed

+159
-7
lines changed

8 files changed

+159
-7
lines changed

models/spring-ai-anthropic/src/test/java/org/springframework/ai/anthropic/AnthropicChatOptionsTests.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,12 @@ void testBuilderWithAllFields() {
4444
.topP(0.8)
4545
.topK(50)
4646
.metadata(new Metadata("userId_123"))
47+
.internalToolExecutionMaxAttempts(3)
4748
.build();
4849

49-
assertThat(options).extracting("model", "maxTokens", "stopSequences", "temperature", "topP", "topK", "metadata")
50-
.containsExactly("test-model", 100, List.of("stop1", "stop2"), 0.7, 0.8, 50, new Metadata("userId_123"));
50+
assertThat(options).extracting("model", "maxTokens", "stopSequences", "temperature", "topP", "topK", "metadata",
51+
"internalToolExecutionMaxAttempts")
52+
.containsExactly("test-model", 100, List.of("stop1", "stop2"), 0.7, 0.8, 50, new Metadata("userId_123"), 3);
5153
}
5254

5355
@Test
@@ -84,6 +86,7 @@ void testSetters() {
8486
options.setTopP(0.8);
8587
options.setStopSequences(List.of("stop1", "stop2"));
8688
options.setMetadata(new Metadata("userId_123"));
89+
options.setInternalToolExecutionMaxAttempts(3);
8790

8891
assertThat(options.getModel()).isEqualTo("test-model");
8992
assertThat(options.getMaxTokens()).isEqualTo(100);
@@ -92,6 +95,7 @@ void testSetters() {
9295
assertThat(options.getTopP()).isEqualTo(0.8);
9396
assertThat(options.getStopSequences()).isEqualTo(List.of("stop1", "stop2"));
9497
assertThat(options.getMetadata()).isEqualTo(new Metadata("userId_123"));
98+
assertThat(options.getInternalToolExecutionMaxAttempts()).isEqualTo(3);
9599
}
96100

97101
@Test

models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/AzureOpenAiChatOptionsTests.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,15 @@
2424
import com.azure.ai.openai.models.AzureChatOCREnhancementConfiguration;
2525
import com.azure.ai.openai.models.ChatCompletionStreamOptions;
2626
import org.junit.jupiter.api.Test;
27+
import org.springframework.ai.model.tool.ToolCallingChatOptions;
2728

2829
import static org.assertj.core.api.Assertions.assertThat;
2930

3031
/**
3132
* Tests for {@link AzureOpenAiChatOptions}.
3233
*
3334
* @author Alexandros Pappas
35+
* @author lambochen
3436
*/
3537
class AzureOpenAiChatOptionsTests {
3638

@@ -65,15 +67,17 @@ void testBuilderWithAllFields() {
6567
.topLogprobs(5)
6668
.enhancements(enhancements)
6769
.streamOptions(streamOptions)
70+
.internalToolExecutionMaxAttempts(3)
6871
.build();
6972

7073
assertThat(options)
7174
.extracting("deploymentName", "frequencyPenalty", "logitBias", "maxTokens", "n", "presencePenalty", "stop",
7275
"temperature", "topP", "user", "responseFormat", "streamUsage", "reasoningEffort", "seed",
73-
"logprobs", "topLogProbs", "enhancements", "streamOptions")
76+
"logprobs", "topLogProbs", "enhancements", "streamOptions",
77+
"internalToolExecutionMaxAttempts")
7478
.containsExactly("test-deployment", 0.5, Map.of("token1", 1, "token2", -1), 200, 2, 0.8,
7579
List.of("stop1", "stop2"), 0.7, 0.9, "test-user", responseFormat, true, "low", 12345L, true, 5,
76-
enhancements, streamOptions);
80+
enhancements, streamOptions, 3);
7781
}
7882

7983
@Test
@@ -107,6 +111,7 @@ void testCopy() {
107111
.topLogprobs(5)
108112
.enhancements(enhancements)
109113
.streamOptions(streamOptions)
114+
.internalToolExecutionMaxAttempts(3)
110115
.build();
111116

112117
AzureOpenAiChatOptions copiedOptions = originalOptions.copy();
@@ -115,6 +120,8 @@ void testCopy() {
115120
// Ensure deep copy
116121
assertThat(copiedOptions.getStop()).isNotSameAs(originalOptions.getStop());
117122
assertThat(copiedOptions.getToolContext()).isNotSameAs(originalOptions.getToolContext());
123+
124+
assertThat(copiedOptions.getInternalToolExecutionMaxAttempts()).isEqualTo(3);
118125
}
119126

120127
@Test
@@ -145,6 +152,7 @@ void testSetters() {
145152
options.setTopLogProbs(5);
146153
options.setEnhancements(enhancements);
147154
options.setStreamOptions(streamOptions);
155+
options.setInternalToolExecutionMaxAttempts(3);
148156

149157
assertThat(options.getDeploymentName()).isEqualTo("test-deployment");
150158
options.setModel("test-model");
@@ -168,6 +176,7 @@ void testSetters() {
168176
assertThat(options.getEnhancements()).isEqualTo(enhancements);
169177
assertThat(options.getStreamOptions()).isEqualTo(streamOptions);
170178
assertThat(options.getModel()).isEqualTo("test-model");
179+
assertThat(options.getInternalToolExecutionMaxAttempts()).isEqualTo(3);
171180
}
172181

173182
@Test
@@ -193,6 +202,7 @@ void testDefaultValues() {
193202
assertThat(options.getEnhancements()).isNull();
194203
assertThat(options.getStreamOptions()).isNull();
195204
assertThat(options.getModel()).isNull();
205+
assertThat(options.getInternalToolExecutionMaxAttempts()).isEqualTo(ToolCallingChatOptions.DEFAULT_TOOL_EXECUTION_MAX_ATTEMPTS);
196206
}
197207

198208
}

models/spring-ai-deepseek/src/main/java/org/springframework/ai/deepseek/DeepSeekChatOptions.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,9 @@ public int hashCode() {
348348
return Objects.hash(this.model, this.frequencyPenalty, this.logprobs, this.topLogprobs,
349349
this.maxTokens, this.presencePenalty, this.responseFormat,
350350
this.stop, this.temperature, this.topP, this.tools, this.toolChoice,
351-
this.toolCallbacks, this.toolNames, this.internalToolExecutionEnabled, this.toolContext);
351+
this.toolCallbacks, this.toolNames,
352+
this.internalToolExecutionEnabled, this.internalToolExecutionMaxAttempts,
353+
this.toolContext);
352354
}
353355

354356

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package org.springframework.ai.deepseek;
2+
3+
import org.junit.jupiter.api.Test;
4+
import org.springframework.ai.model.tool.ToolCallingChatOptions;
5+
6+
import static org.junit.jupiter.api.Assertions.*;
7+
8+
/**
9+
* @author lambochen
10+
*/
11+
class DeepSeekChatOptionsTest {
12+
13+
@Test
14+
void fromOptions() {
15+
var original = new DeepSeekChatOptions();
16+
original.setInternalToolExecutionMaxAttempts(3);
17+
18+
var copy = DeepSeekChatOptions.fromOptions(original);
19+
assertNotSame(original, copy);
20+
assertSame(original.getInternalToolExecutionMaxAttempts(), copy.getInternalToolExecutionMaxAttempts());
21+
}
22+
23+
@Test
24+
void optionsDefault() {
25+
var options = new DeepSeekChatOptions();
26+
27+
assertEquals(ToolCallingChatOptions.DEFAULT_TOOL_EXECUTION_MAX_ATTEMPTS, options.getInternalToolExecutionMaxAttempts());
28+
}
29+
30+
@Test
31+
void optionsBuilder() {
32+
var options = DeepSeekChatOptions.builder()
33+
.internalToolExecutionMaxAttempts(3)
34+
.build();
35+
36+
assertEquals(3, options.getInternalToolExecutionMaxAttempts());
37+
}
38+
}

models/spring-ai-minimax/src/test/java/org/springframework/ai/minimax/chat/MiniMaxChatOptionsTests.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable;
2626
import org.slf4j.Logger;
2727
import org.slf4j.LoggerFactory;
28+
import org.springframework.ai.model.tool.ToolCallingChatOptions;
2829
import reactor.core.publisher.Flux;
2930

3031
import org.springframework.ai.chat.messages.AssistantMessage;
@@ -116,4 +117,27 @@ void testToolCallingStream() {
116117
assertThat(content).contains("15");
117118
}
118119

120+
@Test
121+
void testOptionsDefaultValue() {
122+
var options = new MiniMaxChatOptions();
123+
124+
assertThat(options.getInternalToolExecutionMaxAttempts()).isEqualTo(ToolCallingChatOptions.DEFAULT_TOOL_EXECUTION_MAX_ATTEMPTS);
125+
}
126+
127+
@Test
128+
void testOptionsSetter() {
129+
var options = new MiniMaxChatOptions();
130+
options.setInternalToolExecutionMaxAttempts(3);
131+
assertThat(options.getInternalToolExecutionMaxAttempts()).isEqualTo(3);
132+
}
133+
134+
@Test
135+
void testOptionsBuilder() {
136+
var options = MiniMaxChatOptions.builder()
137+
.internalToolExecutionMaxAttempts(3)
138+
.build();
139+
140+
assertThat(options.getInternalToolExecutionMaxAttempts()).isEqualTo(3);
141+
}
142+
119143
}

models/spring-ai-mistral-ai/src/main/java/org/springframework/ai/mistralai/MistralAiChatOptions.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -389,8 +389,9 @@ public MistralAiChatOptions copy() {
389389
public int hashCode() {
390390
return Objects.hash(this.model, this.temperature, this.topP, this.maxTokens, this.safePrompt, this.randomSeed,
391391
this.responseFormat, this.stop, this.frequencyPenalty, this.presencePenalty, this.n, this.tools,
392-
this.toolChoice, this.toolCallbacks, this.tools, this.internalToolExecutionEnabled,
393-
this.internalToolExecutionMaxAttempts, this.toolContext);
392+
this.toolChoice, this.toolCallbacks, this.tools,
393+
this.internalToolExecutionEnabled, this.internalToolExecutionMaxAttempts,
394+
this.toolContext);
394395
}
395396

396397
@Override
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package org.springframework.ai.mistralai;
2+
3+
import org.junit.jupiter.api.Test;
4+
import org.springframework.ai.model.tool.ToolCallingChatOptions;
5+
6+
import static org.assertj.core.api.Assertions.assertThat;
7+
8+
/**
9+
* @author lambochen
10+
*/
11+
class MistralAiChatOptionsTests {
12+
13+
@Test
14+
void testOptionsDefault() {
15+
var options = new MistralAiChatOptions();
16+
17+
assertThat(options.getInternalToolExecutionMaxAttempts()).isEqualTo(ToolCallingChatOptions.DEFAULT_TOOL_EXECUTION_MAX_ATTEMPTS);
18+
}
19+
20+
@Test
21+
void testOptionsCustom() {
22+
var options = new MistralAiChatOptions();
23+
24+
options.setInternalToolExecutionMaxAttempts(3);
25+
26+
assertThat(options.getInternalToolExecutionMaxAttempts()).isEqualTo(3);
27+
}
28+
29+
@Test
30+
void testBuilder() {
31+
var options = MistralAiChatOptions.builder()
32+
.internalToolExecutionMaxAttempts(3)
33+
.build();
34+
35+
assertThat(options.getInternalToolExecutionMaxAttempts()).isEqualTo(3);
36+
}
37+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package org.springframework.ai.zhipuai.chat;
2+
3+
import org.junit.jupiter.api.Test;
4+
import org.springframework.ai.model.tool.ToolCallingChatOptions;
5+
import org.springframework.ai.zhipuai.ZhiPuAiChatOptions;
6+
7+
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
8+
9+
/**
10+
* @author lambochen
11+
*/
12+
class ZhiPuAiChatOptionsTests {
13+
14+
@Test
15+
void testDefaultValue() {
16+
var options = new ZhiPuAiChatOptions();
17+
18+
assertThat(options.getInternalToolExecutionMaxAttempts()).isEqualTo(ToolCallingChatOptions.DEFAULT_TOOL_EXECUTION_MAX_ATTEMPTS);
19+
}
20+
21+
@Test
22+
void testSetter() {
23+
var options = new ZhiPuAiChatOptions();
24+
options.setInternalToolExecutionMaxAttempts(3);
25+
assertThat(options.getInternalToolExecutionMaxAttempts()).isEqualTo(3);
26+
}
27+
28+
@Test
29+
void testBuilder() {
30+
var options = ZhiPuAiChatOptions.builder()
31+
.internalToolExecutionMaxAttempts(3)
32+
.build();
33+
34+
assertThat(options.getInternalToolExecutionMaxAttempts()).isEqualTo(3);
35+
}
36+
}

0 commit comments

Comments
 (0)