From 443ce4fff45c4052a91f95ac6380dc3e192d831e Mon Sep 17 00:00:00 2001 From: Jason Couture Date: Tue, 30 Jan 2024 11:10:51 -0500 Subject: [PATCH] While the dllimport changes work, manual path searching needed to be updated --- LLama/Native/NativeApi.Load.cs | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/LLama/Native/NativeApi.Load.cs b/LLama/Native/NativeApi.Load.cs index 0dc5abd3..a5efe1b7 100644 --- a/LLama/Native/NativeApi.Load.cs +++ b/LLama/Native/NativeApi.Load.cs @@ -129,31 +129,33 @@ namespace LLama.Native } #if NET6_0_OR_GREATER - private static string GetAvxLibraryPath(NativeLibraryConfig.AvxLevel avxLevel, string prefix, string suffix) + private static string GetAvxLibraryPath(NativeLibraryConfig.AvxLevel avxLevel, string prefix, string suffix, string libraryNamePrefix) { var avxStr = NativeLibraryConfig.AvxLevelToString(avxLevel); if (!string.IsNullOrEmpty(avxStr)) { avxStr += "/"; } - return $"{prefix}{avxStr}{libraryName}{suffix}"; + return $"{prefix}{avxStr}{libraryNamePrefix}{libraryName}{suffix}"; } private static List GetLibraryTryOrder(NativeLibraryConfig.Description configuration) { OSPlatform platform; - string prefix, suffix; + string prefix, suffix, libraryNamePrefix; if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { platform = OSPlatform.Windows; prefix = "runtimes/win-x64/native/"; suffix = ".dll"; + libraryNamePrefix = ""; } else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) { platform = OSPlatform.Linux; prefix = "runtimes/linux-x64/native/"; suffix = ".so"; + libraryNamePrefix = "lib"; } else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) { @@ -163,6 +165,7 @@ namespace LLama.Native prefix = System.Runtime.Intrinsics.Arm.ArmBase.Arm64.IsSupported ? "runtimes/osx-arm64/native/" : "runtimes/osx-x64/native/"; + libraryNamePrefix = "lib"; } else { @@ -181,8 +184,8 @@ namespace LLama.Native // if check skipped, we just try to load cuda libraries one by one. if (configuration.SkipCheck) { - result.Add($"{prefix}cuda12/{libraryName}{suffix}"); - result.Add($"{prefix}cuda11/{libraryName}{suffix}"); + result.Add($"{prefix}cuda12/{libraryNamePrefix}{libraryName}{suffix}"); + result.Add($"{prefix}cuda11/{libraryNamePrefix}{libraryName}{suffix}"); } else { @@ -209,25 +212,25 @@ namespace LLama.Native // use cpu (or mac possibly with metal) if (!configuration.AllowFallback && platform != OSPlatform.OSX) { - result.Add(GetAvxLibraryPath(configuration.AvxLevel, prefix, suffix)); + result.Add(GetAvxLibraryPath(configuration.AvxLevel, prefix, suffix, libraryNamePrefix)); } else if (platform != OSPlatform.OSX) // in macos there's absolutely no avx { if (configuration.AvxLevel >= NativeLibraryConfig.AvxLevel.Avx512) - result.Add(GetAvxLibraryPath(NativeLibraryConfig.AvxLevel.Avx512, prefix, suffix)); + result.Add(GetAvxLibraryPath(NativeLibraryConfig.AvxLevel.Avx512, prefix, suffix, libraryNamePrefix)); if (configuration.AvxLevel >= NativeLibraryConfig.AvxLevel.Avx2) - result.Add(GetAvxLibraryPath(NativeLibraryConfig.AvxLevel.Avx2, prefix, suffix)); + result.Add(GetAvxLibraryPath(NativeLibraryConfig.AvxLevel.Avx2, prefix, suffix, libraryNamePrefix)); if (configuration.AvxLevel >= NativeLibraryConfig.AvxLevel.Avx) - result.Add(GetAvxLibraryPath(NativeLibraryConfig.AvxLevel.Avx, prefix, suffix)); + result.Add(GetAvxLibraryPath(NativeLibraryConfig.AvxLevel.Avx, prefix, suffix, libraryNamePrefix)); - result.Add(GetAvxLibraryPath(NativeLibraryConfig.AvxLevel.None, prefix, suffix)); + result.Add(GetAvxLibraryPath(NativeLibraryConfig.AvxLevel.None, prefix, suffix, libraryNamePrefix)); } if (platform == OSPlatform.OSX) { - result.Add($"{prefix}{libraryName}{suffix}"); + result.Add($"{prefix}{libraryNamePrefix}{libraryName}{suffix}"); } return result;