using Microsoft.KernelMemory; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using LLama; using LLama.Common; using Microsoft.KernelMemory.AI; using Microsoft.SemanticKernel.AI.Embeddings; namespace LLamaSharp.KernelMemory { /// /// Provides extension methods for the KernelMemoryBuilder class. /// public static class BuilderExtensions { private static IKernelMemoryBuilder WithCustomEmbeddingGeneration(this IKernelMemoryBuilder builder, ITextEmbeddingGeneration embeddingGeneration) { builder.AddSingleton(embeddingGeneration); builder.AddIngestionEmbeddingGenerator(embeddingGeneration); return builder; } private static IKernelMemoryBuilder WithCustomTextGeneration(this IKernelMemoryBuilder builder, ITextGeneration textGeneration) { builder.AddSingleton(textGeneration); return builder; } /// /// Adds LLamaSharpTextEmbeddingGeneration to the KernelMemoryBuilder. /// /// The KernelMemoryBuilder instance. /// The LLamaSharpConfig instance. /// The KernelMemoryBuilder instance with LLamaSharpTextEmbeddingGeneration added. public static IKernelMemoryBuilder WithLLamaSharpTextEmbeddingGeneration(this IKernelMemoryBuilder builder, LLamaSharpConfig config) { builder.WithCustomEmbeddingGeneration(new LLamaSharpTextEmbeddingGeneration(config)); return builder; } /// /// Adds LLamaSharpTextEmbeddingGeneration to the KernelMemoryBuilder. /// /// The KernelMemoryBuilder instance. /// The LLamaSharpTextEmbeddingGeneration instance. /// The KernelMemoryBuilder instance with LLamaSharpTextEmbeddingGeneration added. public static IKernelMemoryBuilder WithLLamaSharpTextEmbeddingGeneration(this IKernelMemoryBuilder builder, LLamaSharpTextEmbeddingGeneration textEmbeddingGeneration) { builder.WithCustomEmbeddingGeneration(textEmbeddingGeneration); return builder; } /// /// Adds LLamaSharpTextGeneration to the KernelMemoryBuilder. /// /// The KernelMemoryBuilder instance. /// The LLamaSharpConfig instance. /// The KernelMemoryBuilder instance with LLamaSharpTextGeneration added. public static IKernelMemoryBuilder WithLLamaSharpTextGeneration(this IKernelMemoryBuilder builder, LLamaSharpConfig config) { builder.WithCustomTextGeneration(new LlamaSharpTextGeneration(config)); return builder; } /// /// Adds LLamaSharpTextGeneration to the KernelMemoryBuilder. /// /// The KernelMemoryBuilder instance. /// The LlamaSharpTextGeneration instance. /// The KernelMemoryBuilder instance with LLamaSharpTextGeneration added. public static IKernelMemoryBuilder WithLLamaSharpTextGeneration(this IKernelMemoryBuilder builder, LlamaSharpTextGeneration textGeneration) { builder.WithCustomTextGeneration(textGeneration); return builder; } /// /// Adds LLamaSharpTextEmbeddingGeneration and LLamaSharpTextGeneration to the KernelMemoryBuilder. /// /// The KernelMemoryBuilder instance. /// The LLamaSharpConfig instance. /// The KernelMemoryBuilder instance with LLamaSharpTextEmbeddingGeneration and LLamaSharpTextGeneration added. public static IKernelMemoryBuilder WithLLamaSharpDefaults(this IKernelMemoryBuilder builder, LLamaSharpConfig config) { var parameters = new ModelParams(config.ModelPath) { ContextSize = config?.ContextSize ?? 2048, Seed = config?.Seed ?? 0, GpuLayerCount = config?.GpuLayerCount ?? 20 }; var weights = LLamaWeights.LoadFromFile(parameters); var context = weights.CreateContext(parameters); var executor = new StatelessExecutor(weights, parameters); var embedder = new LLamaEmbedder(weights, parameters); builder.WithLLamaSharpTextEmbeddingGeneration(new LLamaSharpTextEmbeddingGeneration(embedder)); builder.WithLLamaSharpTextGeneration(new LlamaSharpTextGeneration(weights, context, executor, config?.DefaultInferenceParams)); return builder; } } }