From 2d3bc2458903726963aa9f1e914eb699f7f43279 Mon Sep 17 00:00:00 2001 From: Jamy Van den Borre Date: Tue, 25 Mar 2025 19:19:10 +0100 Subject: [PATCH 1/9] Add configprovider to openai text generation and model config --- .../Faithfulness/FaithfulnessEvaluator.cs | 1 - .../Chunkers/Chunkers/PlainTextChunker.cs | 2 +- .../OpenAI/OpenAI/DependencyInjection.cs | 3 ++ .../OpenAI/OpenAI/OpenAITextGenerator.cs | 31 ++++++++++--------- .../Abstractions/AI/TextGenerationOptions.cs | 2 ++ .../Abstractions/Search/SearchClientConfig.cs | 7 +++++ service/Core/Search/AnswerGenerator.cs | 2 ++ 7 files changed, 32 insertions(+), 16 deletions(-) diff --git a/applications/evaluation/Evaluators/Faithfulness/FaithfulnessEvaluator.cs b/applications/evaluation/Evaluators/Faithfulness/FaithfulnessEvaluator.cs index 4a7c83a39..b84b5a2c6 100644 --- a/applications/evaluation/Evaluators/Faithfulness/FaithfulnessEvaluator.cs +++ b/applications/evaluation/Evaluators/Faithfulness/FaithfulnessEvaluator.cs @@ -1,6 +1,5 @@ // Copyright (c) Microsoft. All rights reserved. -using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; diff --git a/extensions/Chunkers/Chunkers/PlainTextChunker.cs b/extensions/Chunkers/Chunkers/PlainTextChunker.cs index 6d0bf9709..1d0e6c79a 100644 --- a/extensions/Chunkers/Chunkers/PlainTextChunker.cs +++ b/extensions/Chunkers/Chunkers/PlainTextChunker.cs @@ -62,7 +62,7 @@ internal enum SeparatorTypes ".", "?", "!", "⁉", "⁈", "⁇", "…", // Chinese punctuation "。", "?", "!", ";", ":" -]); + ]); // Prioritized list of characters to split inside a sentence. private static readonly SeparatorTrie s_potentialSeparators = new([ diff --git a/extensions/OpenAI/OpenAI/DependencyInjection.cs b/extensions/OpenAI/OpenAI/DependencyInjection.cs index 11ee2a92e..1dc6277f5 100644 --- a/extensions/OpenAI/OpenAI/DependencyInjection.cs +++ b/extensions/OpenAI/OpenAI/DependencyInjection.cs @@ -5,6 +5,7 @@ using Microsoft.Extensions.Logging; using Microsoft.KernelMemory.AI; using Microsoft.KernelMemory.AI.OpenAI; +using Microsoft.KernelMemory.Context; using OpenAI; #pragma warning disable IDE0130 // reduce number of "using" statements @@ -260,6 +261,7 @@ public static IServiceCollection AddOpenAITextGeneration( return services .AddSingleton(serviceProvider => new OpenAITextGenerator( config: config, + contextProvider: serviceProvider.GetService(), textTokenizer: textTokenizer, loggerFactory: serviceProvider.GetService(), httpClient)); @@ -276,6 +278,7 @@ public static IServiceCollection AddOpenAITextGeneration( .AddSingleton(serviceProvider => new OpenAITextGenerator( config: config, openAIClient: openAIClient, + contextProvider: serviceProvider.GetService(), textTokenizer: textTokenizer, loggerFactory: serviceProvider.GetService())); } diff --git a/extensions/OpenAI/OpenAI/OpenAITextGenerator.cs b/extensions/OpenAI/OpenAI/OpenAITextGenerator.cs index f36812dde..be61896c9 100644 --- a/extensions/OpenAI/OpenAI/OpenAITextGenerator.cs +++ b/extensions/OpenAI/OpenAI/OpenAITextGenerator.cs @@ -9,6 +9,7 @@ using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Microsoft.KernelMemory.AI.OpenAI.Internals; +using Microsoft.KernelMemory.Context; using Microsoft.KernelMemory.Diagnostics; using Microsoft.SemanticKernel; using Microsoft.SemanticKernel.Connectors.OpenAI; @@ -30,8 +31,9 @@ public sealed class OpenAITextGenerator : ITextGenerator private readonly OpenAIChatCompletionService _client; private readonly ITextTokenizer _textTokenizer; private readonly ILogger _log; + private readonly IContextProvider? _contextProvider; - private readonly string _textModel; + private readonly string _modelName; /// public int MaxTokenTotal { get; } @@ -40,18 +42,17 @@ public sealed class OpenAITextGenerator : ITextGenerator /// Create a new instance. /// /// Client and model configuration + /// Request context provider with runtime configuration overrides /// Text tokenizer, possibly matching the model used /// App logger factory /// Optional HTTP client with custom settings public OpenAITextGenerator( - OpenAIConfig config, - ITextTokenizer? textTokenizer = null, + OpenAIConfig config, IContextProvider? contextProvider = null, ITextTokenizer? textTokenizer = null, ILoggerFactory? loggerFactory = null, HttpClient? httpClient = null) : this( config, - OpenAIClientBuilder.Build(config, httpClient, loggerFactory), - textTokenizer, + OpenAIClientBuilder.Build(config, httpClient, loggerFactory), contextProvider, textTokenizer, loggerFactory) { } @@ -61,17 +62,16 @@ public OpenAITextGenerator( /// /// Model configuration /// Custom OpenAI client, already configured + /// Request context provider with runtime configuration overrides /// Text tokenizer, possibly matching the model used /// App logger factory public OpenAITextGenerator( OpenAIConfig config, - OpenAIClient openAIClient, - ITextTokenizer? textTokenizer = null, + OpenAIClient openAIClient, IContextProvider? contextProvider = null, ITextTokenizer? textTokenizer = null, ILoggerFactory? loggerFactory = null) : this( config, - SkClientBuilder.BuildChatClient(config.TextModel, openAIClient, loggerFactory), - textTokenizer, + SkClientBuilder.BuildChatClient(config.TextModel, openAIClient, loggerFactory), contextProvider, textTokenizer, loggerFactory) { } @@ -81,17 +81,18 @@ public OpenAITextGenerator( /// /// Model configuration /// Custom Semantic Kernel client, already configured + /// Request context provider with runtime configuration overrides /// Text tokenizer, possibly matching the model used /// App logger factory public OpenAITextGenerator( OpenAIConfig config, - OpenAIChatCompletionService skClient, - ITextTokenizer? textTokenizer = null, + OpenAIChatCompletionService skClient, IContextProvider? contextProvider = null, ITextTokenizer? textTokenizer = null, ILoggerFactory? loggerFactory = null) { this._client = skClient; + this._contextProvider = contextProvider; this._log = (loggerFactory ?? DefaultLogger.Factory).CreateLogger(); - this._textModel = config.TextModel; + this._modelName = config.TextModel; this.MaxTokenTotal = config.TextModelMaxTokenTotal; if (textTokenizer == null && !string.IsNullOrEmpty(config.TextModelTokenizer)) @@ -129,13 +130,15 @@ public async IAsyncEnumerable GenerateTextAsync( TextGenerationOptions options, [EnumeratorCancellation] CancellationToken cancellationToken = default) { + var modelName = this._contextProvider.GetContext().GetCustomTextGenerationModelNameOrDefault(this._modelName); var skOptions = new OpenAIPromptExecutionSettings { MaxTokens = options.MaxTokens, Temperature = options.Temperature, FrequencyPenalty = options.FrequencyPenalty, PresencePenalty = options.PresencePenalty, - TopP = options.NucleusSampling + TopP = options.NucleusSampling, + ModelId = modelName }; if (options.StopSequences is { Count: > 0 }) @@ -178,7 +181,7 @@ public async IAsyncEnumerable GenerateTextAsync( Timestamp = (DateTimeOffset?)x.Metadata["CreatedAt"] ?? DateTimeOffset.UtcNow, ServiceType = "OpenAI", ModelType = Constants.ModelType.TextGeneration, - ModelName = this._textModel, + ModelName = modelName, ServiceTokensIn = usage!.InputTokenCount, ServiceTokensOut = usage.OutputTokenCount, ServiceReasoningTokens = usage.OutputTokenDetails?.ReasoningTokenCount diff --git a/service/Abstractions/AI/TextGenerationOptions.cs b/service/Abstractions/AI/TextGenerationOptions.cs index 3e7db7347..5445297e1 100644 --- a/service/Abstractions/AI/TextGenerationOptions.cs +++ b/service/Abstractions/AI/TextGenerationOptions.cs @@ -58,4 +58,6 @@ public class TextGenerationOptions /// Modify the likelihood of specified tokens appearing in the completion. /// public Dictionary TokenSelectionBiases { get; set; } = []; + + public string ModelName { get; set; } = string.Empty; } diff --git a/service/Abstractions/Search/SearchClientConfig.cs b/service/Abstractions/Search/SearchClientConfig.cs index 8c7b40e93..593bbe68b 100644 --- a/service/Abstractions/Search/SearchClientConfig.cs +++ b/service/Abstractions/Search/SearchClientConfig.cs @@ -116,6 +116,8 @@ public class SearchClientConfig /// public string ModeratedAnswer { get; set; } = "Sorry, the generated content contains unsafe or inappropriate information."; + public string ModelName { get; set; } = string.Empty; + /// /// Verify that the current state is valid. /// @@ -160,5 +162,10 @@ public void Validate() { throw new ConfigurationException($"SearchClient: {nameof(this.FrequencyPenalty)} must be between -2 and 2"); } + + if (string.IsNullOrWhiteSpace(this.ModelName)) + { + throw new ConfigurationException($"SearchClient: {nameof(this.ModelName)} cannot be empty"); + } } } diff --git a/service/Core/Search/AnswerGenerator.cs b/service/Core/Search/AnswerGenerator.cs index b8dcaac79..d1f9fdc57 100644 --- a/service/Core/Search/AnswerGenerator.cs +++ b/service/Core/Search/AnswerGenerator.cs @@ -139,6 +139,7 @@ private IAsyncEnumerable GenerateAnswerTokensAsync(string int maxTokens = context.GetCustomRagMaxTokensOrDefault(this._config.AnswerTokens); double temperature = context.GetCustomRagTemperatureOrDefault(this._config.Temperature); double nucleusSampling = context.GetCustomRagNucleusSamplingOrDefault(this._config.TopP); + var modelName = context.GetCustomTextGenerationModelNameOrDefault(this._config.ModelName); var options = new TextGenerationOptions { @@ -149,6 +150,7 @@ private IAsyncEnumerable GenerateAnswerTokensAsync(string FrequencyPenalty = this._config.FrequencyPenalty, StopSequences = this._config.StopSequences, TokenSelectionBiases = this._config.TokenSelectionBiases, + ModelName = modelName, }; if (this._log.IsEnabled(LogLevel.Debug)) From 4ab9a697249f8449e6fd45d782ad0df869c1d3d9 Mon Sep 17 00:00:00 2001 From: Jamy Van den Borre Date: Tue, 25 Mar 2025 19:27:36 +0100 Subject: [PATCH 2/9] Revert unneeded changes --- service/Abstractions/AI/TextGenerationOptions.cs | 2 -- service/Abstractions/Search/SearchClientConfig.cs | 7 ------- service/Core/Search/AnswerGenerator.cs | 4 +--- 3 files changed, 1 insertion(+), 12 deletions(-) diff --git a/service/Abstractions/AI/TextGenerationOptions.cs b/service/Abstractions/AI/TextGenerationOptions.cs index 5445297e1..3e7db7347 100644 --- a/service/Abstractions/AI/TextGenerationOptions.cs +++ b/service/Abstractions/AI/TextGenerationOptions.cs @@ -58,6 +58,4 @@ public class TextGenerationOptions /// Modify the likelihood of specified tokens appearing in the completion. /// public Dictionary TokenSelectionBiases { get; set; } = []; - - public string ModelName { get; set; } = string.Empty; } diff --git a/service/Abstractions/Search/SearchClientConfig.cs b/service/Abstractions/Search/SearchClientConfig.cs index 593bbe68b..8c7b40e93 100644 --- a/service/Abstractions/Search/SearchClientConfig.cs +++ b/service/Abstractions/Search/SearchClientConfig.cs @@ -116,8 +116,6 @@ public class SearchClientConfig /// public string ModeratedAnswer { get; set; } = "Sorry, the generated content contains unsafe or inappropriate information."; - public string ModelName { get; set; } = string.Empty; - /// /// Verify that the current state is valid. /// @@ -162,10 +160,5 @@ public void Validate() { throw new ConfigurationException($"SearchClient: {nameof(this.FrequencyPenalty)} must be between -2 and 2"); } - - if (string.IsNullOrWhiteSpace(this.ModelName)) - { - throw new ConfigurationException($"SearchClient: {nameof(this.ModelName)} cannot be empty"); - } } } diff --git a/service/Core/Search/AnswerGenerator.cs b/service/Core/Search/AnswerGenerator.cs index d1f9fdc57..2c7477ee2 100644 --- a/service/Core/Search/AnswerGenerator.cs +++ b/service/Core/Search/AnswerGenerator.cs @@ -139,7 +139,6 @@ private IAsyncEnumerable GenerateAnswerTokensAsync(string int maxTokens = context.GetCustomRagMaxTokensOrDefault(this._config.AnswerTokens); double temperature = context.GetCustomRagTemperatureOrDefault(this._config.Temperature); double nucleusSampling = context.GetCustomRagNucleusSamplingOrDefault(this._config.TopP); - var modelName = context.GetCustomTextGenerationModelNameOrDefault(this._config.ModelName); var options = new TextGenerationOptions { @@ -149,8 +148,7 @@ private IAsyncEnumerable GenerateAnswerTokensAsync(string PresencePenalty = this._config.PresencePenalty, FrequencyPenalty = this._config.FrequencyPenalty, StopSequences = this._config.StopSequences, - TokenSelectionBiases = this._config.TokenSelectionBiases, - ModelName = modelName, + TokenSelectionBiases = this._config.TokenSelectionBiases }; if (this._log.IsEnabled(LogLevel.Debug)) From 0d3227d6d5d601efc25fbe02809ea84b6cd42f75 Mon Sep 17 00:00:00 2001 From: Jamy Van den Borre Date: Tue, 25 Mar 2025 19:32:42 +0100 Subject: [PATCH 3/9] Fix build error --- extensions/OpenAI/OpenAI/OpenAITextGenerator.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/extensions/OpenAI/OpenAI/OpenAITextGenerator.cs b/extensions/OpenAI/OpenAI/OpenAITextGenerator.cs index be61896c9..a714e4028 100644 --- a/extensions/OpenAI/OpenAI/OpenAITextGenerator.cs +++ b/extensions/OpenAI/OpenAI/OpenAITextGenerator.cs @@ -31,7 +31,7 @@ public sealed class OpenAITextGenerator : ITextGenerator private readonly OpenAIChatCompletionService _client; private readonly ITextTokenizer _textTokenizer; private readonly ILogger _log; - private readonly IContextProvider? _contextProvider; + private readonly IContextProvider _contextProvider; private readonly string _modelName; @@ -92,6 +92,7 @@ public OpenAITextGenerator( this._client = skClient; this._contextProvider = contextProvider; this._log = (loggerFactory ?? DefaultLogger.Factory).CreateLogger(); + this._contextProvider = contextProvider ?? new RequestContextProvider(); this._modelName = config.TextModel; this.MaxTokenTotal = config.TextModelMaxTokenTotal; From 56646358b57e6898a1f034a65f79fec4cdb0e6d5 Mon Sep 17 00:00:00 2001 From: Jamy Van den Borre Date: Tue, 25 Mar 2025 19:36:01 +0100 Subject: [PATCH 4/9] null reference --- extensions/OpenAI/OpenAI/OpenAITextGenerator.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/extensions/OpenAI/OpenAI/OpenAITextGenerator.cs b/extensions/OpenAI/OpenAI/OpenAITextGenerator.cs index a714e4028..d21aed75a 100644 --- a/extensions/OpenAI/OpenAI/OpenAITextGenerator.cs +++ b/extensions/OpenAI/OpenAI/OpenAITextGenerator.cs @@ -90,9 +90,8 @@ public OpenAITextGenerator( ILoggerFactory? loggerFactory = null) { this._client = skClient; - this._contextProvider = contextProvider; - this._log = (loggerFactory ?? DefaultLogger.Factory).CreateLogger(); this._contextProvider = contextProvider ?? new RequestContextProvider(); + this._log = (loggerFactory ?? DefaultLogger.Factory).CreateLogger(); this._modelName = config.TextModel; this.MaxTokenTotal = config.TextModelMaxTokenTotal; From d095ee94feb9e8be456b7e960a82a25a55b97726 Mon Sep 17 00:00:00 2001 From: Devis Lucato Date: Thu, 8 May 2025 13:43:29 -0700 Subject: [PATCH 5/9] Update service/Core/Search/AnswerGenerator.cs --- service/Core/Search/AnswerGenerator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/Core/Search/AnswerGenerator.cs b/service/Core/Search/AnswerGenerator.cs index 2c7477ee2..b8dcaac79 100644 --- a/service/Core/Search/AnswerGenerator.cs +++ b/service/Core/Search/AnswerGenerator.cs @@ -148,7 +148,7 @@ private IAsyncEnumerable GenerateAnswerTokensAsync(string PresencePenalty = this._config.PresencePenalty, FrequencyPenalty = this._config.FrequencyPenalty, StopSequences = this._config.StopSequences, - TokenSelectionBiases = this._config.TokenSelectionBiases + TokenSelectionBiases = this._config.TokenSelectionBiases, }; if (this._log.IsEnabled(LogLevel.Debug)) From b456780a2771e912fcced66c785168054ea10d08 Mon Sep 17 00:00:00 2001 From: Devis Lucato Date: Thu, 8 May 2025 13:44:22 -0700 Subject: [PATCH 6/9] Update applications/evaluation/Evaluators/Faithfulness/FaithfulnessEvaluator.cs --- .../evaluation/Evaluators/Faithfulness/FaithfulnessEvaluator.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/evaluation/Evaluators/Faithfulness/FaithfulnessEvaluator.cs b/applications/evaluation/Evaluators/Faithfulness/FaithfulnessEvaluator.cs index b84b5a2c6..4a7c83a39 100644 --- a/applications/evaluation/Evaluators/Faithfulness/FaithfulnessEvaluator.cs +++ b/applications/evaluation/Evaluators/Faithfulness/FaithfulnessEvaluator.cs @@ -1,5 +1,6 @@ // Copyright (c) Microsoft. All rights reserved. +using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; From acad90e8e5579a2fd6beb32684bef0fdc1508c19 Mon Sep 17 00:00:00 2001 From: Devis Lucato Date: Thu, 8 May 2025 14:33:16 -0700 Subject: [PATCH 7/9] Cleaning up --- .../OpenAI/OpenAI/DependencyInjection.cs | 24 ++++++++--------- .../OpenAI/OpenAI/OpenAITextGenerator.cs | 26 +++++++++++++------ service/Abstractions/Context/IContext.cs | 2 +- 3 files changed, 30 insertions(+), 22 deletions(-) diff --git a/extensions/OpenAI/OpenAI/DependencyInjection.cs b/extensions/OpenAI/OpenAI/DependencyInjection.cs index 1dc6277f5..79e9f37ea 100644 --- a/extensions/OpenAI/OpenAI/DependencyInjection.cs +++ b/extensions/OpenAI/OpenAI/DependencyInjection.cs @@ -227,12 +227,11 @@ public static IServiceCollection AddOpenAITextEmbeddingGeneration( { config.Validate(); return services - .AddSingleton( - serviceProvider => new OpenAITextEmbeddingGenerator( - config: config, - textTokenizer: textTokenizer, - loggerFactory: serviceProvider.GetService(), - httpClient)); + .AddSingleton(serviceProvider => new OpenAITextEmbeddingGenerator( + config: config, + textTokenizer: textTokenizer, + loggerFactory: serviceProvider.GetService(), + httpClient)); } public static IServiceCollection AddOpenAITextEmbeddingGeneration( @@ -243,12 +242,11 @@ public static IServiceCollection AddOpenAITextEmbeddingGeneration( { config.Validate(); return services - .AddSingleton( - serviceProvider => new OpenAITextEmbeddingGenerator( - config: config, - openAIClient: openAIClient, - textTokenizer: textTokenizer, - loggerFactory: serviceProvider.GetService())); + .AddSingleton(serviceProvider => new OpenAITextEmbeddingGenerator( + config: config, + openAIClient: openAIClient, + textTokenizer: textTokenizer, + loggerFactory: serviceProvider.GetService())); } public static IServiceCollection AddOpenAITextGeneration( @@ -261,8 +259,8 @@ public static IServiceCollection AddOpenAITextGeneration( return services .AddSingleton(serviceProvider => new OpenAITextGenerator( config: config, - contextProvider: serviceProvider.GetService(), textTokenizer: textTokenizer, + contextProvider: serviceProvider.GetService(), loggerFactory: serviceProvider.GetService(), httpClient)); } diff --git a/extensions/OpenAI/OpenAI/OpenAITextGenerator.cs b/extensions/OpenAI/OpenAI/OpenAITextGenerator.cs index d21aed75a..41ecddc92 100644 --- a/extensions/OpenAI/OpenAI/OpenAITextGenerator.cs +++ b/extensions/OpenAI/OpenAI/OpenAITextGenerator.cs @@ -42,17 +42,21 @@ public sealed class OpenAITextGenerator : ITextGenerator /// Create a new instance. /// /// Client and model configuration - /// Request context provider with runtime configuration overrides /// Text tokenizer, possibly matching the model used + /// Request context provider with runtime configuration overrides /// App logger factory /// Optional HTTP client with custom settings public OpenAITextGenerator( - OpenAIConfig config, IContextProvider? contextProvider = null, ITextTokenizer? textTokenizer = null, + OpenAIConfig config, + ITextTokenizer? textTokenizer = null, + IContextProvider? contextProvider = null, ILoggerFactory? loggerFactory = null, HttpClient? httpClient = null) : this( config, - OpenAIClientBuilder.Build(config, httpClient, loggerFactory), contextProvider, textTokenizer, + OpenAIClientBuilder.Build(config, httpClient, loggerFactory), + textTokenizer, + contextProvider, loggerFactory) { } @@ -62,16 +66,20 @@ public OpenAITextGenerator( /// /// Model configuration /// Custom OpenAI client, already configured - /// Request context provider with runtime configuration overrides /// Text tokenizer, possibly matching the model used + /// Request context provider with runtime configuration overrides /// App logger factory public OpenAITextGenerator( OpenAIConfig config, - OpenAIClient openAIClient, IContextProvider? contextProvider = null, ITextTokenizer? textTokenizer = null, + OpenAIClient openAIClient, + ITextTokenizer? textTokenizer = null, + IContextProvider? contextProvider = null, ILoggerFactory? loggerFactory = null) : this( config, - SkClientBuilder.BuildChatClient(config.TextModel, openAIClient, loggerFactory), contextProvider, textTokenizer, + SkClientBuilder.BuildChatClient(config.TextModel, openAIClient, loggerFactory), + textTokenizer, + contextProvider, loggerFactory) { } @@ -86,7 +94,9 @@ public OpenAITextGenerator( /// App logger factory public OpenAITextGenerator( OpenAIConfig config, - OpenAIChatCompletionService skClient, IContextProvider? contextProvider = null, ITextTokenizer? textTokenizer = null, + OpenAIChatCompletionService skClient, + ITextTokenizer? textTokenizer = null, + IContextProvider? contextProvider = null, ILoggerFactory? loggerFactory = null) { this._client = skClient; @@ -133,12 +143,12 @@ public async IAsyncEnumerable GenerateTextAsync( var modelName = this._contextProvider.GetContext().GetCustomTextGenerationModelNameOrDefault(this._modelName); var skOptions = new OpenAIPromptExecutionSettings { + ModelId = modelName, MaxTokens = options.MaxTokens, Temperature = options.Temperature, FrequencyPenalty = options.FrequencyPenalty, PresencePenalty = options.PresencePenalty, TopP = options.NucleusSampling, - ModelId = modelName }; if (options.StopSequences is { Count: > 0 }) diff --git a/service/Abstractions/Context/IContext.cs b/service/Abstractions/Context/IContext.cs index 8deea5766..2d84a90ca 100644 --- a/service/Abstractions/Context/IContext.cs +++ b/service/Abstractions/Context/IContext.cs @@ -244,10 +244,10 @@ public static int GetCustomEmbeddingGenerationBatchSizeOrDefault(this IContext? /// Extensions supported: /// - Ollama /// - Anthropic + /// - OpenAI /// Extensions not supported: /// - Azure OpenAI /// - ONNX - /// - OpenAI /// public static string GetCustomTextGenerationModelNameOrDefault(this IContext? context, string defaultValue) { From 94a9e0a7ac90216c63a6e26166acb2addd259280 Mon Sep 17 00:00:00 2001 From: Jamy Van den Borre Date: Thu, 14 Aug 2025 13:16:19 +0200 Subject: [PATCH 8/9] Update SK --- Directory.Packages.props | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index dea329a59..e9d90cdd5 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -14,7 +14,6 @@ - @@ -60,10 +59,10 @@ - - - - + + + + From a0ddc0bfe5428537c90df06dc0c87b78bda3044e Mon Sep 17 00:00:00 2001 From: Jamy Van den Borre Date: Thu, 14 Aug 2025 13:23:15 +0200 Subject: [PATCH 9/9] Restore package --- Directory.Packages.props | 1 + 1 file changed, 1 insertion(+) diff --git a/Directory.Packages.props b/Directory.Packages.props index e9d90cdd5..0f30fc7fa 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -14,6 +14,7 @@ +