77import com .azure .ai .openai .models .ChatCompletionsFunctionToolCall ;
88import com .azure .ai .openai .models .ChatCompletionsFunctionToolDefinition ;
99import com .azure .ai .openai .models .ChatCompletionsJsonResponseFormat ;
10+ import com .azure .ai .openai .models .ChatCompletionsNamedToolSelection ;
1011import com .azure .ai .openai .models .ChatCompletionsOptions ;
1112import com .azure .ai .openai .models .ChatCompletionsTextResponseFormat ;
1213import com .azure .ai .openai .models .ChatCompletionsToolCall ;
1314import com .azure .ai .openai .models .ChatCompletionsToolDefinition ;
15+ import com .azure .ai .openai .models .ChatCompletionsToolSelection ;
16+ import com .azure .ai .openai .models .ChatCompletionsToolSelectionPreset ;
1417import com .azure .ai .openai .models .ChatMessageImageContentItem ;
1518import com .azure .ai .openai .models .ChatMessageImageDetailLevel ;
1619import com .azure .ai .openai .models .ChatMessageImageUrl ;
2326import com .azure .ai .openai .models .ChatResponseMessage ;
2427import com .azure .ai .openai .models .CompletionsUsage ;
2528import com .azure .ai .openai .models .FunctionCall ;
26- import com .azure .core .util .BinaryData ;
29+ import com .azure .json .JsonOptions ;
30+ import com .azure .json .implementation .DefaultJsonReader ;
2731import com .fasterxml .jackson .core .JsonProcessingException ;
2832import com .fasterxml .jackson .databind .JsonNode ;
2933import com .fasterxml .jackson .databind .ObjectMapper ;
3034import com .fasterxml .jackson .databind .node .ContainerNode ;
3135import com .microsoft .semantickernel .Kernel ;
3236import com .microsoft .semantickernel .aiservices .openai .OpenAiService ;
37+ import com .microsoft .semantickernel .aiservices .openai .chatcompletion .responseformat .ChatCompletionsJsonSchemaResponseFormat ;
3338import com .microsoft .semantickernel .aiservices .openai .implementation .OpenAIRequestSettings ;
3439import com .microsoft .semantickernel .contextvariables .ContextVariable ;
3540import com .microsoft .semantickernel .contextvariables .ContextVariableTypes ;
5055import com .microsoft .semantickernel .orchestration .InvocationReturnMode ;
5156import com .microsoft .semantickernel .orchestration .PromptExecutionSettings ;
5257import com .microsoft .semantickernel .orchestration .ToolCallBehavior ;
58+ import com .microsoft .semantickernel .orchestration .responseformat .JsonResponseSchema ;
59+ import com .microsoft .semantickernel .orchestration .responseformat .JsonSchemaResponseFormat ;
5360import com .microsoft .semantickernel .semanticfunctions .KernelFunction ;
5461import com .microsoft .semantickernel .semanticfunctions .KernelFunctionArguments ;
5562import com .microsoft .semantickernel .services .chatcompletion .AuthorRole ;
6168import com .microsoft .semantickernel .services .chatcompletion .message .ChatMessageImageContent ;
6269import com .microsoft .semantickernel .services .openai .OpenAiServiceBuilder ;
6370import io .opentelemetry .api .trace .Span ;
71+ import java .io .IOException ;
6472import java .util .ArrayList ;
6573import java .util .Arrays ;
6674import java .util .Collections ;
@@ -618,6 +626,8 @@ private Mono<FunctionResult<String>> invokeFunctionTool(
618626 return function
619627 .invokeAsync (kernel )
620628 .withArguments (arguments )
629+ .withTypes (invocationContext .getContextVariableTypes ())
630+ .withTypes (contextVariableTypes )
621631 .withResultType (contextVariableTypes .getVariableTypeForClass (String .class ));
622632 } catch (JsonProcessingException e ) {
623633 return Mono .error (new SKException ("Failed to parse tool arguments" , e ));
@@ -900,13 +910,21 @@ private static ChatCompletionsOptions getCompletionsOptions(
900910 .setLogitBias (logit );
901911
902912 if (promptExecutionSettings .getResponseFormat () != null ) {
903- switch (promptExecutionSettings .getResponseFormat ()) {
913+ switch (promptExecutionSettings .getResponseFormat ().getType ()) {
914+ case JSON_SCHEMA :
915+ JsonResponseSchema schema = ((JsonSchemaResponseFormat ) promptExecutionSettings
916+ .getResponseFormat ())
917+ .getJsonSchema ();
918+
919+ options .setResponseFormat (new ChatCompletionsJsonSchemaResponseFormat (schema ));
920+ break ;
904921 case JSON_OBJECT :
905922 options .setResponseFormat (new ChatCompletionsJsonResponseFormat ());
906923 break ;
907924 case TEXT :
908925 options .setResponseFormat (new ChatCompletionsTextResponseFormat ());
909926 break ;
927+
910928 default :
911929 throw new SKException (
912930 "Unknown response format: " + promptExecutionSettings .getResponseFormat ());
@@ -957,9 +975,17 @@ private static void configureToolCallBehaviorOptions(
957975 try {
958976 String json = String .format (
959977 "{\" type\" :\" function\" ,\" function\" :{\" name\" :\" %s\" }}" , toolChoiceName );
960- options .setToolChoice (BinaryData .fromObject (new ObjectMapper ().readTree (json )));
978+
979+ options .setToolChoice (
980+ new ChatCompletionsToolSelection (
981+ ChatCompletionsNamedToolSelection .fromJson (
982+ DefaultJsonReader .fromString (
983+ json ,
984+ new JsonOptions ()))));
961985 } catch (JsonProcessingException e ) {
962986 throw SKException .build ("Failed to parse tool choice" , e );
987+ } catch (IOException e ) {
988+ throw new SKException (e );
963989 }
964990 return ;
965991 }
@@ -985,7 +1011,8 @@ private static void configureToolCallBehaviorOptions(
9851011 }
9861012
9871013 options .setTools (toolDefinitions );
988- options .setToolChoice (BinaryData .fromString ("auto" ));
1014+ options .setToolChoice (
1015+ new ChatCompletionsToolSelection (ChatCompletionsToolSelectionPreset .AUTO ));
9891016 }
9901017
9911018 private static boolean hasToolCallBeenExecuted (List <ChatRequestMessage > chatRequestMessages ,
0 commit comments