From 31c5fcf4dc06f38c56d7e75de413d5f33d8e0a92 Mon Sep 17 00:00:00 2001 From: Gregor Biswanger Date: Sun, 17 Nov 2024 17:07:57 +0100 Subject: [PATCH] Refactor and update SemanticKernelMapperExtensions.cs Refactored `ToChatResponseInternal` to extract "CreatedAt" logic into `GetCreatedAt` method. Updated `ToCompletionResponse` to handle null values in `Metadata` safely and modified `Usage` property initialization. Upgraded `Microsoft.SemanticKernel` and `Microsoft.SemanticKernel.Connectors.OpenAI` packages in `OllamaApiFacade.csproj` from version 1.22.0 to 1.29.0. --- .../SemanticKernelMapperExtensions.cs | 23 +++++++++++++------ OllamaApiFacade/OllamaApiFacade.csproj | 4 ++-- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/OllamaApiFacade/Extensions/SemanticKernelMapperExtensions.cs b/OllamaApiFacade/Extensions/SemanticKernelMapperExtensions.cs index 4853888..5ad4eb4 100644 --- a/OllamaApiFacade/Extensions/SemanticKernelMapperExtensions.cs +++ b/OllamaApiFacade/Extensions/SemanticKernelMapperExtensions.cs @@ -77,8 +77,7 @@ public static ChatResponse ToChatResponse(this ChatMessageContent? message) private static ChatResponse ToChatResponseInternal(string? modelId, AuthorRole? role, string? content, IReadOnlyDictionary? metadata) { - var createdAtDateTimeOffset = (DateTimeOffset)metadata!["CreatedAt"]!; - var createdAt = createdAtDateTimeOffset.ToUniversalTime().ToString("o"); + var createdAt = GetCreatedAt(metadata); return new ChatResponse( modelId, @@ -88,6 +87,16 @@ private static ChatResponse ToChatResponseInternal(string? modelId, AuthorRole? ); } + private static string GetCreatedAt(IReadOnlyDictionary? metadata) + { + if (metadata != null && metadata.TryGetValue("CreatedAt", out var createdAtValue) && createdAtValue is DateTimeOffset createdAtDateTimeOffset) + { + return createdAtDateTimeOffset.ToUniversalTime().ToString("o"); + } + + return DateTimeOffset.MinValue.ToUniversalTime().ToString("o"); + } + /// /// Converts a object into a object. /// @@ -95,8 +104,8 @@ private static ChatResponse ToChatResponseInternal(string? modelId, AuthorRole? /// A object containing the converted message content. public static CompletionResponse ToCompletionResponse(this ChatMessageContent chatMessageContent) { - var chatTokenUsage = chatMessageContent.Metadata!["Usage"] as ChatTokenUsage; - var systemFingerprint = chatMessageContent.Metadata["SystemFingerprint"] == null; + var chatTokenUsage = chatMessageContent.Metadata?["Usage"] as ChatTokenUsage; + var systemFingerprint = chatMessageContent.Metadata?["SystemFingerprint"] == null; return new CompletionResponse( Id: "chatcmpl-427", @@ -116,12 +125,12 @@ public static CompletionResponse ToCompletionResponse(this ChatMessageContent ch FinishReason: "stop" ) ], - Usage: new Usage + Usage: chatTokenUsage != null ? new Usage { - PromptTokens = chatTokenUsage!.InputTokenCount, + PromptTokens = chatTokenUsage.InputTokenCount, CompletionTokens = chatTokenUsage.OutputTokenCount, TotalTokens = chatTokenUsage.TotalTokenCount - } + } : new Usage() ); } } \ No newline at end of file diff --git a/OllamaApiFacade/OllamaApiFacade.csproj b/OllamaApiFacade/OllamaApiFacade.csproj index 5fcac2e..0f0421b 100644 --- a/OllamaApiFacade/OllamaApiFacade.csproj +++ b/OllamaApiFacade/OllamaApiFacade.csproj @@ -30,8 +30,8 @@ - - + +