From 6f28ff293132c27901e28c5a8d861929549b6212 Mon Sep 17 00:00:00 2001 From: xbotter Date: Sun, 3 Dec 2023 15:31:02 +0800 Subject: [PATCH 01/12] =?UTF-8?q?=F0=9F=93=9D=20Add=20SemanticKernelTextGe?= =?UTF-8?q?neration=20for=20Semantic=20Kernel=20Text=20Completion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add a new file SemanticKernelTextGeneration.cs to implement the ITextGeneration interface for Semantic Kernel Text Completion. This class provides the functionality to generate text asynchronously based on a prompt and text generation options. The AIRequestSettings are converted from the TextGenerationOptions to set parameters such as temperature, top-p, presence penalty, frequency penalty, stop sequences, max tokens, results per prompt, and token selection biases. The SemanticKernelTextGeneration class is added to the KernelMemoryBuilderExtensions as an extension method to configure the Semantic Kernel Text Completion service. --- KernelMemory.sln | 7 +++ ...otnet-SemanticKernel-TextCompletion.csproj | 26 +++++++++++ .../Program.cs | 32 ++++++++++++++ .../sample-SK-Readme.pdf | Bin 0 -> 186802 bytes .../Core/AI/SemanticKernelTextGeneration.cs | 41 ++++++++++++++++++ service/Core/KernelMemoryBuilderExtensions.cs | 10 +++++ 6 files changed, 116 insertions(+) create mode 100644 examples/105-dotnet-SemanticKernel-TextCompletion/105-dotnet-SemanticKernel-TextCompletion.csproj create mode 100644 examples/105-dotnet-SemanticKernel-TextCompletion/Program.cs create mode 100644 examples/105-dotnet-SemanticKernel-TextCompletion/sample-SK-Readme.pdf create mode 100644 service/Core/AI/SemanticKernelTextGeneration.cs diff --git a/KernelMemory.sln b/KernelMemory.sln index 491c4695d..87979ffa1 100644 --- a/KernelMemory.sln +++ b/KernelMemory.sln @@ -179,6 +179,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "204-dotnet-ASP.NET-MVC-inte EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "205-dotnet-extract-text-from-docs", "examples\205-dotnet-extract-text-from-docs\205-dotnet-extract-text-from-docs.csproj", "{9202380E-D793-4C3C-89B3-3BE790925029}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "105-dotnet-SemanticKernel-TextCompletion", "examples\105-dotnet-SemanticKernel-TextCompletion\105-dotnet-SemanticKernel-TextCompletion.csproj", "{F866C3E9-1DD4-4D5A-A30F-079FA195EC3C}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -221,6 +223,7 @@ Global {1B41A9A1-0B57-4297-B579-D04FC0BA3227} = {0A43C65C-6007-4BB4-B3FE-8D439FC91841} {10A6C940-AECC-4CEF-963E-9908DDA816B2} = {0A43C65C-6007-4BB4-B3FE-8D439FC91841} {9202380E-D793-4C3C-89B3-3BE790925029} = {0A43C65C-6007-4BB4-B3FE-8D439FC91841} + {F866C3E9-1DD4-4D5A-A30F-079FA195EC3C} = {0A43C65C-6007-4BB4-B3FE-8D439FC91841} EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {8A9FA587-7EBA-4D43-BE47-38D798B1C74C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU @@ -327,5 +330,9 @@ Global {9202380E-D793-4C3C-89B3-3BE790925029}.Debug|Any CPU.Build.0 = Debug|Any CPU {9202380E-D793-4C3C-89B3-3BE790925029}.Release|Any CPU.ActiveCfg = Release|Any CPU {9202380E-D793-4C3C-89B3-3BE790925029}.Release|Any CPU.Build.0 = Release|Any CPU + {F866C3E9-1DD4-4D5A-A30F-079FA195EC3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F866C3E9-1DD4-4D5A-A30F-079FA195EC3C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F866C3E9-1DD4-4D5A-A30F-079FA195EC3C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F866C3E9-1DD4-4D5A-A30F-079FA195EC3C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal diff --git a/examples/105-dotnet-SemanticKernel-TextCompletion/105-dotnet-SemanticKernel-TextCompletion.csproj b/examples/105-dotnet-SemanticKernel-TextCompletion/105-dotnet-SemanticKernel-TextCompletion.csproj new file mode 100644 index 000000000..8d5c47377 --- /dev/null +++ b/examples/105-dotnet-SemanticKernel-TextCompletion/105-dotnet-SemanticKernel-TextCompletion.csproj @@ -0,0 +1,26 @@ + + + + Exe + net8.0 + _105_dotnet_SemanticKernel_TextCompletion + enable + enable + 5ee045b0-aea3-4f08-8d31-32d1a6f8fed0 + + + + + + + + + Always + + + + + + + + diff --git a/examples/105-dotnet-SemanticKernel-TextCompletion/Program.cs b/examples/105-dotnet-SemanticKernel-TextCompletion/Program.cs new file mode 100644 index 000000000..89d4d38e5 --- /dev/null +++ b/examples/105-dotnet-SemanticKernel-TextCompletion/Program.cs @@ -0,0 +1,32 @@ +// Copyright (c) Microsoft. All rights reserved. + +using Microsoft.KernelMemory; +using Microsoft.SemanticKernel.Connectors.AI.OpenAI.ChatCompletion; +using Microsoft.SemanticKernel.Connectors.AI.OpenAI.TextEmbedding; + +var endpoint = Env.Var("AOAI_ENDPOINT"); +var apiKey = Env.Var("AOAI_API_KEY"); +var chatDeployment = Env.Var("AOAI_DEPLOYMENT_CHAT"); +var embeddingDeployment = Env.Var("AOAI_DEPLOYMENT_EMBEDDING"); + +var memory = new KernelMemoryBuilder() + .WithSemanticKernelTextCompletion(new AzureOpenAIChatCompletion(chatDeployment, endpoint, apiKey)) + .WithCustomEmbeddingGeneration(new AzureOpenAITextEmbeddingGeneration(embeddingDeployment, endpoint, apiKey)) + .Build(); + +await memory.ImportDocumentAsync("sample-SK-Readme.pdf", documentId: "doc001"); + +var question = "What's Semantic Kernel?"; + +Console.WriteLine($"\n\nQuestion: {question}"); + +var answer = await memory.AskAsync(question); + +Console.WriteLine($"\nAnswer: {answer.Result}"); + +Console.WriteLine("\n\n Sources:\n"); + +foreach (var x in answer.RelevantSources) +{ + Console.WriteLine($" - {x.SourceName} - {x.Link} [{x.Partitions.First().LastUpdate:D}]"); +} diff --git a/examples/105-dotnet-SemanticKernel-TextCompletion/sample-SK-Readme.pdf b/examples/105-dotnet-SemanticKernel-TextCompletion/sample-SK-Readme.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c4a87c0ef87c1e6ce39f8a516c8e2d07cae65f85 GIT binary patch literal 186802 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 z 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 XJM+V+^DRh#B+=>4ix)>9KkWPun|vDP literal 0 HcmV?d00001 diff --git a/service/Core/AI/SemanticKernelTextGeneration.cs b/service/Core/AI/SemanticKernelTextGeneration.cs new file mode 100644 index 000000000..3c857d397 --- /dev/null +++ b/service/Core/AI/SemanticKernelTextGeneration.cs @@ -0,0 +1,41 @@ +// Copyright (c) Microsoft. All rights reserved. + +using System.Collections.Generic; +using System.Threading; +using Microsoft.SemanticKernel.AI; +using Microsoft.SemanticKernel.AI.TextCompletion; + +namespace Microsoft.KernelMemory.AI; +internal class SemanticKernelTextGeneration : ITextGeneration +{ + private readonly ITextCompletion _completion; + + public SemanticKernelTextGeneration(ITextCompletion completion) + { + this._completion = completion; + } + + public IAsyncEnumerable GenerateTextAsync(string prompt, TextGenerationOptions options, CancellationToken cancellationToken = default) + { + return this._completion.CompleteStreamAsync(prompt, this.ToAIRequestSettings(options), cancellationToken); + } + + private AIRequestSettings ToAIRequestSettings(TextGenerationOptions options) + { + var settings = new AIRequestSettings(); + settings.ExtensionData[nameof(options.Temperature)] = options.Temperature; + settings.ExtensionData[nameof(options.TopP)] = options.TopP; + settings.ExtensionData[nameof(options.PresencePenalty)] = options.PresencePenalty; + settings.ExtensionData[nameof(options.FrequencyPenalty)] = options.FrequencyPenalty; + settings.ExtensionData[nameof(options.StopSequences)] = options.StopSequences; + + if (options.MaxTokens != null) + { + settings.ExtensionData[nameof(options.MaxTokens)] = options.MaxTokens; + } + + settings.ExtensionData[nameof(options.ResultsPerPrompt)] = options.ResultsPerPrompt; + settings.ExtensionData[nameof(options.TokenSelectionBiases)] = options.TokenSelectionBiases; + return settings; + } +} diff --git a/service/Core/KernelMemoryBuilderExtensions.cs b/service/Core/KernelMemoryBuilderExtensions.cs index 2ff887172..c9fe5f57c 100644 --- a/service/Core/KernelMemoryBuilderExtensions.cs +++ b/service/Core/KernelMemoryBuilderExtensions.cs @@ -9,6 +9,7 @@ using Microsoft.KernelMemory.Pipeline.Queue; using Microsoft.KernelMemory.Prompts; using Microsoft.SemanticKernel.AI.Embeddings; +using Microsoft.SemanticKernel.AI.TextCompletion; namespace Microsoft.KernelMemory; @@ -136,4 +137,13 @@ public static IKernelMemoryBuilder WithCustomPromptProvider( builder.AddSingleton(service); return builder; } + + public static IKernelMemoryBuilder WithSemanticKernelTextCompletion( + this IKernelMemoryBuilder builder, + ITextCompletion service) + { + service = service ?? throw new ConfigurationException("The semantic kernel text completion instance is NULL"); + builder.AddSingleton(new SemanticKernelTextGeneration(service)); + return builder; + } } From 0294d8998501357ade3831f2461f27ab465d7fd4 Mon Sep 17 00:00:00 2001 From: xbotter Date: Sun, 3 Dec 2023 15:46:06 +0800 Subject: [PATCH 02/12] Remove duplicate pdf file. --- ...dotnet-SemanticKernel-TextCompletion.csproj | 10 ---------- .../Program.cs | 2 ++ .../sample-SK-Readme.pdf | Bin 186802 -> 0 bytes 3 files changed, 2 insertions(+), 10 deletions(-) delete mode 100644 examples/105-dotnet-SemanticKernel-TextCompletion/sample-SK-Readme.pdf diff --git a/examples/105-dotnet-SemanticKernel-TextCompletion/105-dotnet-SemanticKernel-TextCompletion.csproj b/examples/105-dotnet-SemanticKernel-TextCompletion/105-dotnet-SemanticKernel-TextCompletion.csproj index 8d5c47377..c67e3d7ac 100644 --- a/examples/105-dotnet-SemanticKernel-TextCompletion/105-dotnet-SemanticKernel-TextCompletion.csproj +++ b/examples/105-dotnet-SemanticKernel-TextCompletion/105-dotnet-SemanticKernel-TextCompletion.csproj @@ -9,16 +9,6 @@ 5ee045b0-aea3-4f08-8d31-32d1a6f8fed0 - - - - - - - Always - - - diff --git a/examples/105-dotnet-SemanticKernel-TextCompletion/Program.cs b/examples/105-dotnet-SemanticKernel-TextCompletion/Program.cs index 89d4d38e5..08d53aa33 100644 --- a/examples/105-dotnet-SemanticKernel-TextCompletion/Program.cs +++ b/examples/105-dotnet-SemanticKernel-TextCompletion/Program.cs @@ -14,6 +14,8 @@ .WithCustomEmbeddingGeneration(new AzureOpenAITextEmbeddingGeneration(embeddingDeployment, endpoint, apiKey)) .Build(); +// using document form 203-dotnet-using-core-nuget + await memory.ImportDocumentAsync("sample-SK-Readme.pdf", documentId: "doc001"); var question = "What's Semantic Kernel?"; diff --git a/examples/105-dotnet-SemanticKernel-TextCompletion/sample-SK-Readme.pdf b/examples/105-dotnet-SemanticKernel-TextCompletion/sample-SK-Readme.pdf deleted file mode 100644 index c4a87c0ef87c1e6ce39f8a516c8e2d07cae65f85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186802 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 z 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 XJM+V+^DRh#B+=>4ix)>9KkWPun|vDP From cd85e5265feffde321d1db2dacd5d8dafbaedb7c Mon Sep 17 00:00:00 2001 From: xbotter Date: Wed, 6 Dec 2023 13:55:42 +0800 Subject: [PATCH 03/12] update sk rc2 --- ...otnet-SemanticKernel-TextCompletion.csproj | 1 + .../Program.cs | 4 ++-- .../Core/AI/SemanticKernelTextGeneration.cs | 22 +++++++++++++------ service/Core/KernelMemoryBuilderExtensions.cs | 6 ++--- 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/examples/105-dotnet-SemanticKernel-TextCompletion/105-dotnet-SemanticKernel-TextCompletion.csproj b/examples/105-dotnet-SemanticKernel-TextCompletion/105-dotnet-SemanticKernel-TextCompletion.csproj index c67e3d7ac..3967e5064 100644 --- a/examples/105-dotnet-SemanticKernel-TextCompletion/105-dotnet-SemanticKernel-TextCompletion.csproj +++ b/examples/105-dotnet-SemanticKernel-TextCompletion/105-dotnet-SemanticKernel-TextCompletion.csproj @@ -7,6 +7,7 @@ enable enable 5ee045b0-aea3-4f08-8d31-32d1a6f8fed0 + CA1711,CA1724,CA1308,CA1812,CA1859,CA2208,CS1591,NU5104,SKEXP0001,SKEXP0011 diff --git a/examples/105-dotnet-SemanticKernel-TextCompletion/Program.cs b/examples/105-dotnet-SemanticKernel-TextCompletion/Program.cs index 08d53aa33..c3c32b493 100644 --- a/examples/105-dotnet-SemanticKernel-TextCompletion/Program.cs +++ b/examples/105-dotnet-SemanticKernel-TextCompletion/Program.cs @@ -10,8 +10,8 @@ var embeddingDeployment = Env.Var("AOAI_DEPLOYMENT_EMBEDDING"); var memory = new KernelMemoryBuilder() - .WithSemanticKernelTextCompletion(new AzureOpenAIChatCompletion(chatDeployment, endpoint, apiKey)) - .WithCustomEmbeddingGeneration(new AzureOpenAITextEmbeddingGeneration(embeddingDeployment, endpoint, apiKey)) + .WithSemanticKernelTextCompletion(new AzureOpenAIChatCompletionService(chatDeployment, "", endpoint, apiKey)) + .WithCustomEmbeddingGeneration(new AzureOpenAITextEmbeddingGeneration(embeddingDeployment, "", endpoint, apiKey)) .Build(); // using document form 203-dotnet-using-core-nuget diff --git a/service/Core/AI/SemanticKernelTextGeneration.cs b/service/Core/AI/SemanticKernelTextGeneration.cs index 3c857d397..2a9ce806a 100644 --- a/service/Core/AI/SemanticKernelTextGeneration.cs +++ b/service/Core/AI/SemanticKernelTextGeneration.cs @@ -1,28 +1,36 @@ // Copyright (c) Microsoft. All rights reserved. using System.Collections.Generic; +using System.Runtime.CompilerServices; using System.Threading; using Microsoft.SemanticKernel.AI; -using Microsoft.SemanticKernel.AI.TextCompletion; +using Microsoft.SemanticKernel.AI.TextGeneration; namespace Microsoft.KernelMemory.AI; internal class SemanticKernelTextGeneration : ITextGeneration { - private readonly ITextCompletion _completion; + private readonly ITextGenerationService _completion; - public SemanticKernelTextGeneration(ITextCompletion completion) + public SemanticKernelTextGeneration(ITextGenerationService completion) { this._completion = completion; } - public IAsyncEnumerable GenerateTextAsync(string prompt, TextGenerationOptions options, CancellationToken cancellationToken = default) + public async IAsyncEnumerable GenerateTextAsync(string prompt, TextGenerationOptions options, [EnumeratorCancellation] CancellationToken cancellationToken = default) { - return this._completion.CompleteStreamAsync(prompt, this.ToAIRequestSettings(options), cancellationToken); + var contents = this._completion.GetStreamingTextContentsAsync(prompt, this.ToAIRequestSettings(options), null, cancellationToken); + await foreach (var content in contents) + { + if (content != null) + { + yield return content.ToString(); + } + } } - private AIRequestSettings ToAIRequestSettings(TextGenerationOptions options) + private PromptExecutionSettings ToAIRequestSettings(TextGenerationOptions options) { - var settings = new AIRequestSettings(); + var settings = new PromptExecutionSettings(); settings.ExtensionData[nameof(options.Temperature)] = options.Temperature; settings.ExtensionData[nameof(options.TopP)] = options.TopP; settings.ExtensionData[nameof(options.PresencePenalty)] = options.PresencePenalty; diff --git a/service/Core/KernelMemoryBuilderExtensions.cs b/service/Core/KernelMemoryBuilderExtensions.cs index c9fe5f57c..dae2ac09a 100644 --- a/service/Core/KernelMemoryBuilderExtensions.cs +++ b/service/Core/KernelMemoryBuilderExtensions.cs @@ -9,7 +9,7 @@ using Microsoft.KernelMemory.Pipeline.Queue; using Microsoft.KernelMemory.Prompts; using Microsoft.SemanticKernel.AI.Embeddings; -using Microsoft.SemanticKernel.AI.TextCompletion; +using Microsoft.SemanticKernel.AI.TextGeneration; namespace Microsoft.KernelMemory; @@ -140,9 +140,9 @@ public static IKernelMemoryBuilder WithCustomPromptProvider( public static IKernelMemoryBuilder WithSemanticKernelTextCompletion( this IKernelMemoryBuilder builder, - ITextCompletion service) + ITextGenerationService service) { - service = service ?? throw new ConfigurationException("The semantic kernel text completion instance is NULL"); + service = service ?? throw new ConfigurationException("The semantic kernel text generation service instance is NULL"); builder.AddSingleton(new SemanticKernelTextGeneration(service)); return builder; } From 5a4cb4e8adb128cb329a3f6d03c3ae24cc82f8c3 Mon Sep 17 00:00:00 2001 From: xbotter Date: Wed, 6 Dec 2023 14:02:44 +0800 Subject: [PATCH 04/12] rename WithSemanticKernelTextGenerationService --- examples/105-dotnet-SemanticKernel-TextCompletion/Program.cs | 2 +- service/Core/KernelMemoryBuilderExtensions.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/105-dotnet-SemanticKernel-TextCompletion/Program.cs b/examples/105-dotnet-SemanticKernel-TextCompletion/Program.cs index c3c32b493..28048cb64 100644 --- a/examples/105-dotnet-SemanticKernel-TextCompletion/Program.cs +++ b/examples/105-dotnet-SemanticKernel-TextCompletion/Program.cs @@ -10,7 +10,7 @@ var embeddingDeployment = Env.Var("AOAI_DEPLOYMENT_EMBEDDING"); var memory = new KernelMemoryBuilder() - .WithSemanticKernelTextCompletion(new AzureOpenAIChatCompletionService(chatDeployment, "", endpoint, apiKey)) + .WithSemanticKernelTextGenerationService(new AzureOpenAIChatCompletionService(chatDeployment, "", endpoint, apiKey)) .WithCustomEmbeddingGeneration(new AzureOpenAITextEmbeddingGeneration(embeddingDeployment, "", endpoint, apiKey)) .Build(); diff --git a/service/Core/KernelMemoryBuilderExtensions.cs b/service/Core/KernelMemoryBuilderExtensions.cs index dae2ac09a..b299411f6 100644 --- a/service/Core/KernelMemoryBuilderExtensions.cs +++ b/service/Core/KernelMemoryBuilderExtensions.cs @@ -138,7 +138,7 @@ public static IKernelMemoryBuilder WithCustomPromptProvider( return builder; } - public static IKernelMemoryBuilder WithSemanticKernelTextCompletion( + public static IKernelMemoryBuilder WithSemanticKernelTextGenerationService( this IKernelMemoryBuilder builder, ITextGenerationService service) { From 64489f1130549073a8eb32a2ed7b94de9db16706 Mon Sep 17 00:00:00 2001 From: Devis Lucato Date: Tue, 5 Dec 2023 22:43:17 -0800 Subject: [PATCH 05/12] move code to Abstractions plus some refactoring --- .../KernelMemoryBuilderExtensions.cs | 28 +++++++++ .../SemanticKernelTextGeneration.cs | 63 +++++++++++++++++++ .../Core/AI/SemanticKernelTextGeneration.cs | 49 --------------- service/Core/KernelMemoryBuilderExtensions.cs | 10 --- 4 files changed, 91 insertions(+), 59 deletions(-) create mode 100644 service/Abstractions/SemanticKernel/KernelMemoryBuilderExtensions.cs create mode 100644 service/Abstractions/SemanticKernel/SemanticKernelTextGeneration.cs delete mode 100644 service/Core/AI/SemanticKernelTextGeneration.cs diff --git a/service/Abstractions/SemanticKernel/KernelMemoryBuilderExtensions.cs b/service/Abstractions/SemanticKernel/KernelMemoryBuilderExtensions.cs new file mode 100644 index 000000000..39cff2023 --- /dev/null +++ b/service/Abstractions/SemanticKernel/KernelMemoryBuilderExtensions.cs @@ -0,0 +1,28 @@ +// Copyright (c) Microsoft. All rights reserved. + +using Microsoft.KernelMemory.AI; +using Microsoft.KernelMemory.Configuration; +using Microsoft.SemanticKernel.AI.TextGeneration; + +namespace Microsoft.KernelMemory; + +/// +/// Kernel Memory builder extensions. +/// +public static partial class KernelMemoryBuilderExtensions +{ + /// + /// Inject an implementation of SK text generation service + /// for local dependencies on + /// + /// KM builder + /// SK text generation service instance + /// KM builder + public static IKernelMemoryBuilder WithSemanticKernelTextGenerationService( + this IKernelMemoryBuilder builder, + ITextGenerationService service) + { + service = service ?? throw new ConfigurationException("The semantic kernel text generation service instance is NULL"); + return builder.AddSingleton(new SemanticKernelTextGeneration(service)); + } +} diff --git a/service/Abstractions/SemanticKernel/SemanticKernelTextGeneration.cs b/service/Abstractions/SemanticKernel/SemanticKernelTextGeneration.cs new file mode 100644 index 000000000..249ea5412 --- /dev/null +++ b/service/Abstractions/SemanticKernel/SemanticKernelTextGeneration.cs @@ -0,0 +1,63 @@ +// Copyright (c) Microsoft. All rights reserved. + +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.SemanticKernel.AI; +using Microsoft.SemanticKernel.AI.TextGeneration; + +namespace Microsoft.KernelMemory.AI; + +internal class SemanticKernelTextGeneration : ITextGeneration +{ + private readonly ITextGenerationService _service; + + public SemanticKernelTextGeneration(ITextGenerationService service) + { + this._service = service; + } + + /// + public async IAsyncEnumerable GenerateTextAsync( + string prompt, + TextGenerationOptions options, + [EnumeratorCancellation] CancellationToken cancellationToken = default) + { + var contents = this._service.GetStreamingTextContentsAsync( + prompt, ToPromptExecutionSettings(options), null, cancellationToken).ConfigureAwait(false); + + await foreach (StreamingTextContent? content in contents) + { + if (content != null) + { + yield return content.ToString(); + } + } + } + + private static PromptExecutionSettings ToPromptExecutionSettings(TextGenerationOptions options) + { + var settings = new PromptExecutionSettings + { + ExtensionData = + { + [nameof(options.Temperature)] = options.Temperature, + [nameof(options.TopP)] = options.TopP, + [nameof(options.PresencePenalty)] = options.PresencePenalty, + [nameof(options.FrequencyPenalty)] = options.FrequencyPenalty, + [nameof(options.StopSequences)] = options.StopSequences + } + }; + + if (options.MaxTokens != null) + { + settings.ExtensionData[nameof(options.MaxTokens)] = options.MaxTokens; + } + + settings.ExtensionData[nameof(options.ResultsPerPrompt)] = options.ResultsPerPrompt; + settings.ExtensionData[nameof(options.TokenSelectionBiases)] = options.TokenSelectionBiases; + + return settings; + } +} diff --git a/service/Core/AI/SemanticKernelTextGeneration.cs b/service/Core/AI/SemanticKernelTextGeneration.cs deleted file mode 100644 index 2a9ce806a..000000000 --- a/service/Core/AI/SemanticKernelTextGeneration.cs +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. - -using System.Collections.Generic; -using System.Runtime.CompilerServices; -using System.Threading; -using Microsoft.SemanticKernel.AI; -using Microsoft.SemanticKernel.AI.TextGeneration; - -namespace Microsoft.KernelMemory.AI; -internal class SemanticKernelTextGeneration : ITextGeneration -{ - private readonly ITextGenerationService _completion; - - public SemanticKernelTextGeneration(ITextGenerationService completion) - { - this._completion = completion; - } - - public async IAsyncEnumerable GenerateTextAsync(string prompt, TextGenerationOptions options, [EnumeratorCancellation] CancellationToken cancellationToken = default) - { - var contents = this._completion.GetStreamingTextContentsAsync(prompt, this.ToAIRequestSettings(options), null, cancellationToken); - await foreach (var content in contents) - { - if (content != null) - { - yield return content.ToString(); - } - } - } - - private PromptExecutionSettings ToAIRequestSettings(TextGenerationOptions options) - { - var settings = new PromptExecutionSettings(); - settings.ExtensionData[nameof(options.Temperature)] = options.Temperature; - settings.ExtensionData[nameof(options.TopP)] = options.TopP; - settings.ExtensionData[nameof(options.PresencePenalty)] = options.PresencePenalty; - settings.ExtensionData[nameof(options.FrequencyPenalty)] = options.FrequencyPenalty; - settings.ExtensionData[nameof(options.StopSequences)] = options.StopSequences; - - if (options.MaxTokens != null) - { - settings.ExtensionData[nameof(options.MaxTokens)] = options.MaxTokens; - } - - settings.ExtensionData[nameof(options.ResultsPerPrompt)] = options.ResultsPerPrompt; - settings.ExtensionData[nameof(options.TokenSelectionBiases)] = options.TokenSelectionBiases; - return settings; - } -} diff --git a/service/Core/KernelMemoryBuilderExtensions.cs b/service/Core/KernelMemoryBuilderExtensions.cs index b299411f6..2ff887172 100644 --- a/service/Core/KernelMemoryBuilderExtensions.cs +++ b/service/Core/KernelMemoryBuilderExtensions.cs @@ -9,7 +9,6 @@ using Microsoft.KernelMemory.Pipeline.Queue; using Microsoft.KernelMemory.Prompts; using Microsoft.SemanticKernel.AI.Embeddings; -using Microsoft.SemanticKernel.AI.TextGeneration; namespace Microsoft.KernelMemory; @@ -137,13 +136,4 @@ public static IKernelMemoryBuilder WithCustomPromptProvider( builder.AddSingleton(service); return builder; } - - public static IKernelMemoryBuilder WithSemanticKernelTextGenerationService( - this IKernelMemoryBuilder builder, - ITextGenerationService service) - { - service = service ?? throw new ConfigurationException("The semantic kernel text generation service instance is NULL"); - builder.AddSingleton(new SemanticKernelTextGeneration(service)); - return builder; - } } From 7fb90ee2500e933fd189ecfc28a96224a27a828b Mon Sep 17 00:00:00 2001 From: xbotter Date: Wed, 6 Dec 2023 15:00:39 +0800 Subject: [PATCH 06/12] fix: example 105 include pdf file --- .../105-dotnet-SemanticKernel-TextCompletion.csproj | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/examples/105-dotnet-SemanticKernel-TextCompletion/105-dotnet-SemanticKernel-TextCompletion.csproj b/examples/105-dotnet-SemanticKernel-TextCompletion/105-dotnet-SemanticKernel-TextCompletion.csproj index 3967e5064..42b2c4fa6 100644 --- a/examples/105-dotnet-SemanticKernel-TextCompletion/105-dotnet-SemanticKernel-TextCompletion.csproj +++ b/examples/105-dotnet-SemanticKernel-TextCompletion/105-dotnet-SemanticKernel-TextCompletion.csproj @@ -10,6 +10,12 @@ CA1711,CA1724,CA1308,CA1812,CA1859,CA2208,CS1591,NU5104,SKEXP0001,SKEXP0011 + + + Always + + + From 8f15615171c1edacc87519d2f6df6672c05d5746 Mon Sep 17 00:00:00 2001 From: xbotter Date: Fri, 8 Dec 2023 11:12:23 +0800 Subject: [PATCH 07/12] =?UTF-8?q?=F0=9F=94=A7=20Refactor=20Semantic=20Kern?= =?UTF-8?q?el=20Text=20Generation=20and=20Embedding=20Generation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Refactored the Semantic Kernel Text Generation and Embedding Generation classes to improve code organization and readability. - Added a new class, SemanticKernelConfig, to store configuration settings for the Text Generator and Embedding Generator. - Updated the KernelMemoryBuilderExtensions class to include methods for injecting the new Text Generator and Embedding Generator implementations. - The Text Generator and Embedding Generator now use the provided configuration and tokenizer instances. - Renamed the SemanticKernelTextGeneration class to SemanticKernelTextGenerator to better reflect its purpose. - The SemanticKernelTextEmbeddingGenerator class now implements the ITextEmbeddingGenerator interface and uses the provided Text Tokenizer to count tokens. - The GenerateEmbeddingAsync method in the SemanticKernelTextEmbeddingGenerator class now calls the GenerateEmbeddingAsync method in the ITextEmbeddingGeneration instance. - The CountTokens method in the SemanticKernelTextEmbeddingGenerator class now calls the CountTokens method in the provided Text Tokenizer. --- .../Program.cs | 12 ++++- .../KernelMemoryBuilderExtensions.cs | 45 +++++++++++++++++-- .../SemanticKernel/SemanticKernelConfig.cs | 10 +++++ .../SemanticKernelTextEmbeddingGenerator.cs | 34 ++++++++++++++ ...tion.cs => SemanticKernelTextGenerator.cs} | 21 ++++++--- 5 files changed, 111 insertions(+), 11 deletions(-) create mode 100644 service/Abstractions/SemanticKernel/SemanticKernelConfig.cs create mode 100644 service/Abstractions/SemanticKernel/SemanticKernelTextEmbeddingGenerator.cs rename service/Abstractions/SemanticKernel/{SemanticKernelTextGeneration.cs => SemanticKernelTextGenerator.cs} (71%) diff --git a/examples/105-dotnet-SemanticKernel-TextCompletion/Program.cs b/examples/105-dotnet-SemanticKernel-TextCompletion/Program.cs index 28048cb64..6c50a50ea 100644 --- a/examples/105-dotnet-SemanticKernel-TextCompletion/Program.cs +++ b/examples/105-dotnet-SemanticKernel-TextCompletion/Program.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft. All rights reserved. using Microsoft.KernelMemory; +using Microsoft.KernelMemory.AI.Tokenizers; using Microsoft.SemanticKernel.Connectors.AI.OpenAI.ChatCompletion; using Microsoft.SemanticKernel.Connectors.AI.OpenAI.TextEmbedding; @@ -9,9 +10,16 @@ var chatDeployment = Env.Var("AOAI_DEPLOYMENT_CHAT"); var embeddingDeployment = Env.Var("AOAI_DEPLOYMENT_EMBEDDING"); +var config = new SemanticKernelConfig(); +var tokenizer = new DefaultGPTTokenizer(); + var memory = new KernelMemoryBuilder() - .WithSemanticKernelTextGenerationService(new AzureOpenAIChatCompletionService(chatDeployment, "", endpoint, apiKey)) - .WithCustomEmbeddingGeneration(new AzureOpenAITextEmbeddingGeneration(embeddingDeployment, "", endpoint, apiKey)) + .WithSemanticKernelTextGenerationService(new AzureOpenAIChatCompletionService(chatDeployment, "", endpoint, apiKey) + , config + , tokenizer) + .WithSemanticKernelTextEmbeddingGeneration(new AzureOpenAITextEmbeddingGeneration(embeddingDeployment, "", endpoint, apiKey) + , config + , tokenizer) .Build(); // using document form 203-dotnet-using-core-nuget diff --git a/service/Abstractions/SemanticKernel/KernelMemoryBuilderExtensions.cs b/service/Abstractions/SemanticKernel/KernelMemoryBuilderExtensions.cs index 39cff2023..526f90ac7 100644 --- a/service/Abstractions/SemanticKernel/KernelMemoryBuilderExtensions.cs +++ b/service/Abstractions/SemanticKernel/KernelMemoryBuilderExtensions.cs @@ -2,6 +2,7 @@ using Microsoft.KernelMemory.AI; using Microsoft.KernelMemory.Configuration; +using Microsoft.SemanticKernel.AI.Embeddings; using Microsoft.SemanticKernel.AI.TextGeneration; namespace Microsoft.KernelMemory; @@ -13,16 +14,54 @@ public static partial class KernelMemoryBuilderExtensions { /// /// Inject an implementation of SK text generation service - /// for local dependencies on + /// for local dependencies on /// /// KM builder /// SK text generation service instance + /// SK text generator settings + /// Tokenizer used to count tokens used by prompts /// KM builder public static IKernelMemoryBuilder WithSemanticKernelTextGenerationService( this IKernelMemoryBuilder builder, - ITextGenerationService service) + ITextGenerationService service, + SemanticKernelConfig config, + ITextTokenizer tokenizer) { service = service ?? throw new ConfigurationException("The semantic kernel text generation service instance is NULL"); - return builder.AddSingleton(new SemanticKernelTextGeneration(service)); + tokenizer = tokenizer ?? throw new ConfigurationException("The text tokenizer instance is NULL"); + + return builder.AddSingleton(new SemanticKernelTextGenerator(service, config, tokenizer)); + } + + /// + ///Inject an implementation ofSK text embedding generation + /// for local dependencies on + /// + /// KM builder + /// SK text embedding generation instance + /// SK text embedding generator settings + /// Tokenizer used to count tokens sent to the embedding generator + /// Whether to use this embedding generator only during data ingestion, and not for retrieval (search and ask API) + /// KM builder + public static IKernelMemoryBuilder WithSemanticKernelTextEmbeddingGeneration( + this IKernelMemoryBuilder builder, + ITextEmbeddingGeneration service, + SemanticKernelConfig config, + ITextTokenizer tokenizer, + bool onlyForRetrieval = false) + { + service = service ?? throw new ConfigurationException("The semantic kernel text embedding generation service instance is NULL"); + tokenizer = tokenizer ?? throw new ConfigurationException("The text tokenizer instance is NULL"); + + var generator = new SemanticKernelTextEmbeddingGenerator(service, config, tokenizer); + + builder.AddSingleton(generator); + + if (!onlyForRetrieval) + { + builder.AddIngestionEmbeddingGenerator(generator); + } + + return builder; } } diff --git a/service/Abstractions/SemanticKernel/SemanticKernelConfig.cs b/service/Abstractions/SemanticKernel/SemanticKernelConfig.cs new file mode 100644 index 000000000..7731f17eb --- /dev/null +++ b/service/Abstractions/SemanticKernel/SemanticKernelConfig.cs @@ -0,0 +1,10 @@ +// Copyright (c) Microsoft. All rights reserved. + +namespace Microsoft.KernelMemory; +/// +/// Semantic Kernel TextGenerator And TextEmbeddingGenerator Config +/// +public class SemanticKernelConfig +{ + public int MaxTokenTotal { get; set; } = 8191; +} diff --git a/service/Abstractions/SemanticKernel/SemanticKernelTextEmbeddingGenerator.cs b/service/Abstractions/SemanticKernel/SemanticKernelTextEmbeddingGenerator.cs new file mode 100644 index 000000000..cf864c921 --- /dev/null +++ b/service/Abstractions/SemanticKernel/SemanticKernelTextEmbeddingGenerator.cs @@ -0,0 +1,34 @@ +// Copyright (c) Microsoft. All rights reserved. + +using System.Threading; +using System.Threading.Tasks; +using Microsoft.KernelMemory.AI; +using Microsoft.SemanticKernel.AI.Embeddings; + +namespace Microsoft.KernelMemory; +internal class SemanticKernelTextEmbeddingGenerator : ITextEmbeddingGenerator +{ + private readonly ITextTokenizer _textTokenizer; + private readonly ITextEmbeddingGeneration _generation; + private readonly SemanticKernelConfig _config; + + public int MaxTokens { get; } + + public SemanticKernelTextEmbeddingGenerator(ITextEmbeddingGeneration generation, + SemanticKernelConfig config, + ITextTokenizer tokenizer) + { + this._generation = generation; + this._config = config; + this._textTokenizer = tokenizer; + + this.MaxTokens = config.MaxTokenTotal; + } + + /// + public int CountTokens(string text) => this._textTokenizer.CountTokens(text); + + /// + public Task GenerateEmbeddingAsync(string text, CancellationToken cancellationToken = default) + => this._generation.GenerateEmbeddingAsync(text, cancellationToken); +} diff --git a/service/Abstractions/SemanticKernel/SemanticKernelTextGeneration.cs b/service/Abstractions/SemanticKernel/SemanticKernelTextGenerator.cs similarity index 71% rename from service/Abstractions/SemanticKernel/SemanticKernelTextGeneration.cs rename to service/Abstractions/SemanticKernel/SemanticKernelTextGenerator.cs index 249ea5412..ad97dcca0 100644 --- a/service/Abstractions/SemanticKernel/SemanticKernelTextGeneration.cs +++ b/service/Abstractions/SemanticKernel/SemanticKernelTextGenerator.cs @@ -9,13 +9,20 @@ namespace Microsoft.KernelMemory.AI; -internal class SemanticKernelTextGeneration : ITextGeneration +internal class SemanticKernelTextGenerator : ITextGenerator { private readonly ITextGenerationService _service; + private readonly ITextTokenizer _tokenizer; + private readonly SemanticKernelConfig _config; - public SemanticKernelTextGeneration(ITextGenerationService service) + public int MaxTokenTotal { get; } + + public SemanticKernelTextGenerator(ITextGenerationService service, SemanticKernelConfig config, ITextTokenizer tokenizer) { this._service = service; + this._config = config; + this._tokenizer = tokenizer; + this.MaxTokenTotal = config.MaxTokenTotal; } /// @@ -46,7 +53,9 @@ private static PromptExecutionSettings ToPromptExecutionSettings(TextGenerationO [nameof(options.TopP)] = options.TopP, [nameof(options.PresencePenalty)] = options.PresencePenalty, [nameof(options.FrequencyPenalty)] = options.FrequencyPenalty, - [nameof(options.StopSequences)] = options.StopSequences + [nameof(options.StopSequences)] = options.StopSequences, + [nameof(options.ResultsPerPrompt)] = options.ResultsPerPrompt, + [nameof(options.TokenSelectionBiases)] = options.TokenSelectionBiases } }; @@ -55,9 +64,9 @@ private static PromptExecutionSettings ToPromptExecutionSettings(TextGenerationO settings.ExtensionData[nameof(options.MaxTokens)] = options.MaxTokens; } - settings.ExtensionData[nameof(options.ResultsPerPrompt)] = options.ResultsPerPrompt; - settings.ExtensionData[nameof(options.TokenSelectionBiases)] = options.TokenSelectionBiases; - return settings; } + + /// + public int CountTokens(string text) => this._tokenizer.CountTokens(text); } From f6a432196b030965115e0136201fd37d1bfb1559 Mon Sep 17 00:00:00 2001 From: xbotter Date: Fri, 8 Dec 2023 11:20:36 +0800 Subject: [PATCH 08/12] =?UTF-8?q?=F0=9F=94=A7=20Update=20SemanticKernelCon?= =?UTF-8?q?fig=20and=20SemanticKernelTextEmbeddingGenerator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Update SemanticKernelTextEmbeddingGenerator.cs to add a using statement and modify the constructor to handle null arguments. - Update SemanticKernelTextGenerator.cs to add a using statement and modify the constructor to handle null arguments. --- .../SemanticKernel/SemanticKernelConfig.cs | 1 + .../SemanticKernelTextEmbeddingGenerator.cs | 12 +++++++----- .../SemanticKernel/SemanticKernelTextGenerator.cs | 5 +++-- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/service/Abstractions/SemanticKernel/SemanticKernelConfig.cs b/service/Abstractions/SemanticKernel/SemanticKernelConfig.cs index 7731f17eb..8be7c0175 100644 --- a/service/Abstractions/SemanticKernel/SemanticKernelConfig.cs +++ b/service/Abstractions/SemanticKernel/SemanticKernelConfig.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft. All rights reserved. namespace Microsoft.KernelMemory; + /// /// Semantic Kernel TextGenerator And TextEmbeddingGenerator Config /// diff --git a/service/Abstractions/SemanticKernel/SemanticKernelTextEmbeddingGenerator.cs b/service/Abstractions/SemanticKernel/SemanticKernelTextEmbeddingGenerator.cs index cf864c921..836ac1862 100644 --- a/service/Abstractions/SemanticKernel/SemanticKernelTextEmbeddingGenerator.cs +++ b/service/Abstractions/SemanticKernel/SemanticKernelTextEmbeddingGenerator.cs @@ -1,5 +1,6 @@ // Copyright (c) Microsoft. All rights reserved. +using System; using System.Threading; using System.Threading.Tasks; using Microsoft.KernelMemory.AI; @@ -8,7 +9,7 @@ namespace Microsoft.KernelMemory; internal class SemanticKernelTextEmbeddingGenerator : ITextEmbeddingGenerator { - private readonly ITextTokenizer _textTokenizer; + private readonly ITextTokenizer _tokenizer; private readonly ITextEmbeddingGeneration _generation; private readonly SemanticKernelConfig _config; @@ -18,15 +19,16 @@ public SemanticKernelTextEmbeddingGenerator(ITextEmbeddingGeneration generation, SemanticKernelConfig config, ITextTokenizer tokenizer) { - this._generation = generation; - this._config = config; - this._textTokenizer = tokenizer; + this._generation = generation ?? throw new ArgumentNullException(nameof(generation)); + this._tokenizer = tokenizer ?? throw new ArgumentNullException(nameof(tokenizer), "Tokenizer not specified. The token count might be incorrect, causing unexpected errors"); + this._tokenizer = tokenizer; + this._config = config; this.MaxTokens = config.MaxTokenTotal; } /// - public int CountTokens(string text) => this._textTokenizer.CountTokens(text); + public int CountTokens(string text) => this._tokenizer.CountTokens(text); /// public Task GenerateEmbeddingAsync(string text, CancellationToken cancellationToken = default) diff --git a/service/Abstractions/SemanticKernel/SemanticKernelTextGenerator.cs b/service/Abstractions/SemanticKernel/SemanticKernelTextGenerator.cs index ad97dcca0..fe4fb2d88 100644 --- a/service/Abstractions/SemanticKernel/SemanticKernelTextGenerator.cs +++ b/service/Abstractions/SemanticKernel/SemanticKernelTextGenerator.cs @@ -1,5 +1,6 @@ // Copyright (c) Microsoft. All rights reserved. +using System; using System.Collections.Generic; using System.Runtime.CompilerServices; using System.Threading; @@ -19,9 +20,9 @@ internal class SemanticKernelTextGenerator : ITextGenerator public SemanticKernelTextGenerator(ITextGenerationService service, SemanticKernelConfig config, ITextTokenizer tokenizer) { - this._service = service; + this._service = service ?? throw new ArgumentNullException(nameof(service)); + this._tokenizer = tokenizer ?? throw new ArgumentNullException(nameof(tokenizer), "Tokenizer not specified. The token count might be incorrect, causing unexpected errors"); this._config = config; - this._tokenizer = tokenizer; this.MaxTokenTotal = config.MaxTokenTotal; } From 8831cb2b41f6b7774da11d4a925b98782f039b21 Mon Sep 17 00:00:00 2001 From: xbotter Date: Tue, 12 Dec 2023 12:05:25 +0800 Subject: [PATCH 09/12] rename 107-dotnet-SemanticKernel-TextCompletion project --- KernelMemory.sln | 12 ++++++++---- .../107-dotnet-SemanticKernel-TextCompletion.csproj} | 2 +- .../Program.cs | 0 3 files changed, 9 insertions(+), 5 deletions(-) rename examples/{105-dotnet-SemanticKernel-TextCompletion/105-dotnet-SemanticKernel-TextCompletion.csproj => 107-dotnet-SemanticKernel-TextCompletion/107-dotnet-SemanticKernel-TextCompletion.csproj} (92%) rename examples/{105-dotnet-SemanticKernel-TextCompletion => 107-dotnet-SemanticKernel-TextCompletion}/Program.cs (100%) diff --git a/KernelMemory.sln b/KernelMemory.sln index 4813ef993..1b036dea2 100644 --- a/KernelMemory.sln +++ b/KernelMemory.sln @@ -1,6 +1,6 @@  Microsoft Visual Studio Solution File, Format Version 12.00 - +# Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "root", "root", "{6EF76FD8-4C35-4370-8539-5DDF45357A50}" ProjectSection(SolutionItems) = preProject README.md = README.md @@ -56,7 +56,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{CA49F1A1 tools\create-azure-webapp-publish-artifacts.sh = tools\create-azure-webapp-publish-artifacts.sh EndProjectSection EndProject - Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Abstractions", "service\Abstractions\Abstractions.csproj", "{8A9FA587-7EBA-4D43-BE47-38D798B1C74C}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "service\Core\Core.csproj", "{27910ADC-5A28-4EB4-A16E-974B91940758}" @@ -77,7 +76,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SemanticKernelPlugin", "cli EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebClient", "clients\dotnet\WebClient\WebClient.csproj", "{D04A01C0-EF1B-49B2-B6AB-8AC635566E6A}" EndProject - Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "000-notebooks", "000-notebooks", "{C93FCED9-808A-4B03-9B4C-0DBAE46D5BDD}" ProjectSection(SolutionItems) = preProject examples\000-notebooks\001-upload-and-ask.ipynb = examples\000-notebooks\001-upload-and-ask.ipynb @@ -185,6 +183,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "105-dotnet-serverless-llama EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "106-dotnet-retrieve-synthetics", "examples\106-dotnet-retrieve-synthetics\106-dotnet-retrieve-synthetics.csproj", "{EDFDA12E-BA10-4A00-BBE7-1C10A0B0F1A6}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "107-dotnet-SemanticKernel-TextCompletion", "examples\107-dotnet-SemanticKernel-TextCompletion\107-dotnet-SemanticKernel-TextCompletion.csproj", "{D9FEFBA3-51B0-4E9B-8E89-3BDF239EF5C3}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -230,7 +230,7 @@ Global {F866C3E9-1DD4-4D5A-A30F-079FA195EC3C} = {0A43C65C-6007-4BB4-B3FE-8D439FC91841} {E762B1C6-4B5B-487A-BF8C-C6870D6EACB7} = {0A43C65C-6007-4BB4-B3FE-8D439FC91841} {EDFDA12E-BA10-4A00-BBE7-1C10A0B0F1A6} = {0A43C65C-6007-4BB4-B3FE-8D439FC91841} - + {D9FEFBA3-51B0-4E9B-8E89-3BDF239EF5C3} = {0A43C65C-6007-4BB4-B3FE-8D439FC91841} EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {8A9FA587-7EBA-4D43-BE47-38D798B1C74C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU @@ -349,5 +349,9 @@ Global {EDFDA12E-BA10-4A00-BBE7-1C10A0B0F1A6}.Debug|Any CPU.Build.0 = Debug|Any CPU {EDFDA12E-BA10-4A00-BBE7-1C10A0B0F1A6}.Release|Any CPU.ActiveCfg = Release|Any CPU {EDFDA12E-BA10-4A00-BBE7-1C10A0B0F1A6}.Release|Any CPU.Build.0 = Release|Any CPU + {D9FEFBA3-51B0-4E9B-8E89-3BDF239EF5C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D9FEFBA3-51B0-4E9B-8E89-3BDF239EF5C3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D9FEFBA3-51B0-4E9B-8E89-3BDF239EF5C3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D9FEFBA3-51B0-4E9B-8E89-3BDF239EF5C3}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal diff --git a/examples/105-dotnet-SemanticKernel-TextCompletion/105-dotnet-SemanticKernel-TextCompletion.csproj b/examples/107-dotnet-SemanticKernel-TextCompletion/107-dotnet-SemanticKernel-TextCompletion.csproj similarity index 92% rename from examples/105-dotnet-SemanticKernel-TextCompletion/105-dotnet-SemanticKernel-TextCompletion.csproj rename to examples/107-dotnet-SemanticKernel-TextCompletion/107-dotnet-SemanticKernel-TextCompletion.csproj index 42b2c4fa6..ba302eb1b 100644 --- a/examples/105-dotnet-SemanticKernel-TextCompletion/105-dotnet-SemanticKernel-TextCompletion.csproj +++ b/examples/107-dotnet-SemanticKernel-TextCompletion/107-dotnet-SemanticKernel-TextCompletion.csproj @@ -3,7 +3,7 @@ Exe net8.0 - _105_dotnet_SemanticKernel_TextCompletion + _107_dotnet_SemanticKernel_TextCompletion enable enable 5ee045b0-aea3-4f08-8d31-32d1a6f8fed0 diff --git a/examples/105-dotnet-SemanticKernel-TextCompletion/Program.cs b/examples/107-dotnet-SemanticKernel-TextCompletion/Program.cs similarity index 100% rename from examples/105-dotnet-SemanticKernel-TextCompletion/Program.cs rename to examples/107-dotnet-SemanticKernel-TextCompletion/Program.cs From 3bb5ee8e1a623dad15f6bf86f0bde51597058c1e Mon Sep 17 00:00:00 2001 From: xbotter Date: Tue, 19 Dec 2023 09:09:10 +0800 Subject: [PATCH 10/12] sk 1.0.1 --- .../107-dotnet-SemanticKernel-TextCompletion/Program.cs | 7 +++---- .../SemanticKernel/KernelMemoryBuilderExtensions.cs | 9 +++++---- .../SemanticKernelTextEmbeddingGenerator.cs | 5 +++-- .../SemanticKernel/SemanticKernelTextGenerator.cs | 7 +++---- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/examples/107-dotnet-SemanticKernel-TextCompletion/Program.cs b/examples/107-dotnet-SemanticKernel-TextCompletion/Program.cs index 6c50a50ea..8de54b98b 100644 --- a/examples/107-dotnet-SemanticKernel-TextCompletion/Program.cs +++ b/examples/107-dotnet-SemanticKernel-TextCompletion/Program.cs @@ -2,8 +2,7 @@ using Microsoft.KernelMemory; using Microsoft.KernelMemory.AI.Tokenizers; -using Microsoft.SemanticKernel.Connectors.AI.OpenAI.ChatCompletion; -using Microsoft.SemanticKernel.Connectors.AI.OpenAI.TextEmbedding; +using Microsoft.SemanticKernel.Connectors.OpenAI; var endpoint = Env.Var("AOAI_ENDPOINT"); var apiKey = Env.Var("AOAI_API_KEY"); @@ -14,10 +13,10 @@ var tokenizer = new DefaultGPTTokenizer(); var memory = new KernelMemoryBuilder() - .WithSemanticKernelTextGenerationService(new AzureOpenAIChatCompletionService(chatDeployment, "", endpoint, apiKey) + .WithSemanticKernelTextGenerationService(new AzureOpenAIChatCompletionService(chatDeployment, endpoint, apiKey) , config , tokenizer) - .WithSemanticKernelTextEmbeddingGeneration(new AzureOpenAITextEmbeddingGeneration(embeddingDeployment, "", endpoint, apiKey) + .WithSemanticKernelTextEmbeddingGenerationService(new AzureOpenAITextEmbeddingGenerationService(embeddingDeployment, endpoint, apiKey) , config , tokenizer) .Build(); diff --git a/service/Abstractions/SemanticKernel/KernelMemoryBuilderExtensions.cs b/service/Abstractions/SemanticKernel/KernelMemoryBuilderExtensions.cs index 526f90ac7..95ea0119b 100644 --- a/service/Abstractions/SemanticKernel/KernelMemoryBuilderExtensions.cs +++ b/service/Abstractions/SemanticKernel/KernelMemoryBuilderExtensions.cs @@ -2,8 +2,9 @@ using Microsoft.KernelMemory.AI; using Microsoft.KernelMemory.Configuration; +using Microsoft.SemanticKernel.TextGeneration; using Microsoft.SemanticKernel.AI.Embeddings; -using Microsoft.SemanticKernel.AI.TextGeneration; +using Microsoft.SemanticKernel.Embeddings; namespace Microsoft.KernelMemory; @@ -34,7 +35,7 @@ public static IKernelMemoryBuilder WithSemanticKernelTextGenerationService( } /// - ///Inject an implementation ofSK text embedding generation + ///Inject an implementation ofSK text embedding generation service /// for local dependencies on /// /// KM builder @@ -43,9 +44,9 @@ public static IKernelMemoryBuilder WithSemanticKernelTextGenerationService( /// Tokenizer used to count tokens sent to the embedding generator /// Whether to use this embedding generator only during data ingestion, and not for retrieval (search and ask API) /// KM builder - public static IKernelMemoryBuilder WithSemanticKernelTextEmbeddingGeneration( + public static IKernelMemoryBuilder WithSemanticKernelTextEmbeddingGenerationService( this IKernelMemoryBuilder builder, - ITextEmbeddingGeneration service, + ITextEmbeddingGenerationService service, SemanticKernelConfig config, ITextTokenizer tokenizer, bool onlyForRetrieval = false) diff --git a/service/Abstractions/SemanticKernel/SemanticKernelTextEmbeddingGenerator.cs b/service/Abstractions/SemanticKernel/SemanticKernelTextEmbeddingGenerator.cs index 836ac1862..ac06363ae 100644 --- a/service/Abstractions/SemanticKernel/SemanticKernelTextEmbeddingGenerator.cs +++ b/service/Abstractions/SemanticKernel/SemanticKernelTextEmbeddingGenerator.cs @@ -5,17 +5,18 @@ using System.Threading.Tasks; using Microsoft.KernelMemory.AI; using Microsoft.SemanticKernel.AI.Embeddings; +using Microsoft.SemanticKernel.Embeddings; namespace Microsoft.KernelMemory; internal class SemanticKernelTextEmbeddingGenerator : ITextEmbeddingGenerator { private readonly ITextTokenizer _tokenizer; - private readonly ITextEmbeddingGeneration _generation; + private readonly ITextEmbeddingGenerationService _generation; private readonly SemanticKernelConfig _config; public int MaxTokens { get; } - public SemanticKernelTextEmbeddingGenerator(ITextEmbeddingGeneration generation, + public SemanticKernelTextEmbeddingGenerator(ITextEmbeddingGenerationService generation, SemanticKernelConfig config, ITextTokenizer tokenizer) { diff --git a/service/Abstractions/SemanticKernel/SemanticKernelTextGenerator.cs b/service/Abstractions/SemanticKernel/SemanticKernelTextGenerator.cs index fe4fb2d88..2833d2200 100644 --- a/service/Abstractions/SemanticKernel/SemanticKernelTextGenerator.cs +++ b/service/Abstractions/SemanticKernel/SemanticKernelTextGenerator.cs @@ -5,9 +5,8 @@ using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; -using Microsoft.SemanticKernel.AI; -using Microsoft.SemanticKernel.AI.TextGeneration; - +using Microsoft.SemanticKernel; +using Microsoft.SemanticKernel.TextGeneration; namespace Microsoft.KernelMemory.AI; internal class SemanticKernelTextGenerator : ITextGenerator @@ -48,7 +47,7 @@ private static PromptExecutionSettings ToPromptExecutionSettings(TextGenerationO { var settings = new PromptExecutionSettings { - ExtensionData = + ExtensionData = new() { [nameof(options.Temperature)] = options.Temperature, [nameof(options.TopP)] = options.TopP, From 61dac3b078f3260078d2f0d4bf55ab37cfbb041c Mon Sep 17 00:00:00 2001 From: Devis Lucato Date: Mon, 18 Mar 2024 11:06:31 +0100 Subject: [PATCH 11/12] Update PR --- KernelMemory.sln | 6 +++++ ...otnet-SemanticKernel-TextCompletion.csproj | 12 +++++---- .../Program.cs | 24 ++++++++---------- .../story.docx | Bin 0 -> 28247 bytes .../KernelMemoryBuilderExtensions.cs | 3 +-- .../SemanticKernelTextEmbeddingGenerator.cs | 12 +++++---- .../SemanticKernelTextGenerator.cs | 10 +++++--- service/Service/Service.csproj | 1 + 8 files changed, 38 insertions(+), 30 deletions(-) create mode 100644 examples/107-dotnet-SemanticKernel-TextCompletion/story.docx diff --git a/KernelMemory.sln b/KernelMemory.sln index d11ab1451..59c2ae5bf 100644 --- a/KernelMemory.sln +++ b/KernelMemory.sln @@ -230,6 +230,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MongoDbAtlas", "extensions\ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MongoDbAtlas.FunctionalTests", "extensions\MongoDbAtlas\MongoDbAtlas.FunctionalTests\MongoDbAtlas.FunctionalTests.csproj", "{8A602227-B291-4F1B-ACB8-237F49501B6A}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "107-dotnet-SemanticKernel-TextCompletion", "examples\107-dotnet-SemanticKernel-TextCompletion\107-dotnet-SemanticKernel-TextCompletion.csproj", "{494B8590-F0B2-4D40-A895-F9D7BDF26250}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -298,6 +300,7 @@ Global {A5CE3CB2-F746-4832-B239-1A3226F9BD48} = {0A43C65C-6007-4BB4-B3FE-8D439FC91841} {4A539320-EB49-4688-82E1-4FA0ADBB3810} = {155DA079-E267-49AF-973A-D1D44681970F} {8A602227-B291-4F1B-ACB8-237F49501B6A} = {3C17F42B-CFC8-4900-8CFB-88936311E919} + {494B8590-F0B2-4D40-A895-F9D7BDF26250} = {0A43C65C-6007-4BB4-B3FE-8D439FC91841} EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {8A9FA587-7EBA-4D43-BE47-38D798B1C74C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU @@ -486,5 +489,8 @@ Global {8A602227-B291-4F1B-ACB8-237F49501B6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8A602227-B291-4F1B-ACB8-237F49501B6A}.Debug|Any CPU.Build.0 = Debug|Any CPU {8A602227-B291-4F1B-ACB8-237F49501B6A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {494B8590-F0B2-4D40-A895-F9D7BDF26250}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {494B8590-F0B2-4D40-A895-F9D7BDF26250}.Debug|Any CPU.Build.0 = Debug|Any CPU + {494B8590-F0B2-4D40-A895-F9D7BDF26250}.Release|Any CPU.ActiveCfg = Release|Any CPU EndGlobalSection EndGlobal diff --git a/examples/107-dotnet-SemanticKernel-TextCompletion/107-dotnet-SemanticKernel-TextCompletion.csproj b/examples/107-dotnet-SemanticKernel-TextCompletion/107-dotnet-SemanticKernel-TextCompletion.csproj index ba302eb1b..882fd7c5a 100644 --- a/examples/107-dotnet-SemanticKernel-TextCompletion/107-dotnet-SemanticKernel-TextCompletion.csproj +++ b/examples/107-dotnet-SemanticKernel-TextCompletion/107-dotnet-SemanticKernel-TextCompletion.csproj @@ -7,17 +7,19 @@ enable enable 5ee045b0-aea3-4f08-8d31-32d1a6f8fed0 - CA1711,CA1724,CA1308,CA1812,CA1859,CA2208,CS1591,NU5104,SKEXP0001,SKEXP0011 + $(NoWarn);SKEXP0010; + $(DefineConstants);KernelMemoryDev - - Always - + - + + + Always + diff --git a/examples/107-dotnet-SemanticKernel-TextCompletion/Program.cs b/examples/107-dotnet-SemanticKernel-TextCompletion/Program.cs index 8de54b98b..ec2ff8866 100644 --- a/examples/107-dotnet-SemanticKernel-TextCompletion/Program.cs +++ b/examples/107-dotnet-SemanticKernel-TextCompletion/Program.cs @@ -1,7 +1,8 @@ // Copyright (c) Microsoft. All rights reserved. +#if KernelMemoryDev // This code requires the next release (use KernelMemoryDev.sln) using Microsoft.KernelMemory; -using Microsoft.KernelMemory.AI.Tokenizers; +using Microsoft.KernelMemory.AI.OpenAI; using Microsoft.SemanticKernel.Connectors.OpenAI; var endpoint = Env.Var("AOAI_ENDPOINT"); @@ -13,29 +14,24 @@ var tokenizer = new DefaultGPTTokenizer(); var memory = new KernelMemoryBuilder() - .WithSemanticKernelTextGenerationService(new AzureOpenAIChatCompletionService(chatDeployment, endpoint, apiKey) - , config - , tokenizer) - .WithSemanticKernelTextEmbeddingGenerationService(new AzureOpenAITextEmbeddingGenerationService(embeddingDeployment, endpoint, apiKey) - , config - , tokenizer) + .WithSemanticKernelTextGenerationService( + new AzureOpenAIChatCompletionService(chatDeployment, endpoint, apiKey), config, tokenizer) + .WithSemanticKernelTextEmbeddingGenerationService( + new AzureOpenAITextEmbeddingGenerationService(embeddingDeployment, endpoint, apiKey), config, tokenizer) .Build(); -// using document form 203-dotnet-using-core-nuget - -await memory.ImportDocumentAsync("sample-SK-Readme.pdf", documentId: "doc001"); - -var question = "What's Semantic Kernel?"; +await memory.ImportDocumentAsync("story.docx", documentId: "doc001"); +var question = "What's radiant mold?"; Console.WriteLine($"\n\nQuestion: {question}"); var answer = await memory.AskAsync(question); - Console.WriteLine($"\nAnswer: {answer.Result}"); Console.WriteLine("\n\n Sources:\n"); - foreach (var x in answer.RelevantSources) { Console.WriteLine($" - {x.SourceName} - {x.Link} [{x.Partitions.First().LastUpdate:D}]"); } + +#endif diff --git a/examples/107-dotnet-SemanticKernel-TextCompletion/story.docx b/examples/107-dotnet-SemanticKernel-TextCompletion/story.docx new file mode 100644 index 0000000000000000000000000000000000000000..c3dbde1d98bb653cbece13527d2e680c132e9faa GIT binary patch literal 28247 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 literal 0 HcmV?d00001 diff --git a/service/Abstractions/SemanticKernel/KernelMemoryBuilderExtensions.cs b/service/Abstractions/SemanticKernel/KernelMemoryBuilderExtensions.cs index 95ea0119b..314575818 100644 --- a/service/Abstractions/SemanticKernel/KernelMemoryBuilderExtensions.cs +++ b/service/Abstractions/SemanticKernel/KernelMemoryBuilderExtensions.cs @@ -2,9 +2,8 @@ using Microsoft.KernelMemory.AI; using Microsoft.KernelMemory.Configuration; -using Microsoft.SemanticKernel.TextGeneration; -using Microsoft.SemanticKernel.AI.Embeddings; using Microsoft.SemanticKernel.Embeddings; +using Microsoft.SemanticKernel.TextGeneration; namespace Microsoft.KernelMemory; diff --git a/service/Abstractions/SemanticKernel/SemanticKernelTextEmbeddingGenerator.cs b/service/Abstractions/SemanticKernel/SemanticKernelTextEmbeddingGenerator.cs index ac06363ae..fc24db856 100644 --- a/service/Abstractions/SemanticKernel/SemanticKernelTextEmbeddingGenerator.cs +++ b/service/Abstractions/SemanticKernel/SemanticKernelTextEmbeddingGenerator.cs @@ -8,17 +8,22 @@ using Microsoft.SemanticKernel.Embeddings; namespace Microsoft.KernelMemory; + internal class SemanticKernelTextEmbeddingGenerator : ITextEmbeddingGenerator { private readonly ITextTokenizer _tokenizer; private readonly ITextEmbeddingGenerationService _generation; private readonly SemanticKernelConfig _config; + /// public int MaxTokens { get; } + /// + public int CountTokens(string text) => this._tokenizer.CountTokens(text); + public SemanticKernelTextEmbeddingGenerator(ITextEmbeddingGenerationService generation, - SemanticKernelConfig config, - ITextTokenizer tokenizer) + SemanticKernelConfig config, + ITextTokenizer tokenizer) { this._generation = generation ?? throw new ArgumentNullException(nameof(generation)); this._tokenizer = tokenizer ?? throw new ArgumentNullException(nameof(tokenizer), "Tokenizer not specified. The token count might be incorrect, causing unexpected errors"); @@ -28,9 +33,6 @@ public SemanticKernelTextEmbeddingGenerator(ITextEmbeddingGenerationService gene this.MaxTokens = config.MaxTokenTotal; } - /// - public int CountTokens(string text) => this._tokenizer.CountTokens(text); - /// public Task GenerateEmbeddingAsync(string text, CancellationToken cancellationToken = default) => this._generation.GenerateEmbeddingAsync(text, cancellationToken); diff --git a/service/Abstractions/SemanticKernel/SemanticKernelTextGenerator.cs b/service/Abstractions/SemanticKernel/SemanticKernelTextGenerator.cs index 2833d2200..7c267a71c 100644 --- a/service/Abstractions/SemanticKernel/SemanticKernelTextGenerator.cs +++ b/service/Abstractions/SemanticKernel/SemanticKernelTextGenerator.cs @@ -7,6 +7,7 @@ using System.Threading.Tasks; using Microsoft.SemanticKernel; using Microsoft.SemanticKernel.TextGeneration; + namespace Microsoft.KernelMemory.AI; internal class SemanticKernelTextGenerator : ITextGenerator @@ -15,8 +16,12 @@ internal class SemanticKernelTextGenerator : ITextGenerator private readonly ITextTokenizer _tokenizer; private readonly SemanticKernelConfig _config; + /// public int MaxTokenTotal { get; } + /// + public int CountTokens(string text) => this._tokenizer.CountTokens(text); + public SemanticKernelTextGenerator(ITextGenerationService service, SemanticKernelConfig config, ITextTokenizer tokenizer) { this._service = service ?? throw new ArgumentNullException(nameof(service)); @@ -47,7 +52,7 @@ private static PromptExecutionSettings ToPromptExecutionSettings(TextGenerationO { var settings = new PromptExecutionSettings { - ExtensionData = new() + ExtensionData = new Dictionary() { [nameof(options.Temperature)] = options.Temperature, [nameof(options.TopP)] = options.TopP, @@ -66,7 +71,4 @@ private static PromptExecutionSettings ToPromptExecutionSettings(TextGenerationO return settings; } - - /// - public int CountTokens(string text) => this._tokenizer.CountTokens(text); } diff --git a/service/Service/Service.csproj b/service/Service/Service.csproj index 1e965c999..f1f6b5667 100644 --- a/service/Service/Service.csproj +++ b/service/Service/Service.csproj @@ -7,6 +7,7 @@ false 5ee045b0-aea3-4f08-8d31-32d1a6f8fed0 $(NoWarn);CA2007,CA1724,CA2254,CA1031,CS1591,CA1861,CA1303,SKEXP0001 + $(DefineConstants);KernelMemoryDev From e54fdead1348028a40ea4efde36f6f7aff3983a2 Mon Sep 17 00:00:00 2001 From: Devis Lucato Date: Mon, 18 Mar 2024 11:33:43 +0100 Subject: [PATCH 12/12] Move code to Service and make tokenizer optional --- ...otnet-SemanticKernel-TextCompletion.csproj | 10 +-- .../Program.cs | 8 +-- .../story.docx | Bin 28247 -> 0 bytes .../SemanticKernelTextEmbeddingGenerator.cs | 39 ------------ service/Core/Core.csproj | 2 +- .../KernelMemoryBuilderExtensions.cs | 43 +++++++------ .../SemanticKernel/SemanticKernelConfig.cs | 5 +- .../SemanticKernelTextEmbeddingGenerator.cs | 57 ++++++++++++++++++ .../SemanticKernelTextGenerator.cs | 33 ++++++++-- 9 files changed, 117 insertions(+), 80 deletions(-) delete mode 100644 examples/107-dotnet-SemanticKernel-TextCompletion/story.docx delete mode 100644 service/Abstractions/SemanticKernel/SemanticKernelTextEmbeddingGenerator.cs rename service/{Abstractions => Core}/SemanticKernel/KernelMemoryBuilderExtensions.cs (50%) rename service/{Abstractions => Core}/SemanticKernel/SemanticKernelConfig.cs (58%) create mode 100644 service/Core/SemanticKernel/SemanticKernelTextEmbeddingGenerator.cs rename service/{Abstractions => Core}/SemanticKernel/SemanticKernelTextGenerator.cs (65%) diff --git a/examples/107-dotnet-SemanticKernel-TextCompletion/107-dotnet-SemanticKernel-TextCompletion.csproj b/examples/107-dotnet-SemanticKernel-TextCompletion/107-dotnet-SemanticKernel-TextCompletion.csproj index 882fd7c5a..cfa574100 100644 --- a/examples/107-dotnet-SemanticKernel-TextCompletion/107-dotnet-SemanticKernel-TextCompletion.csproj +++ b/examples/107-dotnet-SemanticKernel-TextCompletion/107-dotnet-SemanticKernel-TextCompletion.csproj @@ -7,19 +7,11 @@ enable enable 5ee045b0-aea3-4f08-8d31-32d1a6f8fed0 - $(NoWarn);SKEXP0010; - $(DefineConstants);KernelMemoryDev + $(NoWarn);SKEXP0001;SKEXP0010; - - - - Always - - - diff --git a/examples/107-dotnet-SemanticKernel-TextCompletion/Program.cs b/examples/107-dotnet-SemanticKernel-TextCompletion/Program.cs index ec2ff8866..a05c5b7e3 100644 --- a/examples/107-dotnet-SemanticKernel-TextCompletion/Program.cs +++ b/examples/107-dotnet-SemanticKernel-TextCompletion/Program.cs @@ -1,8 +1,8 @@ // Copyright (c) Microsoft. All rights reserved. -#if KernelMemoryDev // This code requires the next release (use KernelMemoryDev.sln) using Microsoft.KernelMemory; using Microsoft.KernelMemory.AI.OpenAI; +using Microsoft.KernelMemory.SemanticKernel; using Microsoft.SemanticKernel.Connectors.OpenAI; var endpoint = Env.Var("AOAI_ENDPOINT"); @@ -20,9 +20,9 @@ new AzureOpenAITextEmbeddingGenerationService(embeddingDeployment, endpoint, apiKey), config, tokenizer) .Build(); -await memory.ImportDocumentAsync("story.docx", documentId: "doc001"); +await memory.ImportWebPageAsync("https://raw.githubusercontent.com/microsoft/kernel-memory/main/COMMUNITY.md", documentId: "doc001"); -var question = "What's radiant mold?"; +var question = "How can I join Kernel Memory's Discord?"; Console.WriteLine($"\n\nQuestion: {question}"); var answer = await memory.AskAsync(question); @@ -33,5 +33,3 @@ { Console.WriteLine($" - {x.SourceName} - {x.Link} [{x.Partitions.First().LastUpdate:D}]"); } - -#endif diff --git a/examples/107-dotnet-SemanticKernel-TextCompletion/story.docx b/examples/107-dotnet-SemanticKernel-TextCompletion/story.docx deleted file mode 100644 index c3dbde1d98bb653cbece13527d2e680c132e9faa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28247 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 diff --git a/service/Abstractions/SemanticKernel/SemanticKernelTextEmbeddingGenerator.cs b/service/Abstractions/SemanticKernel/SemanticKernelTextEmbeddingGenerator.cs deleted file mode 100644 index fc24db856..000000000 --- a/service/Abstractions/SemanticKernel/SemanticKernelTextEmbeddingGenerator.cs +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. - -using System; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.KernelMemory.AI; -using Microsoft.SemanticKernel.AI.Embeddings; -using Microsoft.SemanticKernel.Embeddings; - -namespace Microsoft.KernelMemory; - -internal class SemanticKernelTextEmbeddingGenerator : ITextEmbeddingGenerator -{ - private readonly ITextTokenizer _tokenizer; - private readonly ITextEmbeddingGenerationService _generation; - private readonly SemanticKernelConfig _config; - - /// - public int MaxTokens { get; } - - /// - public int CountTokens(string text) => this._tokenizer.CountTokens(text); - - public SemanticKernelTextEmbeddingGenerator(ITextEmbeddingGenerationService generation, - SemanticKernelConfig config, - ITextTokenizer tokenizer) - { - this._generation = generation ?? throw new ArgumentNullException(nameof(generation)); - this._tokenizer = tokenizer ?? throw new ArgumentNullException(nameof(tokenizer), "Tokenizer not specified. The token count might be incorrect, causing unexpected errors"); - - this._tokenizer = tokenizer; - this._config = config; - this.MaxTokens = config.MaxTokenTotal; - } - - /// - public Task GenerateEmbeddingAsync(string text, CancellationToken cancellationToken = default) - => this._generation.GenerateEmbeddingAsync(text, cancellationToken); -} diff --git a/service/Core/Core.csproj b/service/Core/Core.csproj index cee218b80..8b9259efd 100644 --- a/service/Core/Core.csproj +++ b/service/Core/Core.csproj @@ -5,7 +5,7 @@ LatestMajor Microsoft.KernelMemory.Core Microsoft.KernelMemory - $(NoWarn);SKEXP0011;CA2208;CA1308;CA1724;CS1591; + $(NoWarn);SKEXP0001;SKEXP0011;CA2208;CA1308;CA1724;CS1591; $(DefineConstants);KernelMemoryDev diff --git a/service/Abstractions/SemanticKernel/KernelMemoryBuilderExtensions.cs b/service/Core/SemanticKernel/KernelMemoryBuilderExtensions.cs similarity index 50% rename from service/Abstractions/SemanticKernel/KernelMemoryBuilderExtensions.cs rename to service/Core/SemanticKernel/KernelMemoryBuilderExtensions.cs index 314575818..0695b2df9 100644 --- a/service/Abstractions/SemanticKernel/KernelMemoryBuilderExtensions.cs +++ b/service/Core/SemanticKernel/KernelMemoryBuilderExtensions.cs @@ -1,10 +1,14 @@ // Copyright (c) Microsoft. All rights reserved. +using Microsoft.Extensions.Logging; using Microsoft.KernelMemory.AI; using Microsoft.KernelMemory.Configuration; +using Microsoft.KernelMemory.SemanticKernel; using Microsoft.SemanticKernel.Embeddings; using Microsoft.SemanticKernel.TextGeneration; +#pragma warning disable IDE0130 // reduce number of "using" statements +// ReSharper disable once CheckNamespace - reduce number of "using" statements namespace Microsoft.KernelMemory; /// @@ -20,41 +24,42 @@ public static partial class KernelMemoryBuilderExtensions /// SK text generation service instance /// SK text generator settings /// Tokenizer used to count tokens used by prompts + /// .NET logger factory /// KM builder public static IKernelMemoryBuilder WithSemanticKernelTextGenerationService( this IKernelMemoryBuilder builder, ITextGenerationService service, SemanticKernelConfig config, - ITextTokenizer tokenizer) + ITextTokenizer? tokenizer = null, + ILoggerFactory? loggerFactory = null) { - service = service ?? throw new ConfigurationException("The semantic kernel text generation service instance is NULL"); - tokenizer = tokenizer ?? throw new ConfigurationException("The text tokenizer instance is NULL"); + if (service == null) { throw new ConfigurationException("The semantic kernel text generation service instance is NULL"); } - return builder.AddSingleton(new SemanticKernelTextGenerator(service, config, tokenizer)); + return builder.AddSingleton(new SemanticKernelTextGenerator(service, config, tokenizer, loggerFactory)); } - /// - ///Inject an implementation ofSK text embedding generation service - /// for local dependencies on - /// - /// KM builder - /// SK text embedding generation instance - /// SK text embedding generator settings - /// Tokenizer used to count tokens sent to the embedding generator - /// Whether to use this embedding generator only during data ingestion, and not for retrieval (search and ask API) - /// KM builder + /// + /// Inject an implementation ofSK text embedding generation service + /// for local dependencies on + /// + /// KM builder + /// SK text embedding generation instance + /// SK text embedding generator settings + /// Tokenizer used to count tokens sent to the embedding generator + /// .NET logger factory + /// Whether to use this embedding generator only during data ingestion, and not for retrieval (search and ask API) + /// KM builder public static IKernelMemoryBuilder WithSemanticKernelTextEmbeddingGenerationService( this IKernelMemoryBuilder builder, ITextEmbeddingGenerationService service, SemanticKernelConfig config, - ITextTokenizer tokenizer, + ITextTokenizer? tokenizer = null, + ILoggerFactory? loggerFactory = null, bool onlyForRetrieval = false) { - service = service ?? throw new ConfigurationException("The semantic kernel text embedding generation service instance is NULL"); - tokenizer = tokenizer ?? throw new ConfigurationException("The text tokenizer instance is NULL"); - - var generator = new SemanticKernelTextEmbeddingGenerator(service, config, tokenizer); + if (service == null) { throw new ConfigurationException("The semantic kernel text embedding generation service instance is NULL"); } + var generator = new SemanticKernelTextEmbeddingGenerator(service, config, tokenizer, loggerFactory); builder.AddSingleton(generator); if (!onlyForRetrieval) diff --git a/service/Abstractions/SemanticKernel/SemanticKernelConfig.cs b/service/Core/SemanticKernel/SemanticKernelConfig.cs similarity index 58% rename from service/Abstractions/SemanticKernel/SemanticKernelConfig.cs rename to service/Core/SemanticKernel/SemanticKernelConfig.cs index 8be7c0175..b20d90059 100644 --- a/service/Abstractions/SemanticKernel/SemanticKernelConfig.cs +++ b/service/Core/SemanticKernel/SemanticKernelConfig.cs @@ -1,11 +1,14 @@ // Copyright (c) Microsoft. All rights reserved. -namespace Microsoft.KernelMemory; +namespace Microsoft.KernelMemory.SemanticKernel; /// /// Semantic Kernel TextGenerator And TextEmbeddingGenerator Config /// public class SemanticKernelConfig { + /// + /// Max size of the LLM attention window, ie max tokens that can be processed. + /// public int MaxTokenTotal { get; set; } = 8191; } diff --git a/service/Core/SemanticKernel/SemanticKernelTextEmbeddingGenerator.cs b/service/Core/SemanticKernel/SemanticKernelTextEmbeddingGenerator.cs new file mode 100644 index 000000000..561181017 --- /dev/null +++ b/service/Core/SemanticKernel/SemanticKernelTextEmbeddingGenerator.cs @@ -0,0 +1,57 @@ +// Copyright (c) Microsoft. All rights reserved. + +using System; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Microsoft.KernelMemory.AI; +using Microsoft.KernelMemory.AI.OpenAI; +using Microsoft.KernelMemory.Diagnostics; +using Microsoft.SemanticKernel.AI.Embeddings; +using Microsoft.SemanticKernel.Embeddings; + +namespace Microsoft.KernelMemory.SemanticKernel; + +internal class SemanticKernelTextEmbeddingGenerator : ITextEmbeddingGenerator +{ + private readonly ITextEmbeddingGenerationService _service; + private readonly ITextTokenizer _tokenizer; + private readonly ILogger _log; + + /// + public int MaxTokens { get; } + + /// + public int CountTokens(string text) => this._tokenizer.CountTokens(text); + + public SemanticKernelTextEmbeddingGenerator( + ITextEmbeddingGenerationService textEmbeddingGenerationService, + SemanticKernelConfig config, + ITextTokenizer? textTokenizer = null, + ILoggerFactory? loggerFactory = null) + { + this._service = textEmbeddingGenerationService ?? throw new ArgumentNullException(nameof(textEmbeddingGenerationService)); + this.MaxTokens = config.MaxTokenTotal; + + var log = loggerFactory?.CreateLogger(); + this._log = log ?? DefaultLogger.Instance; + + if (textTokenizer == null) + { + this._log.LogWarning( + "Tokenizer not specified, will use {0}. The token count might be incorrect, causing unexpected errors", + nameof(DefaultGPTTokenizer)); + textTokenizer = new DefaultGPTTokenizer(); + } + + this._tokenizer = textTokenizer; + } + + /// + public Task GenerateEmbeddingAsync(string text, CancellationToken cancellationToken = default) + { + this._log.LogTrace("Generating embedding with SK embedding generator service"); + + return this._service.GenerateEmbeddingAsync(text, cancellationToken); + } +} diff --git a/service/Abstractions/SemanticKernel/SemanticKernelTextGenerator.cs b/service/Core/SemanticKernel/SemanticKernelTextGenerator.cs similarity index 65% rename from service/Abstractions/SemanticKernel/SemanticKernelTextGenerator.cs rename to service/Core/SemanticKernel/SemanticKernelTextGenerator.cs index 7c267a71c..1699705b4 100644 --- a/service/Abstractions/SemanticKernel/SemanticKernelTextGenerator.cs +++ b/service/Core/SemanticKernel/SemanticKernelTextGenerator.cs @@ -5,16 +5,20 @@ using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Microsoft.KernelMemory.AI; +using Microsoft.KernelMemory.AI.OpenAI; +using Microsoft.KernelMemory.Diagnostics; using Microsoft.SemanticKernel; using Microsoft.SemanticKernel.TextGeneration; -namespace Microsoft.KernelMemory.AI; +namespace Microsoft.KernelMemory.SemanticKernel; internal class SemanticKernelTextGenerator : ITextGenerator { private readonly ITextGenerationService _service; private readonly ITextTokenizer _tokenizer; - private readonly SemanticKernelConfig _config; + private readonly ILogger _log; /// public int MaxTokenTotal { get; } @@ -22,12 +26,27 @@ internal class SemanticKernelTextGenerator : ITextGenerator /// public int CountTokens(string text) => this._tokenizer.CountTokens(text); - public SemanticKernelTextGenerator(ITextGenerationService service, SemanticKernelConfig config, ITextTokenizer tokenizer) + public SemanticKernelTextGenerator( + ITextGenerationService textGenerationService, + SemanticKernelConfig config, + ITextTokenizer? textTokenizer = null, + ILoggerFactory? loggerFactory = null) { - this._service = service ?? throw new ArgumentNullException(nameof(service)); - this._tokenizer = tokenizer ?? throw new ArgumentNullException(nameof(tokenizer), "Tokenizer not specified. The token count might be incorrect, causing unexpected errors"); - this._config = config; + this._service = textGenerationService ?? throw new ArgumentNullException(nameof(textGenerationService)); this.MaxTokenTotal = config.MaxTokenTotal; + + var log = loggerFactory?.CreateLogger(); + this._log = log ?? DefaultLogger.Instance; + + if (textTokenizer == null) + { + this._log.LogWarning( + "Tokenizer not specified, will use {0}. The token count might be incorrect, causing unexpected errors", + nameof(DefaultGPTTokenizer)); + textTokenizer = new DefaultGPTTokenizer(); + } + + this._tokenizer = textTokenizer; } /// @@ -36,6 +55,8 @@ public async IAsyncEnumerable GenerateTextAsync( TextGenerationOptions options, [EnumeratorCancellation] CancellationToken cancellationToken = default) { + this._log.LogTrace("Generating text with SK text generator service"); + var contents = this._service.GetStreamingTextContentsAsync( prompt, ToPromptExecutionSettings(options), null, cancellationToken).ConfigureAwait(false);