diff --git a/dotnet/Directory.Packages.props b/dotnet/Directory.Packages.props
index b3d2c48aa69e..280aa3d77d4c 100644
--- a/dotnet/Directory.Packages.props
+++ b/dotnet/Directory.Packages.props
@@ -94,10 +94,10 @@
-
-
-
-
+
+
+
+
diff --git a/dotnet/samples/GettingStartedWithProcesses/Step04/SchemaGenerator.cs b/dotnet/samples/GettingStartedWithProcesses/Step04/SchemaGenerator.cs
index 5350e2c53d6e..77632832b023 100644
--- a/dotnet/samples/GettingStartedWithProcesses/Step04/SchemaGenerator.cs
+++ b/dotnet/samples/GettingStartedWithProcesses/Step04/SchemaGenerator.cs
@@ -1,6 +1,4 @@
// Copyright (c) Microsoft. All rights reserved.
-using System.Text.Json;
-using System.Text.Json.Serialization;
using Microsoft.Extensions.AI;
using Microsoft.SemanticKernel;
@@ -8,21 +6,21 @@ namespace Step04;
internal static class JsonSchemaGenerator
{
+ private static readonly AIJsonSchemaCreateOptions s_config = new()
+ {
+ TransformOptions = new()
+ {
+ DisallowAdditionalProperties = true,
+ RequireAllProperties = true,
+ MoveDefaultKeywordToDescription = true,
+ }
+ };
+
///
/// Wrapper for generating a JSON schema as string from a .NET type.
///
public static string FromType()
{
- JsonSerializerOptions options = new(JsonSerializerOptions.Default)
- {
- UnmappedMemberHandling = JsonUnmappedMemberHandling.Disallow,
- };
- AIJsonSchemaCreateOptions config = new()
- {
- IncludeSchemaKeyword = false,
- DisallowAdditionalProperties = true,
- };
-
- return KernelJsonSchemaBuilder.Build(typeof(TSchemaType), "Intent Result", config).AsJson();
+ return KernelJsonSchemaBuilder.Build(typeof(TSchemaType), "Intent Result", s_config).AsJson();
}
}
diff --git a/dotnet/src/Connectors/Connectors.Google/Core/Gemini/Models/GeminiRequest.cs b/dotnet/src/Connectors/Connectors.Google/Core/Gemini/Models/GeminiRequest.cs
index f2e6c1819224..c5152ae979e5 100644
--- a/dotnet/src/Connectors/Connectors.Google/Core/Gemini/Models/GeminiRequest.cs
+++ b/dotnet/src/Connectors/Connectors.Google/Core/Gemini/Models/GeminiRequest.cs
@@ -15,12 +15,12 @@ namespace Microsoft.SemanticKernel.Connectors.Google.Core;
internal sealed class GeminiRequest
{
private static JsonSerializerOptions? s_options;
- private static readonly AIJsonSchemaCreateOptions s_schemaOptions = new()
+ private static readonly AIJsonSchemaCreateOptions s_schemaConfiguration = new()
{
- IncludeSchemaKeyword = false,
- IncludeTypeInEnumSchemas = true,
- RequireAllProperties = false,
- DisallowAdditionalProperties = false,
+ TransformOptions = new()
+ {
+ UseNullableKeyword = true,
+ }
};
[JsonPropertyName("contents")]
@@ -319,11 +319,11 @@ private static void AddConfiguration(GeminiPromptExecutionSettings executionSett
var jsonElement = responseSchemaSettings switch
{
JsonElement element => element,
- Type type => CreateSchema(type, GetDefaultOptions()),
+ Type type => CreateSchema(type, GetDefaultOptions(), configuration: s_schemaConfiguration),
KernelJsonSchema kernelJsonSchema => kernelJsonSchema.RootElement,
JsonNode jsonNode => JsonSerializer.SerializeToElement(jsonNode, GetDefaultOptions()),
JsonDocument jsonDocument => JsonSerializer.SerializeToElement(jsonDocument, GetDefaultOptions()),
- _ => CreateSchema(responseSchemaSettings.GetType(), GetDefaultOptions())
+ _ => CreateSchema(responseSchemaSettings.GetType(), GetDefaultOptions(), configuration: s_schemaConfiguration)
};
jsonElement = TransformToOpenApi3Schema(jsonElement);
@@ -401,7 +401,7 @@ private static JsonElement CreateSchema(
string? description = null,
AIJsonSchemaCreateOptions? configuration = null)
{
- configuration ??= s_schemaOptions;
+ configuration ??= s_schemaConfiguration;
return AIJsonUtilities.CreateJsonSchema(type, description, serializerOptions: options, inferenceOptions: configuration);
}
diff --git a/dotnet/src/Connectors/Connectors.OpenAI.UnitTests/Core/OpenAIJsonSchemaTransformerTests.cs b/dotnet/src/Connectors/Connectors.OpenAI.UnitTests/Core/OpenAIJsonSchemaTransformerTests.cs
index d1690f560473..2c15249a3ca6 100644
--- a/dotnet/src/Connectors/Connectors.OpenAI.UnitTests/Core/OpenAIJsonSchemaTransformerTests.cs
+++ b/dotnet/src/Connectors/Connectors.OpenAI.UnitTests/Core/OpenAIJsonSchemaTransformerTests.cs
@@ -16,10 +16,12 @@ public sealed class OpenAIJsonSchemaTransformerTests
{
private static readonly AIJsonSchemaCreateOptions s_jsonSchemaCreateOptions = new()
{
- IncludeSchemaKeyword = false,
- IncludeTypeInEnumSchemas = true,
- DisallowAdditionalProperties = true,
- RequireAllProperties = true,
+ TransformOptions = new()
+ {
+ DisallowAdditionalProperties = true,
+ RequireAllProperties = true,
+ MoveDefaultKeywordToDescription = true,
+ }
};
private static readonly JsonSerializerOptions s_jsonSerializerOptions = new()
diff --git a/dotnet/src/Connectors/Connectors.OpenAI/Helpers/OpenAIChatResponseFormatBuilder.cs b/dotnet/src/Connectors/Connectors.OpenAI/Helpers/OpenAIChatResponseFormatBuilder.cs
index e032335dbe5a..096b050e5151 100644
--- a/dotnet/src/Connectors/Connectors.OpenAI/Helpers/OpenAIChatResponseFormatBuilder.cs
+++ b/dotnet/src/Connectors/Connectors.OpenAI/Helpers/OpenAIChatResponseFormatBuilder.cs
@@ -17,10 +17,12 @@ internal static class OpenAIChatResponseFormatBuilder
///
private static readonly Microsoft.Extensions.AI.AIJsonSchemaCreateOptions s_jsonSchemaCreateOptions = new()
{
- IncludeSchemaKeyword = false,
- IncludeTypeInEnumSchemas = true,
- DisallowAdditionalProperties = true,
- RequireAllProperties = true,
+ TransformOptions = new()
+ {
+ DisallowAdditionalProperties = true,
+ RequireAllProperties = true,
+ MoveDefaultKeywordToDescription = true,
+ }
};
///
diff --git a/dotnet/src/InternalUtilities/src/Schema/KernelJsonSchemaBuilder.cs b/dotnet/src/InternalUtilities/src/Schema/KernelJsonSchemaBuilder.cs
index a693d49fc3fd..3a746f44f591 100644
--- a/dotnet/src/InternalUtilities/src/Schema/KernelJsonSchemaBuilder.cs
+++ b/dotnet/src/InternalUtilities/src/Schema/KernelJsonSchemaBuilder.cs
@@ -24,13 +24,7 @@ namespace Microsoft.SemanticKernel;
internal static class KernelJsonSchemaBuilder
{
private static JsonSerializerOptions? s_options;
- internal static readonly AIJsonSchemaCreateOptions s_schemaOptions = new()
- {
- IncludeSchemaKeyword = false,
- IncludeTypeInEnumSchemas = true,
- RequireAllProperties = false,
- DisallowAdditionalProperties = false,
- };
+ internal static readonly AIJsonSchemaCreateOptions s_schemaOptions = new();
private static readonly JsonElement s_trueSchemaAsObject = JsonDocument.Parse("{}").RootElement;
private static readonly JsonElement s_falseSchemaAsObject = JsonDocument.Parse("""{"not":true}""").RootElement;
diff --git a/dotnet/src/SemanticKernel.UnitTests/AI/ChatCompletion/AIFunctionKernelFunctionTests.cs b/dotnet/src/SemanticKernel.UnitTests/AI/ChatCompletion/AIFunctionKernelFunctionTests.cs
index 065784118c3d..d2b7634eec6b 100644
--- a/dotnet/src/SemanticKernel.UnitTests/AI/ChatCompletion/AIFunctionKernelFunctionTests.cs
+++ b/dotnet/src/SemanticKernel.UnitTests/AI/ChatCompletion/AIFunctionKernelFunctionTests.cs
@@ -15,7 +15,7 @@ public void ShouldAssignIsRequiredParameterMetadataPropertyCorrectly()
{
// Arrange and Act
AIFunction aiFunction = AIFunctionFactory.Create((string p1, int? p2 = null) => p1,
- new AIFunctionFactoryOptions { JsonSchemaCreateOptions = new AIJsonSchemaCreateOptions { RequireAllProperties = false } });
+ new AIFunctionFactoryOptions { JsonSchemaCreateOptions = new AIJsonSchemaCreateOptions { TransformOptions = new() { RequireAllProperties = false } } });
AIFunctionKernelFunction sut = new(aiFunction);