From f0dcde6eadaaf83f538a8a64ac0db5fb3b52387d Mon Sep 17 00:00:00 2001 From: SergeyMenshykh Date: Thu, 1 Jun 2023 23:11:25 +0100 Subject: [PATCH 1/4] Copilot chat functionality updated to use new SK SDK API instead of obsolete one. --- .../CopilotChat/Controllers/ChatController.cs | 4 ++-- .../Extensions/SemanticKernelExtensions.cs | 11 ++++------ .../Skills/ChatSkills/ChatSkill.cs | 4 ++-- .../ChatSkills/ExternalInformationSkill.cs | 4 ++-- .../webapi/CopilotChatWebApi.csproj | 14 ++++++------- .../webapi/SemanticKernelExtensions.cs | 21 ++++++++----------- 6 files changed, 26 insertions(+), 32 deletions(-) diff --git a/samples/apps/copilot-chat-app/webapi/CopilotChat/Controllers/ChatController.cs b/samples/apps/copilot-chat-app/webapi/CopilotChat/Controllers/ChatController.cs index 55767805d2ed..52582051d9e0 100644 --- a/samples/apps/copilot-chat-app/webapi/CopilotChat/Controllers/ChatController.cs +++ b/samples/apps/copilot-chat-app/webapi/CopilotChat/Controllers/ChatController.cs @@ -142,13 +142,13 @@ await planner.Kernel.ImportOpenApiSkillFromFileAsync( { this._logger.LogInformation("Registering Jira Skill"); var authenticationProvider = new BasicAuthenticationProvider(() => { return Task.FromResult(openApiSkillsAuthHeaders.JiraAuthentication); }); - var hasServerUrlOverride = variables.Get("jira-server-url", out string serverUrlOverride); + var hasServerUrlOverride = variables.TryGetValue("jira-server-url", out string? serverUrlOverride); await planner.Kernel.ImportOpenApiSkillFromFileAsync( skillName: "JiraSkill", filePath: Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)!, "CopilotChat", "Skills", "OpenApiSkills/JiraSkill/openapi.json"), authCallback: authenticationProvider.AuthenticateRequestAsync, - serverUrlOverride: hasServerUrlOverride ? new Uri(serverUrlOverride) : null); + serverUrlOverride: hasServerUrlOverride ? new Uri(serverUrlOverride!) : null); } // Microsoft Graph diff --git a/samples/apps/copilot-chat-app/webapi/CopilotChat/Extensions/SemanticKernelExtensions.cs b/samples/apps/copilot-chat-app/webapi/CopilotChat/Extensions/SemanticKernelExtensions.cs index a8db2d5ad529..15078838ad95 100644 --- a/samples/apps/copilot-chat-app/webapi/CopilotChat/Extensions/SemanticKernelExtensions.cs +++ b/samples/apps/copilot-chat-app/webapi/CopilotChat/Extensions/SemanticKernelExtensions.cs @@ -24,10 +24,7 @@ public static IServiceCollection AddCopilotChatPlannerServices(this IServiceColl { services.AddScoped(sp => new CopilotChatPlanner(Kernel.Builder .WithLogger(sp.GetRequiredService>()) - .WithConfiguration( - new KernelConfig().AddPlannerBackend( - sp.GetRequiredService>().Value) - ) // TODO verify planner has AI service configured + .WithPlannerBackend(sp.GetRequiredService>().Value)// TODO verify planner has AI service configured .Build())); // Register Planner skills (AI plugins) here. @@ -58,12 +55,12 @@ public static IKernel RegisterCopilotChatSkills(this IKernel kernel, IServicePro /// /// Add the completion backend to the kernel config for the planner. /// - private static KernelConfig AddPlannerBackend(this KernelConfig kernelConfig, AIServiceOptions options) + private static KernelBuilder WithPlannerBackend(this KernelBuilder kernelBuilder, AIServiceOptions options) { return options.Type switch { - AIServiceOptions.AIServiceType.AzureOpenAI => kernelConfig.AddAzureChatCompletionService(options.Models.Planner, options.Endpoint, options.Key), - AIServiceOptions.AIServiceType.OpenAI => kernelConfig.AddOpenAIChatCompletionService(options.Models.Planner, options.Key), + AIServiceOptions.AIServiceType.AzureOpenAI => kernelBuilder.WithAzureChatCompletionService(options.Models.Planner, options.Endpoint, options.Key), + AIServiceOptions.AIServiceType.OpenAI => kernelBuilder.WithOpenAIChatCompletionService(options.Models.Planner, options.Key), _ => throw new ArgumentException($"Invalid {nameof(options.Type)} value in '{AIServiceOptions.PropertyName}' settings."), }; } diff --git a/samples/apps/copilot-chat-app/webapi/CopilotChat/Skills/ChatSkills/ChatSkill.cs b/samples/apps/copilot-chat-app/webapi/CopilotChat/Skills/ChatSkills/ChatSkill.cs index c5dbd28a1c27..2ccadf1f3703 100644 --- a/samples/apps/copilot-chat-app/webapi/CopilotChat/Skills/ChatSkills/ChatSkill.cs +++ b/samples/apps/copilot-chat-app/webapi/CopilotChat/Skills/ChatSkills/ChatSkill.cs @@ -352,7 +352,7 @@ private async Task GetChatResponseAsync(SKContext chatContext) /// private async Task GetUserIntentAsync(SKContext context) { - if (!context.Variables.Get("planUserIntent", out string? userIntent)) + if (!context.Variables.TryGetValue("planUserIntent", out string? userIntent)) { var contextVariables = new ContextVariables(); contextVariables.Set("chatId", context["chatId"]); @@ -471,7 +471,7 @@ private Task AcquireExternalInformationAsync(SKContext context, string u { var contextVariables = context.Variables.Clone(); contextVariables.Set("tokenLimit", tokenLimit.ToString(new NumberFormatInfo())); - if (context.Variables.Get("proposedPlan", out string? proposedPlan)) + if (context.Variables.TryGetValue("proposedPlan", out string? proposedPlan)) { contextVariables.Set("proposedPlan", proposedPlan); } diff --git a/samples/apps/copilot-chat-app/webapi/CopilotChat/Skills/ChatSkills/ExternalInformationSkill.cs b/samples/apps/copilot-chat-app/webapi/CopilotChat/Skills/ChatSkills/ExternalInformationSkill.cs index 348ccf93505b..614bc0f5cfbc 100644 --- a/samples/apps/copilot-chat-app/webapi/CopilotChat/Skills/ChatSkills/ExternalInformationSkill.cs +++ b/samples/apps/copilot-chat-app/webapi/CopilotChat/Skills/ChatSkills/ExternalInformationSkill.cs @@ -78,7 +78,7 @@ public async Task AcquireExternalInformationAsync(string userIntent, SKC // Check if plan exists in ask's context variables. // If plan was returned at this point, that means it was approved and should be run - var planApproved = context.Variables.Get("proposedPlan", out var planJson); + var planApproved = context.Variables.TryGetValue("proposedPlan", out string? planJson); if (planApproved && !string.IsNullOrWhiteSpace(planJson)) { @@ -133,7 +133,7 @@ public async Task AcquireExternalInformationAsync(string userIntent, SKC continue; } - if (variables.Get(param.Key, out var value)) + if (variables.TryGetValue(param.Key, out string? value)) { plan.State.Set(param.Key, value); } diff --git a/samples/apps/copilot-chat-app/webapi/CopilotChatWebApi.csproj b/samples/apps/copilot-chat-app/webapi/CopilotChatWebApi.csproj index 5e0081044a28..97a6f3f8057a 100644 --- a/samples/apps/copilot-chat-app/webapi/CopilotChatWebApi.csproj +++ b/samples/apps/copilot-chat-app/webapi/CopilotChatWebApi.csproj @@ -11,13 +11,13 @@ - - - - - - - + + + + + + + diff --git a/samples/apps/copilot-chat-app/webapi/SemanticKernelExtensions.cs b/samples/apps/copilot-chat-app/webapi/SemanticKernelExtensions.cs index ba9d64e749db..09593072193e 100644 --- a/samples/apps/copilot-chat-app/webapi/SemanticKernelExtensions.cs +++ b/samples/apps/copilot-chat-app/webapi/SemanticKernelExtensions.cs @@ -43,6 +43,8 @@ internal static IServiceCollection AddSemanticKernelServices(this IServiceCollec .WithLogger(sp.GetRequiredService>()) .WithMemory(sp.GetRequiredService()) .WithConfiguration(sp.GetRequiredService()) + .WithCompletionBackend(sp.GetRequiredService>().Value) + .WithEmbeddingBackend(sp.GetRequiredService>().Value) .Build(); sp.GetRequiredService()(sp, kernel); @@ -52,11 +54,6 @@ internal static IServiceCollection AddSemanticKernelServices(this IServiceCollec // Semantic memory services.AddSemanticTextMemory(); - // AI backends - services.AddScoped(serviceProvider => new KernelConfig() - .AddCompletionBackend(serviceProvider.GetRequiredService>().Value) - .AddEmbeddingBackend(serviceProvider.GetRequiredService>().Value)); - // Register skills services.AddScoped(sp => RegisterSkillsAsync); @@ -156,14 +153,14 @@ private static void AddSemanticTextMemory(this IServiceCollection services) /// /// Add the completion backend to the kernel config /// - private static KernelConfig AddCompletionBackend(this KernelConfig kernelConfig, AIServiceOptions options) + private static KernelBuilder WithCompletionBackend(this KernelBuilder kernelBuilder, AIServiceOptions options) { return options.Type switch { AIServiceOptions.AIServiceType.AzureOpenAI - => kernelConfig.AddAzureChatCompletionService(options.Models.Completion, options.Endpoint, options.Key), + => kernelBuilder.WithAzureChatCompletionService(options.Models.Completion, options.Endpoint, options.Key), AIServiceOptions.AIServiceType.OpenAI - => kernelConfig.AddOpenAIChatCompletionService(options.Models.Completion, options.Key), + => kernelBuilder.WithOpenAIChatCompletionService(options.Models.Completion, options.Key), _ => throw new ArgumentException($"Invalid {nameof(options.Type)} value in '{AIServiceOptions.PropertyName}' settings."), }; @@ -172,14 +169,14 @@ private static KernelConfig AddCompletionBackend(this KernelConfig kernelConfig, /// /// Add the embedding backend to the kernel config /// - private static KernelConfig AddEmbeddingBackend(this KernelConfig kernelConfig, AIServiceOptions options) + private static KernelBuilder WithEmbeddingBackend(this KernelBuilder kernelBuilder, AIServiceOptions options) { return options.Type switch { AIServiceOptions.AIServiceType.AzureOpenAI - => kernelConfig.AddAzureTextEmbeddingGenerationService(options.Models.Embedding, options.Endpoint, options.Key), + => kernelBuilder.WithAzureTextEmbeddingGenerationService(options.Models.Embedding, options.Endpoint, options.Key), AIServiceOptions.AIServiceType.OpenAI - => kernelConfig.AddOpenAITextEmbeddingGenerationService(options.Models.Embedding, options.Key), + => kernelBuilder.WithOpenAITextEmbeddingGenerationService(options.Models.Embedding, options.Key), _ => throw new ArgumentException($"Invalid {nameof(options.Type)} value in '{AIServiceOptions.PropertyName}' settings."), }; @@ -191,7 +188,7 @@ private static KernelConfig AddEmbeddingBackend(this KernelConfig kernelConfig, /// The service configuration /// Custom for HTTP requests. /// Application logger - private static IEmbeddingGeneration ToTextEmbeddingsService(this AIServiceOptions options, + private static ITextEmbeddingGeneration ToTextEmbeddingsService(this AIServiceOptions options, HttpClient? httpClient = null, ILogger? logger = null) { From cf05270e6d9f3941a0b3e27a58344ef862cd08ba Mon Sep 17 00:00:00 2001 From: SergeyMenshykh Date: Fri, 2 Jun 2023 00:52:50 +0100 Subject: [PATCH 2/4] Readme and notebooks update --- dotnet/README.md | 21 +++--- .../notebooks/dotnet/00-getting-started.ipynb | 14 ++-- .../dotnet/01-basic-loading-the-kernel.ipynb | 23 ++++--- .../dotnet/02-running-prompts-from-file.ipynb | 12 ++-- .../dotnet/03-semantic-function-inline.ipynb | 17 +++-- .../dotnet/04-context-variables-chat.ipynb | 10 +-- .../dotnet/05-using-the-planner.ipynb | 10 +-- .../dotnet/06-memory-and-embeddings.ipynb | 66 +++++++++---------- samples/notebooks/dotnet/07-DALL-E-2.ipynb | 13 ++-- .../dotnet/08-chatGPT-with-DALL-E-2.ipynb | 9 +-- 10 files changed, 102 insertions(+), 93 deletions(-) diff --git a/dotnet/README.md b/dotnet/README.md index 86f15b3e9cf0..7329454fd18f 100644 --- a/dotnet/README.md +++ b/dotnet/README.md @@ -23,20 +23,19 @@ Copy and paste the following code into your project, with your Azure OpenAI key ```csharp using Microsoft.SemanticKernel; -var kernel = Kernel.Builder.Build(); +var builder = new KernelBuilder(); -// Azure OpenAI -kernel.Config.AddAzureTextCompletionService( - "text-davinci-003", // Azure OpenAI Deployment Name - "https://contoso.openai.azure.com/", // Azure OpenAI Endpoint - "...your Azure OpenAI Key...", // Azure OpenAI Key -); +builder.WithAzureTextCompletionService( + "text-davinci-003", // Azure OpenAI Deployment Name + "https://contoso.openai.azure.com/", // Azure OpenAI Endpoint + "...your Azure OpenAI Key..."); // Azure OpenAI Key // Alternative using OpenAI -// kernel.Config.AddOpenAITextCompletionService( -// "text-davinci-003", // OpenAI Model name -// "...your OpenAI API Key..." // OpenAI API Key -// ); +//builder.WithOpenAITextCompletionService( +// "text-davinci-003", // OpenAI Model name +// "...your OpenAI API Key..."); // OpenAI API Key + +var kernel = builder.Build(); var prompt = @"{{$input}} diff --git a/samples/notebooks/dotnet/00-getting-started.ipynb b/samples/notebooks/dotnet/00-getting-started.ipynb index ba9dc1b659ba..6a03ef313f98 100644 --- a/samples/notebooks/dotnet/00-getting-started.ipynb +++ b/samples/notebooks/dotnet/00-getting-started.ipynb @@ -61,7 +61,7 @@ "outputs": [], "source": [ "// Import Semantic Kernel\n", - "#r \"nuget: Microsoft.SemanticKernel, 0.14.547.1-preview\"" + "#r \"nuget: Microsoft.SemanticKernel, 0.15.230531.5-preview\"" ] }, { @@ -87,13 +87,13 @@ "source": [ "using Microsoft.SemanticKernel;\n", "\n", - "// Set Simple kernel instance\n", - "IKernel kernel = KernelBuilder.Create();" + "//Create Kernel builder\n", + "var builder = new KernelBuilder();" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": { "dotnet_interactive": { "language": "csharp" @@ -108,9 +108,11 @@ "var (useAzureOpenAI, model, azureEndpoint, apiKey, orgId) = Settings.LoadFromFile();\n", "\n", "if (useAzureOpenAI)\n", - " kernel.Config.AddAzureTextCompletionService(model, azureEndpoint, apiKey);\n", + " builder.WithAzureTextCompletionService(model, azureEndpoint, apiKey);\n", "else\n", - " kernel.Config.AddOpenAITextCompletionService(model, apiKey, orgId);" + " builder.WithOpenAITextCompletionService(model, apiKey, orgId);\n", + "\n", + "IKernel kernel = builder.Build();" ] }, { diff --git a/samples/notebooks/dotnet/01-basic-loading-the-kernel.ipynb b/samples/notebooks/dotnet/01-basic-loading-the-kernel.ipynb index e07908d15e5f..3ec75aaf7f81 100644 --- a/samples/notebooks/dotnet/01-basic-loading-the-kernel.ipynb +++ b/samples/notebooks/dotnet/01-basic-loading-the-kernel.ipynb @@ -32,7 +32,7 @@ }, "outputs": [], "source": [ - "#r \"nuget: Microsoft.SemanticKernel, 0.14.547.1-preview\"" + "#r \"nuget: Microsoft.SemanticKernel, 0.15.230531.5-preview\"" ] }, { @@ -143,16 +143,14 @@ }, "outputs": [], "source": [ - "IKernel kernel = KernelBuilder.Create();\n", - "\n", - "kernel.Config.AddAzureTextCompletionService(\n", + "Kernel.Builder\n", + ".WithAzureTextCompletionService(\n", " \"my-finetuned-Curie\", // Azure OpenAI *Deployment Name*\n", " \"https://contoso.openai.azure.com/\", // Azure OpenAI *Endpoint*\n", " \"...your Azure OpenAI Key...\", // Azure OpenAI *Key*\n", " \"Azure_curie\" // alias used in the prompt templates' config.json\n", - ");\n", - "\n", - "kernel.Config.AddOpenAITextCompletionService(\n", + ")\n", + ".WithOpenAITextCompletionService(\n", " \"text-davinci-003\", // OpenAI Model Name\n", " \"...your OpenAI API Key...\", // OpenAI API key\n", " \"...your OpenAI Org ID...\", // *optional* OpenAI Organization ID\n", @@ -171,7 +169,7 @@ "* a prompt configuration doesn't specify which AI backend to use\n", "* a prompt configuration requires a backend unknown to the kernel\n", "\n", - "The default can be set and changed programmatically:" + "The default can be set programmatically:" ] }, { @@ -190,7 +188,14 @@ }, "outputs": [], "source": [ - "kernel.Config.SetDefaultTextCompletionService(\"Azure_curie\");" + "Kernel.Builder\n", + ".WithOpenAITextCompletionService(\n", + " \"text-davinci-003\", // OpenAI Model Name\n", + " \"...your OpenAI API Key...\", // OpenAI API key\n", + " \"...your OpenAI Org ID...\", // *optional* OpenAI Organization ID\n", + " \"OpenAI_davinci\", // alias used in the prompt templates' config.json\n", + " true // This flag specifies that this service is the default one.\n", + ");" ] }, { diff --git a/samples/notebooks/dotnet/02-running-prompts-from-file.ipynb b/samples/notebooks/dotnet/02-running-prompts-from-file.ipynb index cf4a6b79aa30..5517066f4cc6 100644 --- a/samples/notebooks/dotnet/02-running-prompts-from-file.ipynb +++ b/samples/notebooks/dotnet/02-running-prompts-from-file.ipynb @@ -74,7 +74,7 @@ "source": [ "Given a semantic function defined by these files, this is how to load and use a file based semantic function.\n", "\n", - "Load and configure the kernel, as usual, loading also the AI backend settings defined in the [Setup notebook](0-AI-settings.ipynb):" + "Configure and create the kernel, as usual, loading also the AI backend settings defined in the [Setup notebook](0-AI-settings.ipynb):" ] }, { @@ -90,20 +90,22 @@ }, "outputs": [], "source": [ - "#r \"nuget: Microsoft.SemanticKernel, 0.14.547.1-preview\"\n", + "#r \"nuget: Microsoft.SemanticKernel, 0.15.230531.5-preview\"\n", "\n", "#!import config/Settings.cs\n", "\n", "using Microsoft.SemanticKernel;\n", "\n", - "var kernel = KernelBuilder.Create();\n", + "var builder = new KernelBuilder();\n", "\n", "// Configure AI backend used by the kernel\n", "var (useAzureOpenAI, model, azureEndpoint, apiKey, orgId) = Settings.LoadFromFile();\n", "if (useAzureOpenAI)\n", - " kernel.Config.AddAzureTextCompletionService(model, azureEndpoint, apiKey);\n", + " builder.WithAzureTextCompletionService(model, azureEndpoint, apiKey);\n", "else\n", - " kernel.Config.AddOpenAITextCompletionService(model, apiKey, orgId);" + " builder.WithOpenAITextCompletionService(model, apiKey, orgId);\n", + "\n", + "IKernel kernel = builder.Build();" ] }, { diff --git a/samples/notebooks/dotnet/03-semantic-function-inline.ipynb b/samples/notebooks/dotnet/03-semantic-function-inline.ipynb index 759c6d81dc98..07f856b685db 100644 --- a/samples/notebooks/dotnet/03-semantic-function-inline.ipynb +++ b/samples/notebooks/dotnet/03-semantic-function-inline.ipynb @@ -49,21 +49,23 @@ }, "outputs": [], "source": [ - "#r \"nuget: Microsoft.SemanticKernel, 0.14.547.1-preview\"\n", + "#r \"nuget: Microsoft.SemanticKernel, 0.15.230531.5-preview\"\n", "\n", "#!import config/Settings.cs\n", "\n", "using Microsoft.SemanticKernel;\n", "using Microsoft.SemanticKernel.SemanticFunctions;\n", "\n", - "IKernel kernel = KernelBuilder.Create();\n", + "var builder = new KernelBuilder();\n", "\n", "// Configure AI backend used by the kernel\n", "var (useAzureOpenAI, model, azureEndpoint, apiKey, orgId) = Settings.LoadFromFile();\n", "if (useAzureOpenAI)\n", - " kernel.Config.AddAzureTextCompletionService(model, azureEndpoint, apiKey);\n", + " builder.WithAzureTextCompletionService(model, azureEndpoint, apiKey);\n", "else\n", - " kernel.Config.AddOpenAITextCompletionService(model, apiKey, orgId);" + " builder.WithOpenAITextCompletionService(model, apiKey, orgId);\n", + "\n", + "IKernel kernel = builder.Build();" ] }, { @@ -293,15 +295,16 @@ }, "outputs": [], "source": [ - "var kernel = Microsoft.SemanticKernel.Kernel.Builder.Build();\n", + "var builder = new KernelBuilder();\n", "\n", "var (useAzureOpenAI, model, azureEndpoint, apiKey, orgId) = Settings.LoadFromFile();\n", "\n", "if (useAzureOpenAI)\n", - " kernel.Config.AddAzureTextCompletionService(model, azureEndpoint, apiKey);\n", + " builder.WithAzureTextCompletionService(model, azureEndpoint, apiKey);\n", "else\n", - " kernel.Config.AddOpenAITextCompletionService(model, apiKey, orgId);\n", + " builder.WithOpenAITextCompletionService(model, apiKey, orgId);\n", "\n", + "var kernel = builder.Build();\n", "\n", "string skPrompt = @\"\n", "{{$input}}\n", diff --git a/samples/notebooks/dotnet/04-context-variables-chat.ipynb b/samples/notebooks/dotnet/04-context-variables-chat.ipynb index 1a9d687dd6c0..7279a98f5cd1 100644 --- a/samples/notebooks/dotnet/04-context-variables-chat.ipynb +++ b/samples/notebooks/dotnet/04-context-variables-chat.ipynb @@ -34,7 +34,7 @@ }, "outputs": [], "source": [ - "#r \"nuget: Microsoft.SemanticKernel, 0.14.547.1-preview\"\n", + "#r \"nuget: Microsoft.SemanticKernel, 0.15.230531.5-preview\"\n", "\n", "#!import config/Settings.cs\n", "\n", @@ -42,14 +42,16 @@ "using Microsoft.SemanticKernel.SemanticFunctions;\n", "using Microsoft.SemanticKernel.Orchestration;\n", "\n", - "IKernel kernel = KernelBuilder.Create();\n", + "var builder = new KernelBuilder();\n", "\n", "// Configure AI backend used by the kernel\n", "var (useAzureOpenAI, model, azureEndpoint, apiKey, orgId) = Settings.LoadFromFile();\n", "if (useAzureOpenAI)\n", - " kernel.Config.AddAzureTextCompletionService(model, azureEndpoint, apiKey);\n", + " builder.WithAzureTextCompletionService(model, azureEndpoint, apiKey);\n", "else\n", - " kernel.Config.AddOpenAITextCompletionService(model, apiKey, orgId);" + " builder.WithOpenAITextCompletionService(model, apiKey, orgId);\n", + "\n", + "IKernel kernel = builder.Build();" ] }, { diff --git a/samples/notebooks/dotnet/05-using-the-planner.ipynb b/samples/notebooks/dotnet/05-using-the-planner.ipynb index 1fff721df4c6..a9385cb23465 100644 --- a/samples/notebooks/dotnet/05-using-the-planner.ipynb +++ b/samples/notebooks/dotnet/05-using-the-planner.ipynb @@ -25,7 +25,7 @@ }, "outputs": [], "source": [ - "#r \"nuget: Microsoft.SemanticKernel, 0.14.547.1-preview\"\n", + "#r \"nuget: Microsoft.SemanticKernel, 0.15.230531.5-preview\"\n", "\n", "#!import config/Settings.cs\n", "#!import config/Utils.cs\n", @@ -36,15 +36,17 @@ "using Microsoft.SemanticKernel.Planning;\n", "using Microsoft.SemanticKernel.Planning.Sequential;\n", "\n", - "IKernel kernel = KernelBuilder.Create();\n", + "var builder = new KernelBuilder();\n", "\n", "// Configure AI backend used by the kernel\n", "var (useAzureOpenAI, model, azureEndpoint, apiKey, orgId) = Settings.LoadFromFile();\n", "\n", "if (useAzureOpenAI)\n", - " kernel.Config.AddAzureTextCompletionService(model, azureEndpoint, apiKey);\n", + " builder.WithAzureTextCompletionService(model, azureEndpoint, apiKey);\n", "else\n", - " kernel.Config.AddOpenAITextCompletionService(model, apiKey, orgId);" + " builder.WithOpenAITextCompletionService(model, apiKey, orgId);\n", + "\n", + "var kernel = builder.Build();" ] }, { diff --git a/samples/notebooks/dotnet/06-memory-and-embeddings.ipynb b/samples/notebooks/dotnet/06-memory-and-embeddings.ipynb index e76082333c1e..0f06ceba9b70 100644 --- a/samples/notebooks/dotnet/06-memory-and-embeddings.ipynb +++ b/samples/notebooks/dotnet/06-memory-and-embeddings.ipynb @@ -33,7 +33,7 @@ }, "outputs": [], "source": [ - "#r \"nuget: Microsoft.SemanticKernel, 0.14.547.1-preview\"\n", + "#r \"nuget: Microsoft.SemanticKernel, 0.15.230531.5-preview\"\n", "\n", "#!import config/Settings.cs\n", "\n", @@ -75,22 +75,22 @@ "\n", "var (useAzureOpenAI, model, azureEndpoint, apiKey, orgId) = Settings.LoadFromFile();\n", "\n", - "var kernel = new KernelBuilder()\n", - " .Configure(c =>\n", - " {\n", - " if (useAzureOpenAI)\n", - " {\n", - " c.AddAzureTextEmbeddingGenerationService(\"text-embedding-ada-002\", azureEndpoint, apiKey);\n", - " c.AddAzureTextCompletionService(model, azureEndpoint, apiKey);\n", - " }\n", - " else\n", - " {\n", - " c.AddOpenAITextEmbeddingGenerationService(\"text-embedding-ada-002\", apiKey);\n", - " c.AddOpenAITextCompletionService(model, apiKey, orgId);\n", - " }\n", - " })\n", - " .WithMemoryStorage(new VolatileMemoryStore())\n", - " .Build();" + "var builder = new KernelBuilder();\n", + "\n", + "if (useAzureOpenAI)\n", + "{\n", + " builder.WithAzureTextEmbeddingGenerationService(\"text-embedding-ada-002\", azureEndpoint, apiKey);\n", + " builder.WithAzureTextCompletionService(model, azureEndpoint, apiKey);\n", + "}\n", + "else\n", + "{\n", + " builder.WithOpenAITextEmbeddingGenerationService(\"text-embedding-ada-002\", apiKey);\n", + " builder.WithOpenAITextCompletionService(model, apiKey, orgId);\n", + "}\n", + "\n", + "builder.WithMemoryStorage(new VolatileMemoryStore());\n", + "\n", + "var kernel = builder.Build();" ] }, { @@ -437,22 +437,22 @@ }, "outputs": [], "source": [ - "var kernel = Microsoft.SemanticKernel.Kernel.Builder\n", - " .Configure(c =>\n", - " {\n", - " if (useAzureOpenAI)\n", - " {\n", - " c.AddAzureTextEmbeddingGenerationService(\"text-embedding-ada-002\", azureEndpoint, apiKey);\n", - " c.AddAzureTextCompletionService(model, azureEndpoint, apiKey);\n", - " }\n", - " else\n", - " {\n", - " c.AddOpenAITextEmbeddingGenerationService(\"text-embedding-ada-002\", apiKey);\n", - " c.AddOpenAITextCompletionService(model, apiKey, orgId);\n", - " }\n", - " })\n", - " .WithMemoryStorage(new VolatileMemoryStore())\n", - " .Build();" + "var builder = new KernelBuilder();\n", + "\n", + "if (useAzureOpenAI)\n", + "{\n", + " builder.WithAzureTextEmbeddingGenerationService(\"text-embedding-ada-002\", azureEndpoint, apiKey);\n", + " builder.WithAzureTextCompletionService(model, azureEndpoint, apiKey);\n", + "}\n", + "else\n", + "{\n", + " builder.WithOpenAITextEmbeddingGenerationService(\"text-embedding-ada-002\", apiKey);\n", + " builder.WithOpenAITextCompletionService(model, apiKey, orgId);\n", + "}\n", + "\n", + "builder.WithMemoryStorage(new VolatileMemoryStore());\n", + "\n", + "var kernel = builder.Build();" ] }, { diff --git a/samples/notebooks/dotnet/07-DALL-E-2.ipynb b/samples/notebooks/dotnet/07-DALL-E-2.ipynb index f8a4f9714ea7..c645706de47b 100644 --- a/samples/notebooks/dotnet/07-DALL-E-2.ipynb +++ b/samples/notebooks/dotnet/07-DALL-E-2.ipynb @@ -33,7 +33,7 @@ "source": [ "// Usual setup: importing Semantic Kernel SDK and SkiaSharp, used to display images inline.\n", "\n", - "#r \"nuget: Microsoft.SemanticKernel, 0.14.547.1-preview\"\n", + "#r \"nuget: Microsoft.SemanticKernel, 0.15.230531.5-preview\"\n", "#r \"nuget: SkiaSharp, 2.88.3\"\n", "\n", "#!import config/Settings.cs\n", @@ -81,19 +81,16 @@ "\n", "// Configure the three AI features: text embedding (using Ada), text completion (using DaVinci 3), image generation (DALL-E 2)\n", "var kernel = new KernelBuilder()\n", - " .Configure(c =>\n", - " {\n", - " c.AddOpenAITextEmbeddingGenerationService(\"text-embedding-ada-002\", apiKey);\n", - " c.AddOpenAITextCompletionService(\"text-davinci-003\", apiKey, orgId);\n", - " c.AddOpenAIImageGenerationService(apiKey, orgId);\n", - " })\n", + " .WithOpenAITextEmbeddingGenerationService(\"text-embedding-ada-002\", apiKey)\n", + " .WithOpenAITextCompletionService(\"text-davinci-003\", apiKey, orgId)\n", + " .WithOpenAIImageGenerationService(apiKey, orgId)\n", " .Build();\n", "\n", "// Get AI service instance used to generate images\n", "var dallE = kernel.GetService();\n", "\n", "// Get AI service instance used to extract embedding from a text\n", - "var textEmbedding = kernel.GetService>();" + "var textEmbedding = kernel.GetService();" ] }, { diff --git a/samples/notebooks/dotnet/08-chatGPT-with-DALL-E-2.ipynb b/samples/notebooks/dotnet/08-chatGPT-with-DALL-E-2.ipynb index 6c3eee46c293..7f30f82cd0b6 100644 --- a/samples/notebooks/dotnet/08-chatGPT-with-DALL-E-2.ipynb +++ b/samples/notebooks/dotnet/08-chatGPT-with-DALL-E-2.ipynb @@ -55,7 +55,7 @@ "source": [ "// Usual setup: importing Semantic Kernel SDK and SkiaSharp, used to display images inline.\n", "\n", - "#r \"nuget: Microsoft.SemanticKernel, 0.14.547.1-preview\"\n", + "#r \"nuget: Microsoft.SemanticKernel, 0.15.230531.5-preview\"\n", "#r \"nuget: SkiaSharp, 2.88.3\"\n", "\n", "#!import config/Settings.cs\n", @@ -99,11 +99,8 @@ "\n", "// Configure the two AI features: OpenAI Chat and DALL-E 2 for image generation\n", "var kernel = new KernelBuilder()\n", - " .Configure(c =>\n", - " {\n", - " c.AddOpenAIChatCompletionService(\"gpt-3.5-turbo\", apiKey, orgId);\n", - " c.AddOpenAIImageGenerationService(apiKey, orgId);\n", - " })\n", + " .WithOpenAIChatCompletionService(\"gpt-3.5-turbo\", apiKey, orgId)\n", + " .WithOpenAIImageGenerationService(apiKey, orgId)\n", " .Build();\n", "\n", "// Get AI service instance used to generate images\n", From 84e2063f2f5c1d991591e222f654032b411ac326 Mon Sep 17 00:00:00 2001 From: SergeyMenshykh Date: Fri, 2 Jun 2023 00:58:10 +0100 Subject: [PATCH 3/4] fix + merge --- samples/notebooks/dotnet/00-getting-started.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/notebooks/dotnet/00-getting-started.ipynb b/samples/notebooks/dotnet/00-getting-started.ipynb index 6a03ef313f98..9dd2bd42024d 100644 --- a/samples/notebooks/dotnet/00-getting-started.ipynb +++ b/samples/notebooks/dotnet/00-getting-started.ipynb @@ -36,7 +36,7 @@ "outputs": [], "source": [ "// Load some helper functions, e.g. to load values from settings.json\n", - "#!import config/Settings.cs" + "#!import config/Settings.cs " ] }, { @@ -93,7 +93,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": { "dotnet_interactive": { "language": "csharp" From 65caef77f5a8f511a2092dd1c4f92313c57bc18d Mon Sep 17 00:00:00 2001 From: SergeyMenshykh <68852919+SergeyMenshykh@users.noreply.github.com> Date: Fri, 2 Jun 2023 22:32:47 +0100 Subject: [PATCH 4/4] Update samples/apps/copilot-chat-app/webapi/SemanticKernelExtensions.cs Co-authored-by: Teresa Hoang <125500434+teresaqhoang@users.noreply.github.com> --- samples/apps/copilot-chat-app/webapi/SemanticKernelExtensions.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/samples/apps/copilot-chat-app/webapi/SemanticKernelExtensions.cs b/samples/apps/copilot-chat-app/webapi/SemanticKernelExtensions.cs index 09593072193e..b4bb661b2f00 100644 --- a/samples/apps/copilot-chat-app/webapi/SemanticKernelExtensions.cs +++ b/samples/apps/copilot-chat-app/webapi/SemanticKernelExtensions.cs @@ -42,7 +42,6 @@ internal static IServiceCollection AddSemanticKernelServices(this IServiceCollec IKernel kernel = Kernel.Builder .WithLogger(sp.GetRequiredService>()) .WithMemory(sp.GetRequiredService()) - .WithConfiguration(sp.GetRequiredService()) .WithCompletionBackend(sp.GetRequiredService>().Value) .WithEmbeddingBackend(sp.GetRequiredService>().Value) .Build();