fix: OpenAiChatOptions support transfer webSearchOptions

Unit test to veriy OpenAiChatOptions.fromOptions.webSearchOptions

Fixes: 3377

Signed-off-by: lambochen <lambochen@yeah.net>
(cherry picked from commit 4621c812cc)
This commit is contained in:
lambochen
2025-05-29 22:26:58 +08:00
committed by Spring Builds
parent c1a6a62320
commit c790d6c147
2 changed files with 23 additions and 0 deletions

View File

@@ -49,6 +49,7 @@ import org.springframework.util.Assert;
* @author Mariusz Bernacki
* @author Thomas Vitale
* @author Ilayaperumal Gopinathan
* @author lambochen
* @since 0.8.0
*/
@JsonInclude(Include.NON_NULL)
@@ -266,6 +267,7 @@ public class OpenAiChatOptions implements ToolCallingChatOptions {
.store(fromOptions.getStore())
.metadata(fromOptions.getMetadata())
.reasoningEffort(fromOptions.getReasoningEffort())
.webSearchOptions(fromOptions.getWebSearchOptions())
.build();
}

View File

@@ -30,6 +30,7 @@ import org.springframework.ai.openai.api.ResponseFormat;
import static org.assertj.core.api.Assertions.assertThat;
import static org.springframework.ai.openai.api.OpenAiApi.ChatCompletionRequest.AudioParameters.Voice.ALLOY;
import static org.springframework.ai.openai.api.OpenAiApi.ChatCompletionRequest.WebSearchOptions.SearchContextSize.MEDIUM;
/**
* Tests for {@link OpenAiChatOptions}.
@@ -259,4 +260,24 @@ class OpenAiChatOptionsTests {
assertThat(options.getStopSequences()).isNull();
}
@Test
void testFromOptions_webSearchOptions() {
var chatOptions = OpenAiChatOptions.builder()
.webSearchOptions(new OpenAiApi.ChatCompletionRequest.WebSearchOptions(MEDIUM,
new OpenAiApi.ChatCompletionRequest.WebSearchOptions.UserLocation("type",
new OpenAiApi.ChatCompletionRequest.WebSearchOptions.UserLocation.Approximate("beijing",
"china", "region", "UTC+8"))))
.build();
var target = OpenAiChatOptions.fromOptions(chatOptions);
assertThat(target.getWebSearchOptions()).isNotNull();
assertThat(target.getWebSearchOptions().searchContextSize()).isEqualTo(MEDIUM);
assertThat(target.getWebSearchOptions().userLocation()).isNotNull();
assertThat(target.getWebSearchOptions().userLocation().type()).isEqualTo("type");
assertThat(target.getWebSearchOptions().userLocation().approximate()).isNotNull();
assertThat(target.getWebSearchOptions().userLocation().approximate().city()).isEqualTo("beijing");
assertThat(target.getWebSearchOptions().userLocation().approximate().country()).isEqualTo("china");
assertThat(target.getWebSearchOptions().userLocation().approximate().region()).isEqualTo("region");
assertThat(target.getWebSearchOptions().userLocation().approximate().timezone()).isEqualTo("UTC+8");
}
}