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.

BuilderExtensions.cs 6.4 kB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. using Microsoft.KernelMemory;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using LLama;
  8. using LLama.Common;
  9. using Microsoft.KernelMemory.AI;
  10. using Microsoft.SemanticKernel.AI.Embeddings;
  11. using LLama.Native;
  12. namespace LLamaSharp.KernelMemory
  13. {
  14. /// <summary>
  15. /// Provides extension methods for the KernelMemoryBuilder class.
  16. /// </summary>
  17. public static class BuilderExtensions
  18. {
  19. /// <summary>
  20. /// Adds LLamaSharpTextEmbeddingGeneration to the KernelMemoryBuilder.
  21. /// </summary>
  22. /// <param name="builder">The KernelMemoryBuilder instance.</param>
  23. /// <param name="config">The LLamaSharpConfig instance.</param>
  24. /// <returns>The KernelMemoryBuilder instance with LLamaSharpTextEmbeddingGeneration added.</returns>
  25. public static IKernelMemoryBuilder WithLLamaSharpTextEmbeddingGeneration(this IKernelMemoryBuilder builder, LLamaSharpConfig config)
  26. {
  27. var generator = new LLamaSharpTextEmbeddingGenerator(config);
  28. builder.AddSingleton<ITextEmbeddingGenerator>(generator);
  29. builder.AddIngestionEmbeddingGenerator(generator);
  30. return builder;
  31. }
  32. /// <summary>
  33. /// Adds LLamaSharpTextEmbeddingGeneration to the KernelMemoryBuilder.
  34. /// </summary>
  35. /// <param name="builder">The KernelMemoryBuilder instance.</param>
  36. /// <param name="textEmbeddingGenerator">The LLamaSharpTextEmbeddingGeneration instance.</param>
  37. /// <returns>The KernelMemoryBuilder instance with LLamaSharpTextEmbeddingGeneration added.</returns>
  38. public static IKernelMemoryBuilder WithLLamaSharpTextEmbeddingGeneration(this IKernelMemoryBuilder builder, LLamaSharpTextEmbeddingGenerator textEmbeddingGenerator)
  39. {
  40. builder.AddSingleton<ITextEmbeddingGenerator>(textEmbeddingGenerator);
  41. builder.AddIngestionEmbeddingGenerator(textEmbeddingGenerator);
  42. return builder;
  43. }
  44. /// <summary>
  45. /// Adds LLamaSharpTextGeneration to the KernelMemoryBuilder.
  46. /// </summary>
  47. /// <param name="builder">The KernelMemoryBuilder instance.</param>
  48. /// <param name="config">The LLamaSharpConfig instance.</param>
  49. /// <returns>The KernelMemoryBuilder instance with LLamaSharpTextGeneration added.</returns>
  50. public static IKernelMemoryBuilder WithLLamaSharpTextGeneration(this IKernelMemoryBuilder builder, LLamaSharpConfig config)
  51. {
  52. builder.AddSingleton<ITextGenerator>(new LlamaSharpTextGenerator(config));
  53. return builder;
  54. }
  55. /// <summary>
  56. /// Adds LLamaSharpTextGeneration to the KernelMemoryBuilder.
  57. /// </summary>
  58. /// <param name="builder">The KernelMemoryBuilder instance.</param>
  59. /// <param name="textGenerator">The LlamaSharpTextGeneration instance.</param>
  60. /// <returns>The KernelMemoryBuilder instance with LLamaSharpTextGeneration added.</returns>
  61. public static IKernelMemoryBuilder WithLLamaSharpTextGeneration(this IKernelMemoryBuilder builder, LlamaSharpTextGenerator textGenerator)
  62. {
  63. builder.AddSingleton<ITextGenerator>(textGenerator);
  64. return builder;
  65. }
  66. /// <summary>
  67. /// Adds LLamaSharpTextEmbeddingGeneration and LLamaSharpTextGeneration to the KernelMemoryBuilder.
  68. /// </summary>
  69. /// <param name="builder">The KernelMemoryBuilder instance.</param>
  70. /// <param name="config">The LLamaSharpConfig instance.</param>
  71. /// <returns>The KernelMemoryBuilder instance with LLamaSharpTextEmbeddingGeneration and LLamaSharpTextGeneration added.</returns>
  72. public static IKernelMemoryBuilder WithLLamaSharpDefaults(this IKernelMemoryBuilder builder, LLamaSharpConfig config)
  73. {
  74. var parameters = new ModelParams(config.ModelPath)
  75. {
  76. ContextSize = config?.ContextSize ?? 2048,
  77. Seed = config?.Seed ?? 0,
  78. GpuLayerCount = config?.GpuLayerCount ?? 20,
  79. EmbeddingMode = true,
  80. MainGpu = config?.MainGpu ?? 0,
  81. SplitMode = config?.SplitMode ?? GPUSplitMode.None
  82. };
  83. var weights = LLamaWeights.LoadFromFile(parameters);
  84. var context = weights.CreateContext(parameters);
  85. var executor = new StatelessExecutor(weights, parameters);
  86. var embedder = new LLamaEmbedder(weights, parameters);
  87. builder.WithLLamaSharpTextEmbeddingGeneration(new LLamaSharpTextEmbeddingGenerator(embedder));
  88. builder.WithLLamaSharpTextGeneration(new LlamaSharpTextGenerator(weights, context, executor, config?.DefaultInferenceParams));
  89. return builder;
  90. }
  91. /// <summary>
  92. /// Adds LLamaSharpTextEmbeddingGeneration and LLamaSharpTextGeneration to the KernelMemoryBuilder. Using an already loaded model.
  93. /// </summary>
  94. /// <param name="builder">The KernelMemoryBuilder instance.</param>
  95. /// <param name="weights"></param>
  96. /// <param name="context"></param>
  97. /// <param name="config">The LLamaSharpConfig instance.</param>
  98. /// <returns>The KernelMemoryBuilder instance with LLamaSharpTextEmbeddingGeneration and LLamaSharpTextGeneration added.</returns>
  99. public static IKernelMemoryBuilder WithLLamaSharpDefaults(this IKernelMemoryBuilder builder, LLamaWeights weights, LLamaContext context, LLamaSharpConfig config)
  100. {
  101. var parameters = new ModelParams(config.ModelPath)
  102. {
  103. ContextSize = config?.ContextSize ?? 2048,
  104. Seed = config?.Seed ?? 0,
  105. GpuLayerCount = config?.GpuLayerCount ?? 20,
  106. EmbeddingMode = true,
  107. MainGpu = config?.MainGpu ?? 0,
  108. SplitMode = config?.SplitMode ?? GPUSplitMode.None,
  109. };
  110. var executor = new StatelessExecutor(weights, parameters);
  111. var embedder = new LLamaEmbedder(weights, parameters);
  112. builder.WithLLamaSharpTextEmbeddingGeneration(new LLamaSharpTextEmbeddingGenerator(embedder));
  113. builder.WithLLamaSharpTextGeneration(new LlamaSharpTextGenerator(weights, context, executor, config?.DefaultInferenceParams));
  114. return builder;
  115. }
  116. }
  117. }