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;
}
}
}