From 47e4fcef2a75fc271a3a3b973a4c3e8de1e27eb3 Mon Sep 17 00:00:00 2001 From: Martin Evans Date: Wed, 20 Dec 2023 16:05:54 +0000 Subject: [PATCH] Fixed GetString on netstandard2 --- LLama/Extensions/EncodingExtensions.cs | 13 ++++++++++++- LLama/Native/SafeLlamaModelHandle.cs | 6 ++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/LLama/Extensions/EncodingExtensions.cs b/LLama/Extensions/EncodingExtensions.cs index 3f2bd776..7df4fdc6 100644 --- a/LLama/Extensions/EncodingExtensions.cs +++ b/LLama/Extensions/EncodingExtensions.cs @@ -16,7 +16,7 @@ internal static class EncodingExtensions return GetCharCountImpl(encoding, bytes); } #elif !NET6_0_OR_GREATER && !NETSTANDARD2_1_OR_GREATER - #error Target framework not supported! +#error Target framework not supported! #endif internal static int GetCharsImpl(Encoding encoding, ReadOnlySpan bytes, Span output) @@ -47,4 +47,15 @@ internal static class EncodingExtensions } } } + + internal static string GetStringFromSpan(this Encoding encoding, ReadOnlySpan bytes) + { + unsafe + { + fixed (byte* bytesPtr = bytes) + { + return encoding.GetString(bytesPtr, bytes.Length); + } + } + } } \ No newline at end of file diff --git a/LLama/Native/SafeLlamaModelHandle.cs b/LLama/Native/SafeLlamaModelHandle.cs index d20dd1f7..ef311224 100644 --- a/LLama/Native/SafeLlamaModelHandle.cs +++ b/LLama/Native/SafeLlamaModelHandle.cs @@ -3,6 +3,8 @@ using System.Buffers; using System.Collections.Generic; using System.Text; using LLama.Exceptions; +using LLama.Extensions; +using EncodingExtensions = LLama.Extensions.EncodingExtensions; namespace LLama.Native { @@ -259,12 +261,12 @@ namespace LLama.Native var keyBytes = MetadataKeyByIndex(i, dest.AsMemory()); if (keyBytes == null) continue; - var key = Encoding.UTF8.GetString(keyBytes.Value.Span); + var key = Encoding.UTF8.GetStringFromSpan(keyBytes.Value.Span); var valBytes = MetadataValueByIndex(i, dest.AsMemory()); if (valBytes == null) continue; - var val = Encoding.UTF8.GetString(valBytes.Value.Span); + var val = Encoding.UTF8.GetStringFromSpan(valBytes.Value.Span); result[key] = val; }