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
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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. };
  79. var weights = LLamaWeights.LoadFromFile(parameters);
  80. var context = weights.CreateContext(parameters);
  81. var executor = new StatelessExecutor(weights, parameters);
  82. var embedder = new LLamaEmbedder(weights, parameters);
  83. builder.WithLLamaSharpTextEmbeddingGeneration(new LLamaSharpTextEmbeddingGenerator(embedder));
  84. builder.WithLLamaSharpTextGeneration(new LlamaSharpTextGenerator(weights, context, executor, config?.DefaultInferenceParams));
  85. return builder;
  86. }
  87. }
  88. }