You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

NativeLibraryWithMacOrFallback.cs 2.2 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using LLama.Abstractions;
  2. using System.Collections.Generic;
  3. using System.Runtime.InteropServices;
  4. namespace LLama.Native
  5. {
  6. #if NET6_0_OR_GREATER
  7. /// <summary>
  8. /// A native library compiled on Mac, or fallbacks from all other libraries in the selection.
  9. /// </summary>
  10. public class NativeLibraryWithMacOrFallback : INativeLibrary
  11. {
  12. private NativeLibraryName _libraryName;
  13. private bool _skipCheck;
  14. /// <inheritdoc/>
  15. public NativeLibraryMetadata? Metadata
  16. {
  17. get
  18. {
  19. return new NativeLibraryMetadata(_libraryName, false, AvxLevel.None);
  20. }
  21. }
  22. /// <summary>
  23. ///
  24. /// </summary>
  25. /// <param name="libraryName"></param>
  26. /// <param name="skipCheck"></param>
  27. public NativeLibraryWithMacOrFallback(NativeLibraryName libraryName, bool skipCheck)
  28. {
  29. _libraryName = libraryName;
  30. _skipCheck = skipCheck;
  31. }
  32. /// <inheritdoc/>
  33. public IEnumerable<string> Prepare(SystemInfo systemInfo, NativeLogConfig.LLamaLogCallback? logCallback)
  34. {
  35. var path = GetPath(systemInfo, AvxLevel.None, logCallback);
  36. return path is null ?[] : [path];
  37. }
  38. private string? GetPath(SystemInfo systemInfo, AvxLevel avxLevel, NativeLogConfig.LLamaLogCallback? logCallback)
  39. {
  40. NativeLibraryUtils.GetPlatformPathParts(systemInfo.OSPlatform, out var os, out var fileExtension, out var libPrefix);
  41. string relativePath;
  42. if (systemInfo.OSPlatform == OSPlatform.OSX)
  43. {
  44. relativePath = $"runtimes/{os}/native/{libPrefix}{_libraryName.GetLibraryName()}{fileExtension}";
  45. }
  46. else
  47. {
  48. var avxStr = NativeLibraryConfig.AvxLevelToString(AvxLevel.None);
  49. if (!string.IsNullOrEmpty(avxStr))
  50. avxStr += "/";
  51. relativePath = $"runtimes/{os}/native/{avxStr}{libPrefix}{_libraryName.GetLibraryName()}{fileExtension}";
  52. }
  53. return relativePath;
  54. }
  55. }
  56. #endif
  57. }