102 lines
3.0 KiB
C#
102 lines
3.0 KiB
C#
|
|
using System;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using LLama.Native;
|
|
|
|
namespace LLama;
|
|
|
|
/// <summary>
|
|
/// A set of llava model weights (mmproj), loaded into memory.
|
|
/// </summary>
|
|
public sealed class LLavaWeights : IDisposable
|
|
{
|
|
/// <summary>
|
|
/// The native handle, which is used in the native APIs
|
|
/// </summary>
|
|
/// <remarks>Be careful how you use this!</remarks>
|
|
public SafeLlavaModelHandle NativeHandle { get; }
|
|
|
|
private LLavaWeights(SafeLlavaModelHandle weights)
|
|
{
|
|
NativeHandle = weights;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Load weights into memory
|
|
/// </summary>
|
|
/// <param name="mmProject">path to the "mmproj" model file</param>
|
|
/// <returns></returns>
|
|
public static LLavaWeights LoadFromFile(string mmProject)
|
|
{
|
|
var weights = SafeLlavaModelHandle.LoadFromFile(mmProject, 1);
|
|
return new LLavaWeights(weights);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Load weights into memory
|
|
/// </summary>
|
|
/// <param name="mmProject">path to the "mmproj" model file</param>
|
|
/// <param name="token"></param>
|
|
/// <returns></returns>
|
|
public static Task<LLavaWeights> LoadFromFileAsync(string mmProject, CancellationToken token = default)
|
|
{
|
|
return Task.Run(() => LoadFromFile(mmProject), token);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Create the Image Embeddings from the bytes of an image.
|
|
/// </summary>
|
|
/// <param name="ctxLlama"></param>
|
|
/// <param name="image">Image bytes. Supported formats:
|
|
/// <list type="bullet">
|
|
/// <item>JPG</item>
|
|
/// <item>PNG</item>
|
|
/// <item>BMP</item>
|
|
/// <item>TGA</item>
|
|
/// </list>
|
|
/// </param>
|
|
/// <returns></returns>
|
|
public SafeLlavaImageEmbedHandle CreateImageEmbeddings(LLamaContext ctxLlama, byte[] image )
|
|
{
|
|
return NativeHandle.CreateImageEmbeddings(ctxLlama, image );
|
|
}
|
|
|
|
/// <summary>
|
|
/// Create the Image Embeddings from the bytes of an image.
|
|
/// </summary>
|
|
/// <param name="ctxLlama"></param>
|
|
/// <param name="image">Path to the image file. Supported formats:
|
|
/// <list type="bullet">
|
|
/// <item>JPG</item>
|
|
/// <item>PNG</item>
|
|
/// <item>BMP</item>
|
|
/// <item>TGA</item>
|
|
/// </list>
|
|
/// </param>
|
|
/// <returns></returns>
|
|
/// <exception cref="InvalidOperationException"></exception>
|
|
public SafeLlavaImageEmbedHandle CreateImageEmbeddings(LLamaContext ctxLlama, string image )
|
|
{
|
|
return NativeHandle.CreateImageEmbeddings(ctxLlama, image );
|
|
}
|
|
|
|
/// <summary>
|
|
/// Eval the image embeddings
|
|
/// </summary>
|
|
/// <param name="ctxLlama"></param>
|
|
/// <param name="imageEmbed"></param>
|
|
/// <param name="n_past"></param>
|
|
/// <returns></returns>
|
|
public bool EvalImageEmbed(LLamaContext ctxLlama, SafeLlavaImageEmbedHandle imageEmbed, ref int n_past)
|
|
{
|
|
return NativeHandle.EvalImageEmbed( ctxLlama, imageEmbed, ref n_past );
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public void Dispose()
|
|
{
|
|
NativeHandle.Dispose();
|
|
}
|
|
|
|
} |