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.

IModelParamsExtensions.cs 2.5 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using System.IO;
  2. using System;
  3. using System.Text;
  4. using LLama.Abstractions;
  5. using LLama.Native;
  6. namespace LLama.Extensions;
  7. /// <summary>
  8. /// Extention methods to the IModelParams interface
  9. /// </summary>
  10. public static class IModelParamsExtensions
  11. {
  12. /// <summary>
  13. /// Convert the given `IModelParams` into a `LLamaModelParams`
  14. /// </summary>
  15. /// <param name="params"></param>
  16. /// <param name="result"></param>
  17. /// <returns></returns>
  18. /// <exception cref="FileNotFoundException"></exception>
  19. /// <exception cref="ArgumentException"></exception>
  20. public static IDisposable ToLlamaModelParams(this IModelParams @params, out LLamaModelParams result)
  21. {
  22. var disposer = new GroupDisposable();
  23. result = NativeApi.llama_model_default_params();
  24. result.main_gpu = @params.MainGpu;
  25. result.n_gpu_layers = @params.GpuLayerCount;
  26. result.use_mlock = @params.UseMemoryLock;
  27. result.use_mmap = @params.UseMemorymap;
  28. result.vocab_only = @params.VocabOnly;
  29. unsafe
  30. {
  31. result.tensor_split = (float*)disposer.Add(@params.TensorSplits.Pin()).Pointer;
  32. }
  33. if (@params.MetadataOverrides.Count == 0)
  34. {
  35. unsafe
  36. {
  37. result.kv_overrides = (LLamaModelMetadataOverride*)IntPtr.Zero;
  38. }
  39. }
  40. else
  41. {
  42. // Allocate enough space for all the override items
  43. var overrides = new LLamaModelMetadataOverride[@params.MetadataOverrides.Count + 1];
  44. var overridesPin = overrides.AsMemory().Pin();
  45. unsafe
  46. {
  47. result.kv_overrides = (LLamaModelMetadataOverride*)disposer.Add(overridesPin).Pointer;
  48. }
  49. // Convert each item
  50. for (var i = 0; i < @params.MetadataOverrides.Count; i++)
  51. {
  52. var item = @params.MetadataOverrides[i];
  53. var native = new LLamaModelMetadataOverride
  54. {
  55. Tag = item.Type
  56. };
  57. item.WriteValue(ref native);
  58. // Convert key to bytes
  59. unsafe
  60. {
  61. fixed (char* srcKey = item.Key)
  62. {
  63. Encoding.UTF8.GetBytes(srcKey, 0, native.key, 128);
  64. }
  65. }
  66. overrides[i] = native;
  67. }
  68. }
  69. return disposer;
  70. }
  71. }