|
16 | 16 |
|
17 | 17 | package org.springframework.ai.azure.openai; |
18 | 18 |
|
19 | | -import com.azure.ai.openai.models.ChatCompletionsJsonSchemaResponseFormat; |
20 | | -import com.azure.ai.openai.models.ChatCompletionsJsonSchemaResponseFormatJsonSchema; |
21 | 19 | import java.util.ArrayList; |
22 | 20 | import java.util.Base64; |
23 | 21 | import java.util.Collections; |
|
31 | 29 | import com.azure.ai.openai.OpenAIClientBuilder; |
32 | 30 | import com.azure.ai.openai.implementation.accesshelpers.ChatCompletionsOptionsAccessHelper; |
33 | 31 | import com.azure.ai.openai.models.ChatChoice; |
| 32 | +import com.azure.ai.openai.models.ChatCompletionStreamOptions; |
34 | 33 | import com.azure.ai.openai.models.ChatCompletions; |
35 | 34 | import com.azure.ai.openai.models.ChatCompletionsFunctionToolCall; |
36 | 35 | import com.azure.ai.openai.models.ChatCompletionsFunctionToolDefinition; |
37 | 36 | import com.azure.ai.openai.models.ChatCompletionsFunctionToolDefinitionFunction; |
38 | 37 | import com.azure.ai.openai.models.ChatCompletionsJsonResponseFormat; |
| 38 | +import com.azure.ai.openai.models.ChatCompletionsJsonSchemaResponseFormat; |
| 39 | +import com.azure.ai.openai.models.ChatCompletionsJsonSchemaResponseFormatJsonSchema; |
39 | 40 | import com.azure.ai.openai.models.ChatCompletionsOptions; |
40 | 41 | import com.azure.ai.openai.models.ChatCompletionsResponseFormat; |
41 | | -import com.azure.ai.openai.models.ChatCompletionStreamOptions; |
42 | 42 | import com.azure.ai.openai.models.ChatCompletionsTextResponseFormat; |
43 | 43 | import com.azure.ai.openai.models.ChatCompletionsToolCall; |
44 | 44 | import com.azure.ai.openai.models.ChatCompletionsToolDefinition; |
|
55 | 55 | import com.azure.ai.openai.models.CompletionsUsage; |
56 | 56 | import com.azure.ai.openai.models.ContentFilterResultsForPrompt; |
57 | 57 | import com.azure.ai.openai.models.FunctionCall; |
| 58 | +import com.azure.ai.openai.models.ReasoningEffortValue; |
58 | 59 | import com.azure.core.util.BinaryData; |
59 | 60 | import io.micrometer.observation.Observation; |
60 | 61 | import io.micrometer.observation.ObservationRegistry; |
61 | 62 | import io.micrometer.observation.contextpropagation.ObservationThreadLocalAccessor; |
62 | 63 | import org.slf4j.Logger; |
63 | 64 | import org.slf4j.LoggerFactory; |
64 | | -import org.springframework.ai.azure.openai.AzureOpenAiResponseFormat.JsonSchema; |
65 | | -import org.springframework.ai.azure.openai.AzureOpenAiResponseFormat.Type; |
66 | 65 | import reactor.core.publisher.Flux; |
67 | 66 | import reactor.core.scheduler.Schedulers; |
68 | 67 |
|
| 68 | +import org.springframework.ai.azure.openai.AzureOpenAiResponseFormat.JsonSchema; |
| 69 | +import org.springframework.ai.azure.openai.AzureOpenAiResponseFormat.Type; |
69 | 70 | import org.springframework.ai.chat.messages.AssistantMessage; |
70 | 71 | import org.springframework.ai.chat.messages.Message; |
71 | 72 | import org.springframework.ai.chat.messages.ToolResponseMessage; |
|
77 | 78 | import org.springframework.ai.chat.metadata.PromptMetadata; |
78 | 79 | import org.springframework.ai.chat.metadata.PromptMetadata.PromptFilterMetadata; |
79 | 80 | import org.springframework.ai.chat.metadata.Usage; |
80 | | -import org.springframework.ai.support.UsageCalculator; |
81 | 81 | import org.springframework.ai.chat.model.ChatModel; |
82 | 82 | import org.springframework.ai.chat.model.ChatResponse; |
83 | 83 | import org.springframework.ai.chat.model.Generation; |
|
96 | 96 | import org.springframework.ai.model.tool.ToolExecutionEligibilityPredicate; |
97 | 97 | import org.springframework.ai.model.tool.ToolExecutionResult; |
98 | 98 | import org.springframework.ai.observation.conventions.AiProvider; |
| 99 | +import org.springframework.ai.support.UsageCalculator; |
99 | 100 | import org.springframework.ai.tool.definition.ToolDefinition; |
100 | 101 | import org.springframework.util.Assert; |
101 | 102 | import org.springframework.util.CollectionUtils; |
| 103 | +import org.springframework.util.StringUtils; |
102 | 104 |
|
103 | 105 | /** |
104 | 106 | * {@link ChatModel} implementation for {@literal Microsoft Azure AI} backed by |
@@ -761,6 +763,14 @@ private ChatCompletionsOptions merge(ChatCompletionsOptions fromAzureOptions, |
761 | 763 | mergedAzureOptions.setEnhancements(fromAzureOptions.getEnhancements() != null |
762 | 764 | ? fromAzureOptions.getEnhancements() : toSpringAiOptions.getEnhancements()); |
763 | 765 |
|
| 766 | + ReasoningEffortValue reasoningEffort = (fromAzureOptions.getReasoningEffort() != null) |
| 767 | + ? fromAzureOptions.getReasoningEffort() : (StringUtils.hasText(toSpringAiOptions.getReasoningEffort()) |
| 768 | + ? ReasoningEffortValue.fromString(toSpringAiOptions.getReasoningEffort()) : null); |
| 769 | + |
| 770 | + if (reasoningEffort != null) { |
| 771 | + mergedAzureOptions.setReasoningEffort(reasoningEffort); |
| 772 | + } |
| 773 | + |
764 | 774 | return mergedAzureOptions; |
765 | 775 | } |
766 | 776 |
|
@@ -850,6 +860,11 @@ private ChatCompletionsOptions merge(AzureOpenAiChatOptions fromSpringAiOptions, |
850 | 860 | mergedAzureOptions.setEnhancements(fromSpringAiOptions.getEnhancements()); |
851 | 861 | } |
852 | 862 |
|
| 863 | + if (StringUtils.hasText(fromSpringAiOptions.getReasoningEffort())) { |
| 864 | + mergedAzureOptions |
| 865 | + .setReasoningEffort(ReasoningEffortValue.fromString(fromSpringAiOptions.getReasoningEffort())); |
| 866 | + } |
| 867 | + |
853 | 868 | return mergedAzureOptions; |
854 | 869 | } |
855 | 870 |
|
@@ -915,6 +930,10 @@ private ChatCompletionsOptions copy(ChatCompletionsOptions fromOptions) { |
915 | 930 | copyOptions.setEnhancements(fromOptions.getEnhancements()); |
916 | 931 | } |
917 | 932 |
|
| 933 | + if (fromOptions.getReasoningEffort() != null) { |
| 934 | + copyOptions.setReasoningEffort(fromOptions.getReasoningEffort()); |
| 935 | + } |
| 936 | + |
918 | 937 | return copyOptions; |
919 | 938 | } |
920 | 939 |
|
|
0 commit comments