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 4.7 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
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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. /// <summary>
  19. /// Adds LLamaSharpTextEmbeddingGeneration to the KernelMemoryBuilder.
  20. /// </summary>
  21. /// <param name="builder">The KernelMemoryBuilder instance.</param>
  22. /// <param name="config">The LLamaSharpConfig instance.</param>
  23. /// <returns>The KernelMemoryBuilder instance with LLamaSharpTextEmbeddingGeneration added.</returns>
  24. public static IKernelMemoryBuilder WithLLamaSharpTextEmbeddingGeneration(this IKernelMemoryBuilder builder, LLamaSharpConfig config)
  25. {
  26. var generator = new LLamaSharpTextEmbeddingGenerator(config);
  27. builder.AddSingleton<ITextEmbeddingGenerator>(generator);
  28. builder.AddIngestionEmbeddingGenerator(generator);
  29. return builder;
  30. }
  31. /// <summary>
  32. /// Adds LLamaSharpTextEmbeddingGeneration to the KernelMemoryBuilder.
  33. /// </summary>
  34. /// <param name="builder">The KernelMemoryBuilder instance.</param>
  35. /// <param name="textEmbeddingGenerator">The LLamaSharpTextEmbeddingGeneration instance.</param>
  36. /// <returns>The KernelMemoryBuilder instance with LLamaSharpTextEmbeddingGeneration added.</returns>
  37. public static IKernelMemoryBuilder WithLLamaSharpTextEmbeddingGeneration(this IKernelMemoryBuilder builder, LLamaSharpTextEmbeddingGenerator textEmbeddingGenerator)
  38. {
  39. builder.AddSingleton<ITextEmbeddingGenerator>(textEmbeddingGenerator);
  40. builder.AddIngestionEmbeddingGenerator(textEmbeddingGenerator);
  41. return builder;
  42. }
  43. /// <summary>
  44. /// Adds LLamaSharpTextGeneration to the KernelMemoryBuilder.
  45. /// </summary>
  46. /// <param name="builder">The KernelMemoryBuilder instance.</param>
  47. /// <param name="config">The LLamaSharpConfig instance.</param>
  48. /// <returns>The KernelMemoryBuilder instance with LLamaSharpTextGeneration added.</returns>
  49. public static IKernelMemoryBuilder WithLLamaSharpTextGeneration(this IKernelMemoryBuilder builder, LLamaSharpConfig config)
  50. {
  51. builder.AddSingleton<ITextGenerator>(new LlamaSharpTextGenerator(config));
  52. return builder;
  53. }
  54. /// <summary>
  55. /// Adds LLamaSharpTextGeneration to the KernelMemoryBuilder.
  56. /// </summary>
  57. /// <param name="builder">The KernelMemoryBuilder instance.</param>
  58. /// <param name="textGenerator">The LlamaSharpTextGeneration instance.</param>
  59. /// <returns>The KernelMemoryBuilder instance with LLamaSharpTextGeneration added.</returns>
  60. public static IKernelMemoryBuilder WithLLamaSharpTextGeneration(this IKernelMemoryBuilder builder, LlamaSharpTextGenerator textGenerator)
  61. {
  62. builder.AddSingleton<ITextGenerator>(textGenerator);
  63. return builder;
  64. }
  65. /// <summary>
  66. /// Adds LLamaSharpTextEmbeddingGeneration and LLamaSharpTextGeneration to the KernelMemoryBuilder.
  67. /// </summary>
  68. /// <param name="builder">The KernelMemoryBuilder instance.</param>
  69. /// <param name="config">The LLamaSharpConfig instance.</param>
  70. /// <returns>The KernelMemoryBuilder instance with LLamaSharpTextEmbeddingGeneration and LLamaSharpTextGeneration added.</returns>
  71. public static IKernelMemoryBuilder WithLLamaSharpDefaults(this IKernelMemoryBuilder builder, LLamaSharpConfig config)
  72. {
  73. var parameters = new ModelParams(config.ModelPath)
  74. {
  75. ContextSize = config?.ContextSize ?? 2048,
  76. Seed = config?.Seed ?? 0,
  77. GpuLayerCount = config?.GpuLayerCount ?? 20,
  78. EmbeddingMode = true
  79. };
  80. var weights = LLamaWeights.LoadFromFile(parameters);
  81. var context = weights.CreateContext(parameters);
  82. var executor = new StatelessExecutor(weights, parameters);
  83. var embedder = new LLamaEmbedder(weights, parameters);
  84. builder.WithLLamaSharpTextEmbeddingGeneration(new LLamaSharpTextEmbeddingGenerator(embedder));
  85. builder.WithLLamaSharpTextGeneration(new LlamaSharpTextGenerator(weights, context, executor, config?.DefaultInferenceParams));
  86. return builder;
  87. }
  88. }
  89. }