From 32664fe5d10a6b92f533a30e07e37af7cec1ce41 Mon Sep 17 00:00:00 2001 From: Richasy Date: Fri, 8 Nov 2024 21:08:56 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=A4=84=E7=90=86=E4=B8=8A=E6=B8=B8=20sema?= =?UTF-8?q?ntic-kernel=20=E6=9B=B4=E6=96=B0=E6=89=80=E5=BC=95=E5=85=A5?= =?UTF-8?q?=E7=9A=84=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Constants/AzureOpenAIVersion.cs | 139 ------------------ .../Providers/OpenAIProvider.cs | 2 +- .../RodelAudio.Core/RodelAudio.Core.csproj | 1 + .../Providers/AzureOpenAIProvider.cs | 24 +-- .../RodelChat.Core/Providers/ProviderBase.cs | 11 +- src/Core/RodelChat.Core/RodelChat.Core.csproj | 1 + .../Client/ChatClientConfiguration.cs | 7 - src/Core/RodelDraw.Core/DrawClient.Helper.cs | 4 +- src/Core/RodelDraw.Core/DrawClient.cs | 2 +- .../Providers/AzureOpenAIProvider.cs | 21 +-- .../Providers/HunYuanProvider.cs | 10 +- .../Providers/OpenAIProvider.cs | 13 +- .../Providers/QianFanProvider.cs | 11 +- .../Providers/SparkDeskProvider.cs | 10 +- src/Core/RodelDraw.Core/RodelDraw.Core.csproj | 1 + .../RodelDraw.Interfaces/Client/IProvider.cs | 2 +- .../Client/DrawClientConfiguration.cs | 10 +- .../RodelDraw.Models/Client/DrawParameters.cs | 40 +++++ .../AzureOpenAIChatConfigSettingSection.xaml | 17 --- ...zureOpenAIChatConfigSettingSection.xaml.cs | 24 --- .../AzureOpenAIDrawConfigSettingSection.xaml | 17 --- ...zureOpenAIDrawConfigSettingSection.xaml.cs | 29 +--- .../Chat/AzureOpenAIChatConfigSection.xaml | 13 -- .../Chat/AzureOpenAIChatConfigSection.xaml.cs | 32 +--- .../Draw/AzureOpenAIDrawConfigSection.xaml | 13 -- .../Draw/AzureOpenAIDrawConfigSection.xaml.cs | 32 +--- .../StartupPageViewModel.cs | 1 - src/Libs/Migration.V1/MigrationUtils.cs | 1 - src/Libs/WinUI.Share | 2 +- src/Libs/semantic-kernel | 2 +- src/RodelAgent.sln | 27 ++++ 31 files changed, 104 insertions(+), 415 deletions(-) delete mode 100644 src/Core/RodelAgent.Models/Constants/AzureOpenAIVersion.cs create mode 100644 src/Core/RodelDraw.Models/Client/DrawParameters.cs diff --git a/src/Core/RodelAgent.Models/Constants/AzureOpenAIVersion.cs b/src/Core/RodelAgent.Models/Constants/AzureOpenAIVersion.cs deleted file mode 100644 index cc47797..0000000 --- a/src/Core/RodelAgent.Models/Constants/AzureOpenAIVersion.cs +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright (c) Rodel. All rights reserved. - -using System; -using System.Text.Json; -using System.Text.Json.Serialization; - -namespace RodelAgent.Models.Constants; - -/// -/// Azure OpenAI 服务版本. -/// -[JsonConverter(typeof(AzureOpenAIVersionConverter))] -public enum AzureOpenAIVersion -{ - /// - /// Service version "2022-12-01". - /// - V2022_12_01 = 0, - - /// - /// Service version "2023-05-15". - /// - V2023_05_15, - - /// - /// Service version "2023-06-01-preview". - /// - V2023_06_01_Preview, - - /// - /// Service version "2023-10-01-preview". - /// - V2023_10_01_Preview, - - /// - /// Service version "2024-02-15-preview". - /// - V2024_02_15_Preview, - - /// - /// Service version "2024-03-01-preview". - /// - V2024_03_01_Preview, - - /// - /// Service version "2024-02-01". - /// - V2024_02_01, -} - -/// -/// Azure OpenAI 服务版本转换器. -/// -internal sealed class AzureOpenAIVersionConverter : JsonConverter -{ - /// - public override AzureOpenAIVersion Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) - { - var version = reader.GetString(); - if (string.IsNullOrEmpty(version)) - { - return AzureOpenAIVersion.V2024_02_01; - } - - if (version.Equals("2024-02-01")) - { - return AzureOpenAIVersion.V2024_02_01; - } - - if (version.Equals("2024-03-01-preview", StringComparison.OrdinalIgnoreCase)) - { - return AzureOpenAIVersion.V2024_03_01_Preview; - } - - if (version.Equals("2024-02-15-preview", StringComparison.OrdinalIgnoreCase)) - { - return AzureOpenAIVersion.V2024_02_15_Preview; - } - - if (version.Equals("2023-10-01-preview", StringComparison.OrdinalIgnoreCase)) - { - return AzureOpenAIVersion.V2023_10_01_Preview; - } - - if (version.Equals("2023-06-01-preview", StringComparison.OrdinalIgnoreCase)) - { - return AzureOpenAIVersion.V2023_06_01_Preview; - } - - if (version.Equals("2023-05-15")) - { - return AzureOpenAIVersion.V2023_05_15; - } - - if (version.Equals("2022-12-01")) - { - return AzureOpenAIVersion.V2022_12_01; - } - - throw new JsonException($"Unexpected Azure OpenAI version: {version}"); - } - - /// - public override void Write(Utf8JsonWriter writer, AzureOpenAIVersion value, JsonSerializerOptions options) - { - if (value == AzureOpenAIVersion.V2024_02_01) - { - writer.WriteStringValue("2024-02-01"); - } - else if (value == AzureOpenAIVersion.V2024_03_01_Preview) - { - writer.WriteStringValue("2024-03-01-preview"); - } - else if (value == AzureOpenAIVersion.V2024_02_15_Preview) - { - writer.WriteStringValue("2024-02-15-preview"); - } - else if (value == AzureOpenAIVersion.V2023_10_01_Preview) - { - writer.WriteStringValue("2023-10-01-preview"); - } - else if (value == AzureOpenAIVersion.V2023_06_01_Preview) - { - writer.WriteStringValue("2023-06-01-preview"); - } - else if (value == AzureOpenAIVersion.V2023_05_15) - { - writer.WriteStringValue("2023-05-15"); - } - else if (value == AzureOpenAIVersion.V2022_12_01) - { - writer.WriteStringValue("2022-12-01"); - } - else - { - throw new JsonException($"Unexpected Azure OpenAI version: {value}"); - } - } -} diff --git a/src/Core/RodelAudio.Core/Providers/OpenAIProvider.cs b/src/Core/RodelAudio.Core/Providers/OpenAIProvider.cs index 5dfb18a..564115f 100644 --- a/src/Core/RodelAudio.Core/Providers/OpenAIProvider.cs +++ b/src/Core/RodelAudio.Core/Providers/OpenAIProvider.cs @@ -46,7 +46,7 @@ public PromptExecutionSettings ConvertExecutionSettings(AudioSession sessionData if (ShouldRecreateKernel(modelId)) { Kernel = Kernel.CreateBuilder() - .AddOpenAITextToAudio(AccessKey, modelId, BaseUri, OrganizationId) + .AddOpenAITextToAudio(AccessKey, modelId, BaseUri?.ToString(), OrganizationId) .Build(); } diff --git a/src/Core/RodelAudio.Core/RodelAudio.Core.csproj b/src/Core/RodelAudio.Core/RodelAudio.Core.csproj index 700515b..c5d5029 100644 --- a/src/Core/RodelAudio.Core/RodelAudio.Core.csproj +++ b/src/Core/RodelAudio.Core/RodelAudio.Core.csproj @@ -7,6 +7,7 @@ + diff --git a/src/Core/RodelChat.Core/Providers/AzureOpenAIProvider.cs b/src/Core/RodelChat.Core/Providers/AzureOpenAIProvider.cs index 5b9a193..3d38d95 100644 --- a/src/Core/RodelChat.Core/Providers/AzureOpenAIProvider.cs +++ b/src/Core/RodelChat.Core/Providers/AzureOpenAIProvider.cs @@ -1,8 +1,6 @@ // Copyright (c) Rodel. All rights reserved. -using Azure.AI.OpenAI; using Microsoft.SemanticKernel; -using RodelAgent.Models.Constants; using RodelChat.Interfaces.Client; using RodelChat.Models.Client; @@ -20,38 +18,18 @@ public AzureOpenAIProvider(AzureOpenAIClientConfig config) : base(config.Key, config.CustomModels) { SetBaseUri(config.Endpoint); - Version = config.Version; } - /// - /// 获取 API 版本. - /// - private AzureOpenAIVersion Version { get; } - /// public Kernel? GetOrCreateKernel(string modelId) { if (ShouldRecreateKernel(modelId)) { Kernel = Kernel.CreateBuilder() - .AddAzureOpenAIChatCompletion(modelId, BaseUri.AbsoluteUri, AccessKey, apiVersion: ConvertAzureOpenAIVersion(Version), modelId: modelId) + .AddAzureOpenAIChatCompletion(modelId, BaseUri.AbsoluteUri, AccessKey, modelId: modelId) .Build(); } return Kernel; } - - private static OpenAIClientOptions.ServiceVersion ConvertAzureOpenAIVersion(AzureOpenAIVersion version) - { - return version switch - { - AzureOpenAIVersion.V2022_12_01 => OpenAIClientOptions.ServiceVersion.V2022_12_01, - AzureOpenAIVersion.V2023_05_15 or AzureOpenAIVersion.V2023_10_01_Preview => OpenAIClientOptions.ServiceVersion.V2023_05_15, - AzureOpenAIVersion.V2023_06_01_Preview => OpenAIClientOptions.ServiceVersion.V2023_06_01_Preview, - AzureOpenAIVersion.V2024_02_15_Preview => OpenAIClientOptions.ServiceVersion.V2024_02_15_Preview, - AzureOpenAIVersion.V2024_03_01_Preview => OpenAIClientOptions.ServiceVersion.V2024_03_01_Preview, - AzureOpenAIVersion.V2024_02_01 => OpenAIClientOptions.ServiceVersion.V2024_02_15_Preview, - _ => throw new NotSupportedException("Version not supported."), - }; - } } diff --git a/src/Core/RodelChat.Core/Providers/ProviderBase.cs b/src/Core/RodelChat.Core/Providers/ProviderBase.cs index 65cfc0f..ab3a26c 100644 --- a/src/Core/RodelChat.Core/Providers/ProviderBase.cs +++ b/src/Core/RodelChat.Core/Providers/ProviderBase.cs @@ -135,7 +135,8 @@ public void Release() /// 会话. /// 执行设置. public virtual PromptExecutionSettings ConvertExecutionSettings(ChatSessionPreset sessionData) - => new OpenAIPromptExecutionSettings + { + var settings = new OpenAIPromptExecutionSettings { PresencePenalty = sessionData.Parameters.GetValueOrDefault(nameof(OpenAIChatParameters.FrequencyPenalty)), FrequencyPenalty = sessionData.Parameters.GetValueOrDefault(nameof(OpenAIChatParameters.PresencePenalty)), @@ -150,6 +151,14 @@ public virtual PromptExecutionSettings ConvertExecutionSettings(ChatSessionPrese ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions, }; + if (settings.MaxTokens == 0) + { + settings.MaxTokens = null; + } + + return settings; + } + internal static string GetKernelModelId(Kernel? kernel) { if (kernel == null) diff --git a/src/Core/RodelChat.Core/RodelChat.Core.csproj b/src/Core/RodelChat.Core/RodelChat.Core.csproj index e603c5a..085337a 100644 --- a/src/Core/RodelChat.Core/RodelChat.Core.csproj +++ b/src/Core/RodelChat.Core/RodelChat.Core.csproj @@ -10,6 +10,7 @@ + diff --git a/src/Core/RodelChat.Models/Client/ChatClientConfiguration.cs b/src/Core/RodelChat.Models/Client/ChatClientConfiguration.cs index 37ab702..049172f 100644 --- a/src/Core/RodelChat.Models/Client/ChatClientConfiguration.cs +++ b/src/Core/RodelChat.Models/Client/ChatClientConfiguration.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Text.Json.Serialization; -using RodelAgent.Models.Constants; namespace RodelChat.Models.Client; @@ -149,12 +148,6 @@ public class OpenAIClientConfig : ClientEndpointConfigBase /// public class AzureOpenAIClientConfig : ClientEndpointConfigBase { - /// - /// 版本. - /// - [JsonPropertyName("version")] - public AzureOpenAIVersion Version { get; set; } = AzureOpenAIVersion.V2024_02_01; - /// public override bool IsValid() { diff --git a/src/Core/RodelDraw.Core/DrawClient.Helper.cs b/src/Core/RodelDraw.Core/DrawClient.Helper.cs index e42436f..e197dc4 100644 --- a/src/Core/RodelDraw.Core/DrawClient.Helper.cs +++ b/src/Core/RodelDraw.Core/DrawClient.Helper.cs @@ -13,8 +13,8 @@ namespace RodelDraw.Core; /// public sealed partial class DrawClient { - private DrawExecutionSettings GetExecutionSettings(DrawSession session) - => GetProvider(session.Provider).ConvertExecutionSettings(session); + private DrawParameters GetExecutionSettings(DrawSession session) + => GetProvider(session.Provider).ConvertDrawParameters(session); private Kernel? FindKernelProvider(ProviderType type, string modelId) => GetProvider(type).GetOrCreateKernel(modelId); diff --git a/src/Core/RodelDraw.Core/DrawClient.cs b/src/Core/RodelDraw.Core/DrawClient.cs index 843b7db..eb13497 100644 --- a/src/Core/RodelDraw.Core/DrawClient.cs +++ b/src/Core/RodelDraw.Core/DrawClient.cs @@ -38,7 +38,7 @@ public async Task DrawAsync(DrawSession session, CancellationToken cance session.Parameters ??= GetDrawParameters(session.Provider); var settings = GetExecutionSettings(session); var drawService = kernel.GetRequiredService(); - var result = await drawService.GenerateImageAsync(session.Request.Prompt, settings, cancellationToken: cancellationToken).ConfigureAwait(false); + var result = await drawService.GenerateImageAsync(session.Request.Prompt, settings.Width, settings.Height, cancellationToken: cancellationToken).ConfigureAwait(false); session.Time = DateTimeOffset.Now; if (result.StartsWith("http")) { diff --git a/src/Core/RodelDraw.Core/Providers/AzureOpenAIProvider.cs b/src/Core/RodelDraw.Core/Providers/AzureOpenAIProvider.cs index 5cfabf7..0759215 100644 --- a/src/Core/RodelDraw.Core/Providers/AzureOpenAIProvider.cs +++ b/src/Core/RodelDraw.Core/Providers/AzureOpenAIProvider.cs @@ -1,11 +1,8 @@ // Copyright (c) Rodel. All rights reserved. -using System.Text.Json; using System.Text.Json.Serialization; using Microsoft.SemanticKernel; -using Microsoft.SemanticKernel.Connectors.OpenAI; using RodelAgent.Models.Abstractions; -using RodelAgent.Models.Constants; using RodelDraw.Interfaces.Client; using RodelDraw.Models.Client; @@ -23,28 +20,16 @@ public AzureOpenAIProvider(AzureOpenAIClientConfig config) : base(config.Key, config.CustomModels) { SetBaseUri(config.Endpoint); - Version = config.Version; } - /// - /// 获取 API 版本. - /// - private AzureOpenAIVersion Version { get; } - /// - public DrawExecutionSettings ConvertExecutionSettings(DrawSession sessionData) + public DrawParameters ConvertDrawParameters(DrawSession sessionData) { var size = sessionData.Request?.Size ?? "1024x1024"; var split = size.Split('x'); var width = int.Parse(split[0]); var height = int.Parse(split[1]); - return new OpenAIDrawExecutionSettings - { - ModelId = sessionData.Model, - Width = width, - Height = height, - Number = sessionData.Parameters.GetValueOrDefault(nameof(AzureOpenAIDrawParameters.Number)), - }; + return new DrawParameters(sessionData.Model, width, height); } /// @@ -53,7 +38,7 @@ public DrawExecutionSettings ConvertExecutionSettings(DrawSession sessionData) if (ShouldRecreateKernel(modelId)) { Kernel = Kernel.CreateBuilder() - .AddAzureOpenAITextToImage(modelId, endpoint: BaseUri.AbsoluteUri, apiKey: AccessKey, apiVersion: JsonSerializer.Serialize(Version), modelId: modelId) + .AddAzureOpenAITextToImage(modelId, endpoint: BaseUri.AbsoluteUri, apiKey: AccessKey, modelId: modelId) .Build(); } diff --git a/src/Core/RodelDraw.Core/Providers/HunYuanProvider.cs b/src/Core/RodelDraw.Core/Providers/HunYuanProvider.cs index be4ed14..a753470 100644 --- a/src/Core/RodelDraw.Core/Providers/HunYuanProvider.cs +++ b/src/Core/RodelDraw.Core/Providers/HunYuanProvider.cs @@ -1,7 +1,6 @@ // Copyright (c) Rodel. All rights reserved. using Microsoft.SemanticKernel; -using Microsoft.SemanticKernel.Connectors.HunYuan; using RodelDraw.Interfaces.Client; using RodelDraw.Models.Client; @@ -25,18 +24,13 @@ public HunYuanProvider(HunYuanClientConfig config) private string Secret { get; set; } /// - public DrawExecutionSettings ConvertExecutionSettings(DrawSession sessionData) + public DrawParameters ConvertDrawParameters(DrawSession sessionData) { var size = sessionData.Request?.Size ?? "1024x1024"; var split = size.Split('x'); var width = int.Parse(split[0]); var height = int.Parse(split[1]); - return new HunYuanDrawExecutionSettings - { - ModelId = sessionData.Model, - Width = width, - Height = height, - }; + return new DrawParameters(sessionData.Model, width, height); } /// diff --git a/src/Core/RodelDraw.Core/Providers/OpenAIProvider.cs b/src/Core/RodelDraw.Core/Providers/OpenAIProvider.cs index 2c1d819..5690141 100644 --- a/src/Core/RodelDraw.Core/Providers/OpenAIProvider.cs +++ b/src/Core/RodelDraw.Core/Providers/OpenAIProvider.cs @@ -2,7 +2,6 @@ using System.Text.Json.Serialization; using Microsoft.SemanticKernel; -using Microsoft.SemanticKernel.Connectors.OpenAI; using RodelAgent.Models.Abstractions; using RodelDraw.Interfaces.Client; using RodelDraw.Models.Client; @@ -31,19 +30,13 @@ public OpenAIProvider(OpenAIClientConfig config) private string OrganizationId { get; } /// - public DrawExecutionSettings ConvertExecutionSettings(DrawSession sessionData) + public DrawParameters ConvertDrawParameters(DrawSession sessionData) { var size = sessionData.Request?.Size ?? "1024x1024"; var split = size.Split('x'); var width = int.Parse(split[0]); var height = int.Parse(split[1]); - return new OpenAIDrawExecutionSettings - { - ModelId = sessionData.Model, - Width = width, - Height = height, - Number = sessionData.Parameters.GetValueOrDefault(nameof(OpenAIDrawParameters.Number)), - }; + return new DrawParameters(sessionData.Model, width, height); } /// @@ -52,7 +45,7 @@ public DrawExecutionSettings ConvertExecutionSettings(DrawSession sessionData) if (ShouldRecreateKernel(modelId)) { Kernel = Kernel.CreateBuilder() - .AddOpenAITextToImage(AccessKey, modelId, BaseUri, OrganizationId) + .AddOpenAITextToImage(AccessKey, OrganizationId, modelId, BaseUri?.ToString()) .Build(); } diff --git a/src/Core/RodelDraw.Core/Providers/QianFanProvider.cs b/src/Core/RodelDraw.Core/Providers/QianFanProvider.cs index b34af50..da55aa7 100644 --- a/src/Core/RodelDraw.Core/Providers/QianFanProvider.cs +++ b/src/Core/RodelDraw.Core/Providers/QianFanProvider.cs @@ -1,7 +1,6 @@ // Copyright (c) Rodel. All rights reserved. using Microsoft.SemanticKernel; -using Microsoft.SemanticKernel.Connectors.QianFan; using RodelDraw.Interfaces.Client; using RodelDraw.Models.Client; @@ -25,19 +24,13 @@ public QianFanProvider(QianFanClientConfig config) private string SecretKey { get; } /// - public DrawExecutionSettings ConvertExecutionSettings(DrawSession sessionData) + public DrawParameters ConvertDrawParameters(DrawSession sessionData) { var size = sessionData.Request?.Size ?? "768x768"; var split = size.Split('x'); var width = int.Parse(split[0]); var height = int.Parse(split[1]); - return new QianFanDrawExecutionSettings - { - ModelId = sessionData.Model, - Width = width, - Height = height, - NegativePrompt = sessionData?.Request?.NegativePrompt, - }; + return new DrawParameters(sessionData.Model, width, height, sessionData?.Request?.NegativePrompt); } /// diff --git a/src/Core/RodelDraw.Core/Providers/SparkDeskProvider.cs b/src/Core/RodelDraw.Core/Providers/SparkDeskProvider.cs index 413ad35..6a345b3 100644 --- a/src/Core/RodelDraw.Core/Providers/SparkDeskProvider.cs +++ b/src/Core/RodelDraw.Core/Providers/SparkDeskProvider.cs @@ -1,7 +1,6 @@ // Copyright (c) Rodel. All rights reserved. using Microsoft.SemanticKernel; -using Microsoft.SemanticKernel.Connectors.SparkDesk; using RodelDraw.Interfaces.Client; using RodelDraw.Models.Client; @@ -28,18 +27,13 @@ public SparkDeskProvider(SparkDeskClientConfig config) private string AppId { get; } /// - public DrawExecutionSettings ConvertExecutionSettings(DrawSession sessionData) + public DrawParameters ConvertDrawParameters(DrawSession sessionData) { var size = sessionData.Request?.Size ?? "512x512"; var split = size.Split('x'); var width = int.Parse(split[0]); var height = int.Parse(split[1]); - return new SparkDeskDrawExecutionSettings - { - ModelId = sessionData.Model, - Width = width, - Height = height, - }; + return new DrawParameters(sessionData.Model, width, height); } /// diff --git a/src/Core/RodelDraw.Core/RodelDraw.Core.csproj b/src/Core/RodelDraw.Core/RodelDraw.Core.csproj index cf0c2b2..d758bc4 100644 --- a/src/Core/RodelDraw.Core/RodelDraw.Core.csproj +++ b/src/Core/RodelDraw.Core/RodelDraw.Core.csproj @@ -7,6 +7,7 @@ + diff --git a/src/Core/RodelDraw.Interfaces/Client/IProvider.cs b/src/Core/RodelDraw.Interfaces/Client/IProvider.cs index 1ff5cd0..ecab34a 100644 --- a/src/Core/RodelDraw.Interfaces/Client/IProvider.cs +++ b/src/Core/RodelDraw.Interfaces/Client/IProvider.cs @@ -36,7 +36,7 @@ public interface IProvider /// /// 会话. /// 执行设置. - DrawExecutionSettings ConvertExecutionSettings(DrawSession sessionData); + DrawParameters ConvertDrawParameters(DrawSession sessionData); /// /// 获取模型列表. diff --git a/src/Core/RodelDraw.Models/Client/DrawClientConfiguration.cs b/src/Core/RodelDraw.Models/Client/DrawClientConfiguration.cs index ed5145d..0cfb552 100644 --- a/src/Core/RodelDraw.Models/Client/DrawClientConfiguration.cs +++ b/src/Core/RodelDraw.Models/Client/DrawClientConfiguration.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Text.Json.Serialization; -using RodelAgent.Models.Constants; namespace RodelDraw.Models.Client; @@ -59,19 +58,12 @@ public class OpenAIClientConfig : ClientEndpointConfigBase /// public class AzureOpenAIClientConfig : ClientEndpointConfigBase { - /// - /// 版本. - /// - [JsonPropertyName("version")] - public AzureOpenAIVersion Version { get; set; } = AzureOpenAIVersion.V2024_02_01; - /// public override bool IsValid() { return base.IsValid() && !string.IsNullOrEmpty(Endpoint) - && CustomModels != null - && CustomModels.Count > 0; + && CustomModels?.Count > 0; } } diff --git a/src/Core/RodelDraw.Models/Client/DrawParameters.cs b/src/Core/RodelDraw.Models/Client/DrawParameters.cs new file mode 100644 index 0000000..bd8764f --- /dev/null +++ b/src/Core/RodelDraw.Models/Client/DrawParameters.cs @@ -0,0 +1,40 @@ +// Copyright (c) Rodel. All rights reserved. + +namespace RodelDraw.Models.Client; + +/// +/// 绘图参数. +/// +public sealed class DrawParameters +{ + /// + /// Initializes a new instance of the class. + /// + public DrawParameters(string modelId, int width, int height, string? negativePrompt = default) + { + ModelId = modelId; + Width = width; + Height = height; + NegativePrompt = negativePrompt; + } + + /// + /// 模型标识. + /// + public string ModelId { get; set; } + + /// + /// 图像宽度. + /// + public int Width { get; set; } + + /// + /// 图像高度. + /// + public int Height { get; set; } + + /// + /// 负面提示词. + /// + public string? NegativePrompt { get; set; } +} diff --git a/src/Desktop/RodelAgent.UI/Controls/Settings/AzureOpenAIChatConfigSettingSection.xaml b/src/Desktop/RodelAgent.UI/Controls/Settings/AzureOpenAIChatConfigSettingSection.xaml index 093a584..f26c85c 100644 --- a/src/Desktop/RodelAgent.UI/Controls/Settings/AzureOpenAIChatConfigSettingSection.xaml +++ b/src/Desktop/RodelAgent.UI/Controls/Settings/AzureOpenAIChatConfigSettingSection.xaml @@ -40,23 +40,6 @@ PlaceholderText="https://example.openai.azure.com" TextChanged="OnEndpointBoxTextChanged" /> - - - - - - - - - @@ -40,7 +37,6 @@ private void OnKeyBoxLoaded(object sender, RoutedEventArgs e) { KeyBox.Password = ViewModel.Config?.Key ?? string.Empty; EndpointBox.Text = (ViewModel.Config as ClientEndpointConfigBase)?.Endpoint ?? string.Empty; - VersionComboBox.SelectedIndex = (int)((AzureOpenAIClientConfig)ViewModel.Config).Version; KeyBox.Focus(FocusState.Programmatic); } @@ -56,26 +52,6 @@ private void OnEndpointBoxTextChanged(object sender, TextChangedEventArgs e) ViewModel.CheckCurrentConfig(); } - private void InitializeApiVersion() - { - var versions = Enum.GetValues(); - var json = JsonSerializer.Serialize(versions); - var stringVersions = JsonSerializer.Deserialize>(json); - VersionComboBox.ItemsSource = stringVersions; - } - - private void OnVersionChanged(object sender, SelectionChangedEventArgs e) - { - var index = VersionComboBox.SelectedIndex; - if (index < 0) - { - return; - } - - var version = (AzureOpenAIVersion)index; - ((AzureOpenAIClientConfig)ViewModel.Config).Version = version; - } - private void OnPredefinedModelsButtonClick(object sender, RoutedEventArgs e) => FlyoutBase.ShowAttachedFlyout(sender as FrameworkElement); } diff --git a/src/Desktop/RodelAgent.UI/Controls/Settings/AzureOpenAIDrawConfigSettingSection.xaml b/src/Desktop/RodelAgent.UI/Controls/Settings/AzureOpenAIDrawConfigSettingSection.xaml index 4b91724..e6c742c 100644 --- a/src/Desktop/RodelAgent.UI/Controls/Settings/AzureOpenAIDrawConfigSettingSection.xaml +++ b/src/Desktop/RodelAgent.UI/Controls/Settings/AzureOpenAIDrawConfigSettingSection.xaml @@ -40,23 +40,6 @@ PlaceholderText="https://example.openai.azure.com" TextChanged="OnEndpointBoxTextChanged" /> - - - - - - - - - /// Initializes a new instance of the class. /// - public AzureOpenAIDrawConfigSettingSection() - { - InitializeComponent(); - InitializeApiVersion(); - } + public AzureOpenAIDrawConfigSettingSection() => InitializeComponent(); /// protected override void OnViewModelChanged(DrawServiceItemViewModel? oldValue, DrawServiceItemViewModel? newValue) @@ -40,7 +34,6 @@ private void OnKeyBoxLoaded(object sender, RoutedEventArgs e) { KeyBox.Password = ViewModel.Config?.Key ?? string.Empty; EndpointBox.Text = (ViewModel.Config as ClientEndpointConfigBase)?.Endpoint ?? string.Empty; - VersionComboBox.SelectedIndex = (int)((AzureOpenAIClientConfig)ViewModel.Config).Version; KeyBox.Focus(FocusState.Programmatic); } @@ -55,24 +48,4 @@ private void OnEndpointBoxTextChanged(object sender, TextChangedEventArgs e) ((ClientEndpointConfigBase)ViewModel.Config).Endpoint = EndpointBox.Text; ViewModel.CheckCurrentConfig(); } - - private void InitializeApiVersion() - { - var versions = Enum.GetValues(); - var json = JsonSerializer.Serialize(versions); - var stringVersions = JsonSerializer.Deserialize>(json); - VersionComboBox.ItemsSource = stringVersions; - } - - private void OnVersionChanged(object sender, SelectionChangedEventArgs e) - { - var index = VersionComboBox.SelectedIndex; - if (index < 0) - { - return; - } - - var version = (AzureOpenAIVersion)index; - ((AzureOpenAIClientConfig)ViewModel.Config).Version = version; - } } diff --git a/src/Desktop/RodelAgent.UI/Controls/Startup/Chat/AzureOpenAIChatConfigSection.xaml b/src/Desktop/RodelAgent.UI/Controls/Startup/Chat/AzureOpenAIChatConfigSection.xaml index 8d77a77..e5933cd 100644 --- a/src/Desktop/RodelAgent.UI/Controls/Startup/Chat/AzureOpenAIChatConfigSection.xaml +++ b/src/Desktop/RodelAgent.UI/Controls/Startup/Chat/AzureOpenAIChatConfigSection.xaml @@ -12,18 +12,5 @@ - - - - - - - diff --git a/src/Desktop/RodelAgent.UI/Controls/Startup/Chat/AzureOpenAIChatConfigSection.xaml.cs b/src/Desktop/RodelAgent.UI/Controls/Startup/Chat/AzureOpenAIChatConfigSection.xaml.cs index f383bd4..3aeaba6 100644 --- a/src/Desktop/RodelAgent.UI/Controls/Startup/Chat/AzureOpenAIChatConfigSection.xaml.cs +++ b/src/Desktop/RodelAgent.UI/Controls/Startup/Chat/AzureOpenAIChatConfigSection.xaml.cs @@ -1,8 +1,6 @@ // Copyright (c) Rodel. All rights reserved. using System.Diagnostics; -using System.Text.Json; -using RodelAgent.Models.Constants; using RodelAgent.UI.ViewModels.Items; using RodelChat.Models.Client; @@ -16,11 +14,7 @@ public sealed partial class AzureOpenAIChatConfigSection : ChatServiceConfigCont /// /// Initializes a new instance of the class. /// - public AzureOpenAIChatConfigSection() - { - InitializeComponent(); - InitializeApiVersion(); - } + public AzureOpenAIChatConfigSection() => InitializeComponent(); /// protected override void OnViewModelChanged(ChatServiceItemViewModel? oldValue, ChatServiceItemViewModel? newValue) @@ -34,28 +28,4 @@ protected override void OnViewModelChanged(ChatServiceItemViewModel? oldValue, C Debug.Assert(ViewModel.Config != null, "ViewModel.Config should not be null."); ViewModel.CheckCurrentConfig(); } - - /// - protected override void OnControlLoaded() - => VersionComboBox.SelectedIndex = (int)((AzureOpenAIClientConfig)ViewModel.Config).Version; - - private void InitializeApiVersion() - { - var versions = Enum.GetValues(); - var json = JsonSerializer.Serialize(versions); - var stringVersions = JsonSerializer.Deserialize>(json); - VersionComboBox.ItemsSource = stringVersions; - } - - private void OnVersionChanged(object sender, SelectionChangedEventArgs e) - { - var index = VersionComboBox.SelectedIndex; - if (index < 0) - { - return; - } - - var version = (AzureOpenAIVersion)index; - ((AzureOpenAIClientConfig)ViewModel.Config).Version = version; - } } diff --git a/src/Desktop/RodelAgent.UI/Controls/Startup/Draw/AzureOpenAIDrawConfigSection.xaml b/src/Desktop/RodelAgent.UI/Controls/Startup/Draw/AzureOpenAIDrawConfigSection.xaml index 67e5568..4444891 100644 --- a/src/Desktop/RodelAgent.UI/Controls/Startup/Draw/AzureOpenAIDrawConfigSection.xaml +++ b/src/Desktop/RodelAgent.UI/Controls/Startup/Draw/AzureOpenAIDrawConfigSection.xaml @@ -12,18 +12,5 @@ - - - - - - - diff --git a/src/Desktop/RodelAgent.UI/Controls/Startup/Draw/AzureOpenAIDrawConfigSection.xaml.cs b/src/Desktop/RodelAgent.UI/Controls/Startup/Draw/AzureOpenAIDrawConfigSection.xaml.cs index 88036c3..e2b32b8 100644 --- a/src/Desktop/RodelAgent.UI/Controls/Startup/Draw/AzureOpenAIDrawConfigSection.xaml.cs +++ b/src/Desktop/RodelAgent.UI/Controls/Startup/Draw/AzureOpenAIDrawConfigSection.xaml.cs @@ -1,8 +1,6 @@ // Copyright (c) Rodel. All rights reserved. using System.Diagnostics; -using System.Text.Json; -using RodelAgent.Models.Constants; using RodelAgent.UI.ViewModels.Items; using RodelDraw.Models.Client; @@ -16,11 +14,7 @@ public sealed partial class AzureOpenAIDrawConfigSection : DrawServiceConfigCont /// /// Initializes a new instance of the class. /// - public AzureOpenAIDrawConfigSection() - { - InitializeComponent(); - InitializeApiVersion(); - } + public AzureOpenAIDrawConfigSection() => InitializeComponent(); /// protected override void OnViewModelChanged(DrawServiceItemViewModel? oldValue, DrawServiceItemViewModel? newValue) @@ -34,28 +28,4 @@ protected override void OnViewModelChanged(DrawServiceItemViewModel? oldValue, D Debug.Assert(ViewModel.Config != null, "ViewModel.Config should not be null."); ViewModel.CheckCurrentConfig(); } - - /// - protected override void OnControlLoaded() - => VersionComboBox.SelectedIndex = (int)((AzureOpenAIClientConfig)ViewModel.Config).Version; - - private void InitializeApiVersion() - { - var versions = Enum.GetValues(); - var json = JsonSerializer.Serialize(versions); - var stringVersions = JsonSerializer.Deserialize>(json); - VersionComboBox.ItemsSource = stringVersions; - } - - private void OnVersionChanged(object sender, SelectionChangedEventArgs e) - { - var index = VersionComboBox.SelectedIndex; - if (index < 0) - { - return; - } - - var version = (AzureOpenAIVersion)index; - ((AzureOpenAIClientConfig)ViewModel.Config).Version = version; - } } diff --git a/src/Desktop/RodelAgent.UI/ViewModels/Pages/StartupPageViewModel/StartupPageViewModel.cs b/src/Desktop/RodelAgent.UI/ViewModels/Pages/StartupPageViewModel/StartupPageViewModel.cs index 2d25ed3..b32196a 100644 --- a/src/Desktop/RodelAgent.UI/ViewModels/Pages/StartupPageViewModel/StartupPageViewModel.cs +++ b/src/Desktop/RodelAgent.UI/ViewModels/Pages/StartupPageViewModel/StartupPageViewModel.cs @@ -296,7 +296,6 @@ private async Task InitializeOnlineDrawServicesAsync() { Endpoint = azureOpenAIConfig.Endpoint, Key = azureOpenAIConfig.Key, - Version = (RodelAgent.Models.Constants.AzureOpenAIVersion)(int)azureOpenAIConfig.Version, }); } } diff --git a/src/Libs/Migration.V1/MigrationUtils.cs b/src/Libs/Migration.V1/MigrationUtils.cs index 49a0221..5910e68 100644 --- a/src/Libs/Migration.V1/MigrationUtils.cs +++ b/src/Libs/Migration.V1/MigrationUtils.cs @@ -136,7 +136,6 @@ private async Task MigrateSecretDataAsync() { Key = metadata.First(p => p.Id == "AzureOpenAIAccessKey").Value, Endpoint = metadata.First(p => p.Id == "AzureOpenAIEndpoint").Value, - Version = RodelAgent.Models.Constants.AzureOpenAIVersion.V2024_02_01, }; var json = JsonSerializer.Serialize(aoaiConfig); diff --git a/src/Libs/WinUI.Share b/src/Libs/WinUI.Share index 0385bbe..92f95d2 160000 --- a/src/Libs/WinUI.Share +++ b/src/Libs/WinUI.Share @@ -1 +1 @@ -Subproject commit 0385bbe7147a32148d9a391962678088f0e16f04 +Subproject commit 92f95d2d6ee4d93156a5ee3e3f66f62c92a83ae7 diff --git a/src/Libs/semantic-kernel b/src/Libs/semantic-kernel index e6139d1..86b20b0 160000 --- a/src/Libs/semantic-kernel +++ b/src/Libs/semantic-kernel @@ -1 +1 @@ -Subproject commit e6139d1af374fc8a87b5cfad83b138de066a1794 +Subproject commit 86b20b0f437400d2986c936d5be958ea29f81e8d diff --git a/src/RodelAgent.sln b/src/RodelAgent.sln index b649fd3..095a453 100644 --- a/src/RodelAgent.sln +++ b/src/RodelAgent.sln @@ -113,6 +113,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Connectors.DouBao", "Libs\s EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Richasy.WinUI.Share", "Libs\WinUI.Share\src\Richasy.WinUI.Share.csproj", "{1FBF3551-0028-4BB1-99EF-AE2513A2F324}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Connectors.AzureOpenAI", "Libs\semantic-kernel\dotnet\src\Connectors\Connectors.AzureOpenAI\Connectors.AzureOpenAI.csproj", "{FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -1245,6 +1247,30 @@ Global {1FBF3551-0028-4BB1-99EF-AE2513A2F324}.Release|x64.Build.0 = Release|x64 {1FBF3551-0028-4BB1-99EF-AE2513A2F324}.Release|x86.ActiveCfg = Release|Any CPU {1FBF3551-0028-4BB1-99EF-AE2513A2F324}.Release|x86.Build.0 = Release|Any CPU + {FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6}.Debug|ARM64.Build.0 = Debug|Any CPU + {FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6}.Debug|x64.ActiveCfg = Debug|Any CPU + {FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6}.Debug|x64.Build.0 = Debug|Any CPU + {FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6}.Debug|x86.ActiveCfg = Debug|Any CPU + {FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6}.Debug|x86.Build.0 = Debug|Any CPU + {FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6}.Publish|Any CPU.ActiveCfg = Publish|Any CPU + {FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6}.Publish|Any CPU.Build.0 = Publish|Any CPU + {FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6}.Publish|ARM64.ActiveCfg = Publish|Any CPU + {FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6}.Publish|ARM64.Build.0 = Publish|Any CPU + {FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6}.Publish|x64.ActiveCfg = Publish|Any CPU + {FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6}.Publish|x64.Build.0 = Publish|Any CPU + {FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6}.Publish|x86.ActiveCfg = Publish|Any CPU + {FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6}.Publish|x86.Build.0 = Publish|Any CPU + {FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6}.Release|Any CPU.Build.0 = Release|Any CPU + {FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6}.Release|ARM64.ActiveCfg = Release|Any CPU + {FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6}.Release|ARM64.Build.0 = Release|Any CPU + {FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6}.Release|x64.ActiveCfg = Release|Any CPU + {FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6}.Release|x64.Build.0 = Release|Any CPU + {FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6}.Release|x86.ActiveCfg = Release|Any CPU + {FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1300,6 +1326,7 @@ Global {FBBCDEBB-135B-439D-906A-4E299D3F0A6E} = {4B9E7C1C-23A5-4F32-A3E5-88F38D466FC0} {24D8A332-C623-47EE-972B-E37785D54F88} = {4B9E7C1C-23A5-4F32-A3E5-88F38D466FC0} {1FBF3551-0028-4BB1-99EF-AE2513A2F324} = {4B9E7C1C-23A5-4F32-A3E5-88F38D466FC0} + {FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6} = {4B9E7C1C-23A5-4F32-A3E5-88F38D466FC0} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {B237A43F-37BA-406A-B5D0-24FB28F3F1E3} From f1088b7ca3dd917e9efc47b504cdab66de7ed836 Mon Sep 17 00:00:00 2001 From: Richasy Date: Fri, 8 Nov 2024 21:28:18 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=88=B0=E6=9C=80?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Directory.Packages.props | 8 ++++---- src/Libs/semantic-kernel | 2 +- src/RodelAgent.sln | 27 +++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index d97072f..0df3635 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -51,7 +51,7 @@ - + @@ -63,13 +63,13 @@ - - + + - + diff --git a/src/Libs/semantic-kernel b/src/Libs/semantic-kernel index 86b20b0..ea716b7 160000 --- a/src/Libs/semantic-kernel +++ b/src/Libs/semantic-kernel @@ -1 +1 @@ -Subproject commit 86b20b0f437400d2986c936d5be958ea29f81e8d +Subproject commit ea716b78dd1a091bea12db3bbe5b04fe667251a5 diff --git a/src/RodelAgent.sln b/src/RodelAgent.sln index 095a453..d930269 100644 --- a/src/RodelAgent.sln +++ b/src/RodelAgent.sln @@ -115,6 +115,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Richasy.WinUI.Share", "Libs EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Connectors.AzureOpenAI", "Libs\semantic-kernel\dotnet\src\Connectors\Connectors.AzureOpenAI\Connectors.AzureOpenAI.csproj", "{FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VectorData.Abstractions", "Libs\semantic-kernel\dotnet\src\Connectors\VectorData.Abstractions\VectorData.Abstractions.csproj", "{6A856DAA-898D-4974-9796-C503AD8D54E3}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -1271,6 +1273,30 @@ Global {FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6}.Release|x64.Build.0 = Release|Any CPU {FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6}.Release|x86.ActiveCfg = Release|Any CPU {FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6}.Release|x86.Build.0 = Release|Any CPU + {6A856DAA-898D-4974-9796-C503AD8D54E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6A856DAA-898D-4974-9796-C503AD8D54E3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6A856DAA-898D-4974-9796-C503AD8D54E3}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {6A856DAA-898D-4974-9796-C503AD8D54E3}.Debug|ARM64.Build.0 = Debug|Any CPU + {6A856DAA-898D-4974-9796-C503AD8D54E3}.Debug|x64.ActiveCfg = Debug|Any CPU + {6A856DAA-898D-4974-9796-C503AD8D54E3}.Debug|x64.Build.0 = Debug|Any CPU + {6A856DAA-898D-4974-9796-C503AD8D54E3}.Debug|x86.ActiveCfg = Debug|Any CPU + {6A856DAA-898D-4974-9796-C503AD8D54E3}.Debug|x86.Build.0 = Debug|Any CPU + {6A856DAA-898D-4974-9796-C503AD8D54E3}.Publish|Any CPU.ActiveCfg = Publish|Any CPU + {6A856DAA-898D-4974-9796-C503AD8D54E3}.Publish|Any CPU.Build.0 = Publish|Any CPU + {6A856DAA-898D-4974-9796-C503AD8D54E3}.Publish|ARM64.ActiveCfg = Publish|Any CPU + {6A856DAA-898D-4974-9796-C503AD8D54E3}.Publish|ARM64.Build.0 = Publish|Any CPU + {6A856DAA-898D-4974-9796-C503AD8D54E3}.Publish|x64.ActiveCfg = Publish|Any CPU + {6A856DAA-898D-4974-9796-C503AD8D54E3}.Publish|x64.Build.0 = Publish|Any CPU + {6A856DAA-898D-4974-9796-C503AD8D54E3}.Publish|x86.ActiveCfg = Publish|Any CPU + {6A856DAA-898D-4974-9796-C503AD8D54E3}.Publish|x86.Build.0 = Publish|Any CPU + {6A856DAA-898D-4974-9796-C503AD8D54E3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6A856DAA-898D-4974-9796-C503AD8D54E3}.Release|Any CPU.Build.0 = Release|Any CPU + {6A856DAA-898D-4974-9796-C503AD8D54E3}.Release|ARM64.ActiveCfg = Release|Any CPU + {6A856DAA-898D-4974-9796-C503AD8D54E3}.Release|ARM64.Build.0 = Release|Any CPU + {6A856DAA-898D-4974-9796-C503AD8D54E3}.Release|x64.ActiveCfg = Release|Any CPU + {6A856DAA-898D-4974-9796-C503AD8D54E3}.Release|x64.Build.0 = Release|Any CPU + {6A856DAA-898D-4974-9796-C503AD8D54E3}.Release|x86.ActiveCfg = Release|Any CPU + {6A856DAA-898D-4974-9796-C503AD8D54E3}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1327,6 +1353,7 @@ Global {24D8A332-C623-47EE-972B-E37785D54F88} = {4B9E7C1C-23A5-4F32-A3E5-88F38D466FC0} {1FBF3551-0028-4BB1-99EF-AE2513A2F324} = {4B9E7C1C-23A5-4F32-A3E5-88F38D466FC0} {FF2D4E73-724C-4F23-8B30-A3F7FDCB1AF6} = {4B9E7C1C-23A5-4F32-A3E5-88F38D466FC0} + {6A856DAA-898D-4974-9796-C503AD8D54E3} = {4B9E7C1C-23A5-4F32-A3E5-88F38D466FC0} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {B237A43F-37BA-406A-B5D0-24FB28F3F1E3}