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 5.1 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
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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. namespace LLamaSharp.KernelMemory
  12. {
  13. /// <summary>
  14. /// Provides extension methods for the KernelMemoryBuilder class.
  15. /// </summary>
  16. public static class BuilderExtensions
  17. {
  18. private static IKernelMemoryBuilder WithCustomEmbeddingGeneration(this IKernelMemoryBuilder builder, ITextEmbeddingGeneration embeddingGeneration)
  19. {
  20. builder.AddSingleton<ITextEmbeddingGeneration>(embeddingGeneration);
  21. builder.AddIngestionEmbeddingGenerator(embeddingGeneration);
  22. return builder;
  23. }
  24. private static IKernelMemoryBuilder WithCustomTextGeneration(this IKernelMemoryBuilder builder, ITextGeneration textGeneration)
  25. {
  26. builder.AddSingleton<ITextGeneration>(textGeneration);
  27. return builder;
  28. }
  29. /// <summary>
  30. /// Adds LLamaSharpTextEmbeddingGeneration to the KernelMemoryBuilder.
  31. /// </summary>
  32. /// <param name="builder">The KernelMemoryBuilder instance.</param>
  33. /// <param name="config">The LLamaSharpConfig instance.</param>
  34. /// <returns>The KernelMemoryBuilder instance with LLamaSharpTextEmbeddingGeneration added.</returns>
  35. public static IKernelMemoryBuilder WithLLamaSharpTextEmbeddingGeneration(this IKernelMemoryBuilder builder, LLamaSharpConfig config)
  36. {
  37. builder.WithCustomEmbeddingGeneration(new LLamaSharpTextEmbeddingGeneration(config));
  38. return builder;
  39. }
  40. /// <summary>
  41. /// Adds LLamaSharpTextEmbeddingGeneration to the KernelMemoryBuilder.
  42. /// </summary>
  43. /// <param name="builder">The KernelMemoryBuilder instance.</param>
  44. /// <param name="textEmbeddingGeneration">The LLamaSharpTextEmbeddingGeneration instance.</param>
  45. /// <returns>The KernelMemoryBuilder instance with LLamaSharpTextEmbeddingGeneration added.</returns>
  46. public static IKernelMemoryBuilder WithLLamaSharpTextEmbeddingGeneration(this IKernelMemoryBuilder builder, LLamaSharpTextEmbeddingGeneration textEmbeddingGeneration)
  47. {
  48. builder.WithCustomEmbeddingGeneration(textEmbeddingGeneration);
  49. return builder;
  50. }
  51. /// <summary>
  52. /// Adds LLamaSharpTextGeneration to the KernelMemoryBuilder.
  53. /// </summary>
  54. /// <param name="builder">The KernelMemoryBuilder instance.</param>
  55. /// <param name="config">The LLamaSharpConfig instance.</param>
  56. /// <returns>The KernelMemoryBuilder instance with LLamaSharpTextGeneration added.</returns>
  57. public static IKernelMemoryBuilder WithLLamaSharpTextGeneration(this IKernelMemoryBuilder builder, LLamaSharpConfig config)
  58. {
  59. builder.WithCustomTextGeneration(new LlamaSharpTextGeneration(config));
  60. return builder;
  61. }
  62. /// <summary>
  63. /// Adds LLamaSharpTextGeneration to the KernelMemoryBuilder.
  64. /// </summary>
  65. /// <param name="builder">The KernelMemoryBuilder instance.</param>
  66. /// <param name="textGeneration">The LlamaSharpTextGeneration instance.</param>
  67. /// <returns>The KernelMemoryBuilder instance with LLamaSharpTextGeneration added.</returns>
  68. public static IKernelMemoryBuilder WithLLamaSharpTextGeneration(this IKernelMemoryBuilder builder, LlamaSharpTextGeneration textGeneration)
  69. {
  70. builder.WithCustomTextGeneration(textGeneration);
  71. return builder;
  72. }
  73. /// <summary>
  74. /// Adds LLamaSharpTextEmbeddingGeneration and LLamaSharpTextGeneration to the KernelMemoryBuilder.
  75. /// </summary>
  76. /// <param name="builder">The KernelMemoryBuilder instance.</param>
  77. /// <param name="config">The LLamaSharpConfig instance.</param>
  78. /// <returns>The KernelMemoryBuilder instance with LLamaSharpTextEmbeddingGeneration and LLamaSharpTextGeneration added.</returns>
  79. public static IKernelMemoryBuilder WithLLamaSharpDefaults(this IKernelMemoryBuilder builder, LLamaSharpConfig config)
  80. {
  81. var parameters = new ModelParams(config.ModelPath)
  82. {
  83. ContextSize = config?.ContextSize ?? 2048,
  84. Seed = config?.Seed ?? 0,
  85. GpuLayerCount = config?.GpuLayerCount ?? 20
  86. };
  87. var weights = LLamaWeights.LoadFromFile(parameters);
  88. var context = weights.CreateContext(parameters);
  89. var executor = new StatelessExecutor(weights, parameters);
  90. var embedder = new LLamaEmbedder(weights, parameters);
  91. builder.WithLLamaSharpTextEmbeddingGeneration(new LLamaSharpTextEmbeddingGeneration(embedder));
  92. builder.WithLLamaSharpTextGeneration(new LlamaSharpTextGeneration(weights, context, executor, config?.DefaultInferenceParams));
  93. return builder;
  94. }
  95. }
  96. }