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.4 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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. [MarshalAs(UnmanagedType.I1)]
  49. public bool sorted;
  50. /// <summary>
  51. /// Create a new LLamaTokenDataArrayNative around the data in the LLamaTokenDataArray
  52. /// </summary>
  53. /// <param name="array">Data source</param>
  54. /// <param name="native">Created native array</param>
  55. /// <returns>A memory handle, pinning the data in place until disposed</returns>
  56. public static MemoryHandle Create(LLamaTokenDataArray array, out LLamaTokenDataArrayNative native)
  57. {
  58. var handle = array.data.Pin();
  59. unsafe
  60. {
  61. native = new LLamaTokenDataArrayNative
  62. {
  63. data = new IntPtr(handle.Pointer),
  64. size = (ulong)array.data.Length,
  65. sorted = array.sorted
  66. };
  67. }
  68. return handle;
  69. }
  70. }
  71. }