using LLama.Common; namespace LLama.Unittest; public class MemoryDisposalTests { [Fact] public void ModelDisposal() { var @params = new ModelParams(Constants.GenerativeModelPath) { ContextSize = 2048, GpuLayerCount = 0, }; var model = LLamaWeights.LoadFromFile(@params); Assert.False(model.NativeHandle.IsClosed); model.Dispose(); Assert.True(model.NativeHandle.IsClosed); } [Fact] public void ContextDisposal() { var @params = new ModelParams(Constants.GenerativeModelPath) { ContextSize = 2048, GpuLayerCount = Constants.CIGpuLayerCount, }; var model = LLamaWeights.LoadFromFile(@params); var ctx = model.CreateContext(@params); // Disposing the model handle does **not** free the memory, because there's stilla context Assert.False(model.NativeHandle.IsClosed); model.Dispose(); Assert.False(model.NativeHandle.IsClosed); // Disposing the context frees context and model weights ctx.Dispose(); Assert.True(model.NativeHandle.IsClosed); Assert.True(ctx.NativeHandle.IsClosed); } }