Skip to content

Commit

Permalink
feat: Added CSharpToJsonSchema projects.
Browse files Browse the repository at this point in the history
  • Loading branch information
HavenDV committed Oct 13, 2024
1 parent 6d42de0 commit 5ff2342
Show file tree
Hide file tree
Showing 63 changed files with 542 additions and 607 deletions.
49 changes: 28 additions & 21 deletions OpenAI.sln
Original file line number Diff line number Diff line change
Expand Up @@ -21,20 +21,14 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{AAA11B78
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenAI", "src\libs\OpenAI\OpenAI.csproj", "{0028BC85-0064-4CE8-A21A-C1F5E922BD59}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenAI.Generators", "src\libs\OpenAI.Generators\OpenAI.Generators.csproj", "{5504353C-9B7F-402B-9268-4821AB5E73F9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FixOpenApiSpec", "src\helpers\FixOpenApiSpec\FixOpenApiSpec.csproj", "{594DCFD8-E707-4232-B878-90FA3D880474}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "helpers", "helpers", "{1A008ECD-2300-4BE4-A302-49DDF8BE0D54}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenAI.Generators.Core", "src\libs\OpenAI.Generators.Core\OpenAI.Generators.Core.csproj", "{FCBE699C-CCD3-4809-8128-78956BC3F2C3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TrimmingHelper", "src\helpers\TrimmingHelper\TrimmingHelper.csproj", "{9F7DC3A1-B113-4577-875D-73B2DDD6647A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenAI.IntegrationTests", "src\tests\OpenAI.IntegrationTests\OpenAI.IntegrationTests.csproj", "{A3F06E45-DFA8-4236-BFF5-425091762548}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenAI.SnapshotTests", "src\tests\OpenAI.SnapshotTests\OpenAI.SnapshotTests.csproj", "{F1A9D4C9-0075-4AB0-95A2-095B7DF31FB1}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{2D8B78DE-7269-417B-9D0B-8981FA513ACB}"
ProjectSection(SolutionItems) = preProject
.github\workflows\auto-merge.yml = .github\workflows\auto-merge.yml
Expand All @@ -48,6 +42,14 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GenerateDocs", "src\helpers\GenerateDocs\GenerateDocs.csproj", "{ECC219F0-209A-412B-ADEC-6D97AB379E7C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpToJsonSchema", "src\libs\CSharpToJsonSchema\CSharpToJsonSchema.csproj", "{93367DED-6C55-4267-923A-4412D03376FB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpToJsonSchema.Generators", "src\libs\CSharpToJsonSchema.Generators\CSharpToJsonSchema.Generators.csproj", "{4A7B892E-94C7-493D-8B2F-34ED64AE4DCF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpToJsonSchema.SnapshotTests", "src\tests\CSharpToJsonSchema.SnapshotTests\CSharpToJsonSchema.SnapshotTests.csproj", "{8BDEB07E-C8C8-436C-B736-F3C093CB27AD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpToJsonSchema.UnitTests", "src\tests\CSharpToJsonSchema.UnitTests\CSharpToJsonSchema.UnitTests.csproj", "{8AFCC30C-C59D-498D-BE68-9A328B3E5599}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand All @@ -58,18 +60,10 @@ Global
{0028BC85-0064-4CE8-A21A-C1F5E922BD59}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0028BC85-0064-4CE8-A21A-C1F5E922BD59}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0028BC85-0064-4CE8-A21A-C1F5E922BD59}.Release|Any CPU.Build.0 = Release|Any CPU
{5504353C-9B7F-402B-9268-4821AB5E73F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5504353C-9B7F-402B-9268-4821AB5E73F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5504353C-9B7F-402B-9268-4821AB5E73F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5504353C-9B7F-402B-9268-4821AB5E73F9}.Release|Any CPU.Build.0 = Release|Any CPU
{594DCFD8-E707-4232-B878-90FA3D880474}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{594DCFD8-E707-4232-B878-90FA3D880474}.Debug|Any CPU.Build.0 = Debug|Any CPU
{594DCFD8-E707-4232-B878-90FA3D880474}.Release|Any CPU.ActiveCfg = Release|Any CPU
{594DCFD8-E707-4232-B878-90FA3D880474}.Release|Any CPU.Build.0 = Release|Any CPU
{FCBE699C-CCD3-4809-8128-78956BC3F2C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FCBE699C-CCD3-4809-8128-78956BC3F2C3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FCBE699C-CCD3-4809-8128-78956BC3F2C3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FCBE699C-CCD3-4809-8128-78956BC3F2C3}.Release|Any CPU.Build.0 = Release|Any CPU
{9F7DC3A1-B113-4577-875D-73B2DDD6647A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9F7DC3A1-B113-4577-875D-73B2DDD6647A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9F7DC3A1-B113-4577-875D-73B2DDD6647A}.Release|Any CPU.ActiveCfg = Release|Any CPU
Expand All @@ -78,28 +72,41 @@ Global
{A3F06E45-DFA8-4236-BFF5-425091762548}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A3F06E45-DFA8-4236-BFF5-425091762548}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A3F06E45-DFA8-4236-BFF5-425091762548}.Release|Any CPU.Build.0 = Release|Any CPU
{F1A9D4C9-0075-4AB0-95A2-095B7DF31FB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F1A9D4C9-0075-4AB0-95A2-095B7DF31FB1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F1A9D4C9-0075-4AB0-95A2-095B7DF31FB1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F1A9D4C9-0075-4AB0-95A2-095B7DF31FB1}.Release|Any CPU.Build.0 = Release|Any CPU
{ECC219F0-209A-412B-ADEC-6D97AB379E7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ECC219F0-209A-412B-ADEC-6D97AB379E7C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ECC219F0-209A-412B-ADEC-6D97AB379E7C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ECC219F0-209A-412B-ADEC-6D97AB379E7C}.Release|Any CPU.Build.0 = Release|Any CPU
{93367DED-6C55-4267-923A-4412D03376FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{93367DED-6C55-4267-923A-4412D03376FB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{93367DED-6C55-4267-923A-4412D03376FB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{93367DED-6C55-4267-923A-4412D03376FB}.Release|Any CPU.Build.0 = Release|Any CPU
{4A7B892E-94C7-493D-8B2F-34ED64AE4DCF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4A7B892E-94C7-493D-8B2F-34ED64AE4DCF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4A7B892E-94C7-493D-8B2F-34ED64AE4DCF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4A7B892E-94C7-493D-8B2F-34ED64AE4DCF}.Release|Any CPU.Build.0 = Release|Any CPU
{8BDEB07E-C8C8-436C-B736-F3C093CB27AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8BDEB07E-C8C8-436C-B736-F3C093CB27AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8BDEB07E-C8C8-436C-B736-F3C093CB27AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8BDEB07E-C8C8-436C-B736-F3C093CB27AD}.Release|Any CPU.Build.0 = Release|Any CPU
{8AFCC30C-C59D-498D-BE68-9A328B3E5599}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8AFCC30C-C59D-498D-BE68-9A328B3E5599}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8AFCC30C-C59D-498D-BE68-9A328B3E5599}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8AFCC30C-C59D-498D-BE68-9A328B3E5599}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{0028BC85-0064-4CE8-A21A-C1F5E922BD59} = {61E7E11E-4558-434C-ACE8-06316A3097B3}
{5504353C-9B7F-402B-9268-4821AB5E73F9} = {61E7E11E-4558-434C-ACE8-06316A3097B3}
{594DCFD8-E707-4232-B878-90FA3D880474} = {1A008ECD-2300-4BE4-A302-49DDF8BE0D54}
{FCBE699C-CCD3-4809-8128-78956BC3F2C3} = {61E7E11E-4558-434C-ACE8-06316A3097B3}
{9F7DC3A1-B113-4577-875D-73B2DDD6647A} = {1A008ECD-2300-4BE4-A302-49DDF8BE0D54}
{A3F06E45-DFA8-4236-BFF5-425091762548} = {AAA11B78-2764-4520-A97E-46AA7089A588}
{F1A9D4C9-0075-4AB0-95A2-095B7DF31FB1} = {AAA11B78-2764-4520-A97E-46AA7089A588}
{2D8B78DE-7269-417B-9D0B-8981FA513ACB} = {E793AF18-4371-4EBD-96FC-195EB1798855}
{ECC219F0-209A-412B-ADEC-6D97AB379E7C} = {1A008ECD-2300-4BE4-A302-49DDF8BE0D54}
{93367DED-6C55-4267-923A-4412D03376FB} = {61E7E11E-4558-434C-ACE8-06316A3097B3}
{4A7B892E-94C7-493D-8B2F-34ED64AE4DCF} = {61E7E11E-4558-434C-ACE8-06316A3097B3}
{8BDEB07E-C8C8-436C-B736-F3C093CB27AD} = {AAA11B78-2764-4520-A97E-46AA7089A588}
{8AFCC30C-C59D-498D-BE68-9A328B3E5599} = {AAA11B78-2764-4520-A97E-46AA7089A588}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {CED9A020-DBA5-4BE6-8096-75E528648EC1}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<IsPackable>false</IsPackable>
<GenerateDocumentationFile>false</GenerateDocumentationFile>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<EnforceExtendedAnalyzerRules>true</EnforceExtendedAnalyzerRules>
<NoWarn>$(NoWarn);CA1014;CA1031;CA1308</NoWarn>
</PropertyGroup>

<ItemGroup Label="Global Usings">
<Using Include="System.Net.Http"/>
</ItemGroup>

<ItemGroup>
<PackageReference Include="PolySharp" Version="1.14.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="IsExternalInit" Version="1.0.3">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.3.1" PrivateAssets="all"/>
<PackageReference Include="H.Generators.Extensions" Version="1.22.0" PrivateAssets="all"/>
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
using H.Generators;
using H.Generators;
using H.Generators.Extensions;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using OpenAI.Generators.Core.Conversion;

namespace OpenAI.Generators;
namespace CSharpToJsonSchema.Generators;

[Generator]
public class OpenAiToolsGenerator : IIncrementalGenerator
public class JsonSchemaGenerator : IIncrementalGenerator
{
#region Constants

public const string Name = nameof(OpenAiToolsGenerator);
public const string Name = nameof(JsonSchemaGenerator);
public const string Id = "OATG";

#endregion
Expand All @@ -22,7 +22,7 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
{
var attributes =
context.SyntaxProvider
.ForAttributeWithMetadataName("OpenAI.OpenAiToolsAttribute")
.ForAttributeWithMetadataName("CSharpToJsonSchema.GenerateJsonSchemaAttribute")
.SelectManyAllAttributesOfCurrentInterfaceSyntax()
.SelectAndReportExceptions(PrepareData, context, Id);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,15 @@
using H.Generators;
using H.Generators;
using H.Generators.Extensions;

namespace OpenAI.Generators;
namespace CSharpToJsonSchema.Generators;

internal static partial class Sources
{
public static string GenerateCalls(InterfaceData @interface)
{
var extensionsClassName = @interface.Name.Substring(startIndex: 1) + "Extensions";

return @$"
using System.Collections.Generic;
#nullable enable
return @$"#nullable enable
namespace {@interface.Namespace}
{{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using H.Generators;
using H.Generators;
using H.Generators.Extensions;
using OpenAI.Generators.Core;

namespace OpenAI.Generators;
namespace CSharpToJsonSchema.Generators;

internal static partial class Sources
{
Expand All @@ -16,7 +16,7 @@ internal static partial class Sources
public static string GenerateOpenApiSchema(OpenApiSchema parameter, int depth = 0, bool schema = true)
{
var indent = new string(' ', depth * 4);
var name = schema ? "global::OpenAI.OpenApiSchema" : "global::OpenAI.FunctionParameters";
const string name = "global::CSharpToJsonSchema.OpenApiSchema";
if (parameter.ArrayItem.Count != 0)
{
return $@"new {name}
Expand All @@ -32,7 +32,7 @@ public static string GenerateOpenApiSchema(OpenApiSchema parameter, int depth =
{indent} {{
{indent} Type = ""{parameter.SchemaType}"",
{indent} Description = ""{parameter.Description}"",
{indent} Properties = new global::System.Collections.Generic.Dictionary<string, global::OpenAI.OpenApiSchema>
{indent} Properties = new global::System.Collections.Generic.Dictionary<string, global::CSharpToJsonSchema.OpenApiSchema>
{indent} {{
{indent} {string.Join(",\n " + indent, parameter.Properties.Select(x => $@"[""{x.Name}""] = " + GenerateOpenApiSchema(x, depth: depth + 2)))}
{indent} }},
Expand Down Expand Up @@ -71,21 +71,17 @@ namespace {@interface.Namespace}
{{
public static partial class {extensionsClassName}
{{
public static global::System.Collections.Generic.IList<global::OpenAI.ChatCompletionTool> AsTools(this {@interface.Name} functions)
public static global::System.Collections.Generic.IList<global::CSharpToJsonSchema.Tool> AsTools(this {@interface.Name} functions)
{{
return new global::System.Collections.Generic.List<global::OpenAI.ChatCompletionTool>
return new global::System.Collections.Generic.List<global::CSharpToJsonSchema.Tool>
{{
{@interface.Methods.Select(method => $@"
new global::OpenAI.ChatCompletionTool
new global::CSharpToJsonSchema.Tool
{{
Function = new global::OpenAI.FunctionObject
{{
Name = ""{method.Name}"",
Description = ""{method.Description}"",
Strict = {(method.IsStrict ? "true" : "false")},
Parameters = {GenerateOpenApiSchema(method.Parameters, schema: false)},
}},
Type = global::OpenAI.ChatCompletionToolType.Function,
Name = ""{method.Name}"",
Description = ""{method.Description}"",
Strict = {(method.IsStrict ? "true" : "false")},
Parameters = {GenerateOpenApiSchema(method.Parameters, schema: false)},
}},
").Inject()}
}};
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp.Syntax;

namespace OpenAI.Generators;
namespace CSharpToJsonSchema.Generators;

public static class CommonSteps
{
Expand Down
43 changes: 43 additions & 0 deletions src/libs/CSharpToJsonSchema/CSharpToJsonSchema.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>netstandard2.0;net4.6.2;net6.0;net8.0</TargetFrameworks>
<NoWarn>$(NoWarn);CA1724;CA2227;CA1819</NoWarn>
</PropertyGroup>

<ItemGroup>
<Using Include="System.Text.Json" />
</ItemGroup>

<PropertyGroup Label="Nuget">
<Description>
Generated C# SDK based on official OpenAI OpenAPI specification.
Includes C# Source Generator which allows you to define functions natively through a C# interface, and also provides extensions that make it easier to call this interface later</Description>
<PackageTags>api;client;sdk;dotnet;swagger;openapi;specification;openai;generated;nswag;functions;gpt-3.5;gpt-4;chatgpt;generator;source generator;constants;prices;pricing;vision;audio;embedding;moderation;image;chat</PackageTags>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="System.Text.Json" Version="9.0.0-rc.1.24431.7" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\CSharpToJsonSchema.Generators\CSharpToJsonSchema.Generators.csproj" ReferenceOutputAssembly="false" PackAsAnalyzer="true" />
<None Include="..\CSharpToJsonSchema.Generators\bin\$(Configuration)\netstandard2.0\H.Generators.Extensions.dll" Pack="true" PackagePath="analyzers/dotnet" Visible="false" />
<None Include="..\CSharpToJsonSchema.Generators\bin\$(Configuration)\netstandard2.0\System.Collections.Immutable.dll" Pack="true" PackagePath="analyzers/dotnet" Visible="false" />
</ItemGroup>

<ItemGroup Label="CLSCompliant">
<AssemblyAttribute Include="System.CLSCompliantAttribute">
<_Parameter1>true</_Parameter1>
</AssemblyAttribute>
</ItemGroup>

<PropertyGroup Label="Trimmable" Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net6.0'))">
<IsAotCompatible>true</IsAotCompatible>
<EnableTrimAnalyzer>true</EnableTrimAnalyzer>
<IsTrimmable>true</IsTrimmable>
<SuppressTrimAnalysisWarnings>false</SuppressTrimAnalysisWarnings>
<TrimmerSingleWarn>false</TrimmerSingleWarn>
</PropertyGroup>

</Project>
15 changes: 15 additions & 0 deletions src/libs/CSharpToJsonSchema/GenerateJsonSchemaAttribute.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// ReSharper disable once CheckNamespace
namespace CSharpToJsonSchema;

/// <summary>
///
/// </summary>
[AttributeUsage(AttributeTargets.Interface)]
[System.Diagnostics.Conditional("GENERATE_JSON_SCHEMA_ATTRIBUTES")]
public sealed class GenerateJsonSchemaAttribute : Attribute
{
/// <summary>
///
/// </summary>
public bool Strict { get; set; }
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// ReSharper disable once CheckNamespace
namespace OpenAI;
namespace CSharpToJsonSchema;

/// <summary>
///
Expand Down
42 changes: 42 additions & 0 deletions src/libs/CSharpToJsonSchema/Tool.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#nullable enable

namespace CSharpToJsonSchema;

/// <summary>
///
/// </summary>
public sealed partial class Tool
{
/// <summary>
/// The name of the function to be called. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64.
/// </summary>
[global::System.Text.Json.Serialization.JsonPropertyName("name")]
[global::System.Text.Json.Serialization.JsonRequired]
public string? Name { get; set; }

/// <summary>
/// A description of what the function does, used by the model to choose when and how to call the function.
/// </summary>
[global::System.Text.Json.Serialization.JsonPropertyName("description")]
public string? Description { get; set; }

/// <summary>
/// The parameters the functions accepts, described as a JSON Schema object. See the [guide](/docs/guides/function-calling) for examples, and the [JSON Schema reference](https://json-schema.org/understanding-json-schema/) for documentation about the format. <br/>
/// Omitting `parameters` defines a function with an empty parameter list.
/// </summary>
[global::System.Text.Json.Serialization.JsonPropertyName("parameters")]
public object? Parameters { get; set; }

/// <summary>
/// Whether to enable strict schema adherence when generating the function call. If set to true, the model will follow the exact schema defined in the `parameters` field. Only a subset of JSON Schema is supported when `strict` is `true`. Learn more about Structured Outputs in the [function calling guide](docs/guides/function-calling).<br/>
/// Default Value: false
/// </summary>
[global::System.Text.Json.Serialization.JsonPropertyName("strict")]
public bool? Strict { get; set; } = false;

/// <summary>
/// Additional properties that are not explicitly defined in the schema
/// </summary>
[global::System.Text.Json.Serialization.JsonExtensionData]
public global::System.Collections.Generic.IDictionary<string, object> AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary<string, object>();
}
Loading

0 comments on commit 5ff2342

Please sign in to comment.