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.

LLamaTokenDataArray.cs 2.6 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using System;
  2. using System.Buffers;
  3. using System.Runtime.InteropServices;
  4. namespace LLama.Native
  5. {
  6. /// <summary>
  7. /// Contains an array of LLamaTokenData, potentially sorted.
  8. /// </summary>
  9. public struct LLamaTokenDataArray
  10. {
  11. /// <summary>
  12. /// The LLamaTokenData
  13. /// </summary>
  14. public readonly Memory<LLamaTokenData> data;
  15. /// <summary>
  16. /// Indicates if `data` is sorted
  17. /// </summary>
  18. public readonly bool sorted;
  19. /// <summary>
  20. /// Create a new LLamaTokenDataArray
  21. /// </summary>
  22. /// <param name="tokens"></param>
  23. /// <param name="isSorted"></param>
  24. public LLamaTokenDataArray(Memory<LLamaTokenData> tokens, bool isSorted = false)
  25. {
  26. data = tokens;
  27. sorted = isSorted;
  28. }
  29. }
  30. /// <summary>
  31. /// Contains a pointer to an array of LLamaTokenData which is pinned in memory.
  32. /// </summary>
  33. [StructLayout(LayoutKind.Sequential)]
  34. public struct LLamaTokenDataArrayNative
  35. {
  36. /// <summary>
  37. /// A pointer to an array of LlamaTokenData
  38. /// </summary>
  39. /// <remarks>Memory must be pinned in place for all the time this LLamaTokenDataArrayNative is in use</remarks>
  40. public IntPtr data;
  41. /// <summary>
  42. /// Number of LLamaTokenData in the array
  43. /// </summary>
  44. public ulong size;
  45. /// <summary>
  46. /// Indicates if the items in the array are sorted
  47. /// </summary>
  48. public bool sorted
  49. {
  50. get => Convert.ToBoolean(_sorted);
  51. set => _sorted = Convert.ToSByte(value);
  52. }
  53. private sbyte _sorted;
  54. /// <summary>
  55. /// Create a new LLamaTokenDataArrayNative around the data in the LLamaTokenDataArray
  56. /// </summary>
  57. /// <param name="array">Data source</param>
  58. /// <param name="native">Created native array</param>
  59. /// <returns>A memory handle, pinning the data in place until disposed</returns>
  60. public static MemoryHandle Create(LLamaTokenDataArray array, out LLamaTokenDataArrayNative native)
  61. {
  62. var handle = array.data.Pin();
  63. unsafe
  64. {
  65. native = new LLamaTokenDataArrayNative
  66. {
  67. data = new IntPtr(handle.Pointer),
  68. size = (ulong)array.data.Length,
  69. sorted = array.sorted
  70. };
  71. }
  72. return handle;
  73. }
  74. }
  75. }