using Microsoft.SemanticKernel.AI.ChatCompletion; using Microsoft.SemanticKernel.AI.TextCompletion; namespace LLamaSharp.SemanticKernel; internal static class ExtensionMethods { internal static global::LLama.Common.ChatHistory ToLLamaSharpChatHistory(this ChatHistory chatHistory) { if (chatHistory is null) { throw new ArgumentNullException(nameof(chatHistory)); } var history = new global::LLama.Common.ChatHistory(); foreach (var chat in chatHistory) { var role = Enum.TryParse(chat.Role.Label, out var _role) ? _role : global::LLama.Common.AuthorRole.Unknown; history.AddMessage(role, chat.Content); } return history; } /// /// Convert ChatRequestSettings to LLamaSharp InferenceParams /// /// /// internal static global::LLama.Common.InferenceParams ToLLamaSharpInferenceParams(this ChatRequestSettings requestSettings) { if (requestSettings is null) { throw new ArgumentNullException(nameof(requestSettings)); } var antiPrompts = new List(requestSettings.StopSequences) { AuthorRole.User.ToString() + ":" }; return new global::LLama.Common.InferenceParams { Temperature = (float)requestSettings.Temperature, TopP = (float)requestSettings.TopP, PresencePenalty = (float)requestSettings.PresencePenalty, FrequencyPenalty = (float)requestSettings.FrequencyPenalty, AntiPrompts = antiPrompts, MaxTokens = requestSettings.MaxTokens ?? -1 }; } /// /// Convert CompleteRequestSettings to LLamaSharp InferenceParams /// /// /// internal static global::LLama.Common.InferenceParams ToLLamaSharpInferenceParams(this CompleteRequestSettings requestSettings) { if (requestSettings is null) { throw new ArgumentNullException(nameof(requestSettings)); } return new global::LLama.Common.InferenceParams { Temperature = (float)requestSettings.Temperature, TopP = (float)requestSettings.TopP, PresencePenalty = (float)requestSettings.PresencePenalty, FrequencyPenalty = (float)requestSettings.FrequencyPenalty, AntiPrompts = requestSettings.StopSequences, MaxTokens = requestSettings.MaxTokens ?? -1 }; } }