Table of Contents

LM-Kit.NET Change History

2026

Version 2026.8.3 (13 August 2026)

Improvements

  • Listing skill resources no longer loads every file into memory: the skill resource tool's list operation reported sizes by reading and caching whole files; sizes now come from the file system through the new SkillResource.SizeBytes property, which reports a resource's size without touching its content.
  • Emails paginate like their printed form: an EML now exposes its body pages followed by every attachment expanded to real pages (PDF enclosures contribute their own pages, images become full-page scans, DOCX/HTML/text render through their Markdown form, forwarded messages nest), so page-based pipelines such as extraction, chat, summarization and rendering read an email exactly as they read its scanned print. Previously only the body text was processed and enclosure content never reached the model. Document-sized inline images get a page as well, while signature logos and tracking pixels stay out; MBOX aggregation keeps its one-page-per-message shape.

New Features

  • Dependent allowed values for structured extraction (DependentAllowedValues, assigned to TextExtractionElementFormat.DependentValues): constrains an element's allowed values by the value of the sibling field declared just before it, the shape of two-level taxonomies such as category and subcategory. Declared in JSON schemas with standard draft-07 conditionals (allOf/if/then) or programmatically; the constraint is compiled into the generation grammar, so an undeclared combination cannot be produced even when value names collide across parents. The schema shown to the model spells out the values per parent, exported schemas round-trip the conditionals, and windowed extraction keeps a dependent value in the same window as its discriminator.
  • LoRA fine-tuning, rebuilt on a native training engine (LMKit.Finetuning.LoraFinetuning): trains a low-rank adapter on your own conversations entirely on the local machine and produces GGUF artifacts, either a small adapter applied at load time or a merged model. TrainToAdapter and TrainToModel drive the run; LoraTrainingParameters configures rank, alpha, target modules (LoraTargetModules, from attention-only to all modules including MoE experts), epochs, learning rate and schedule (LearningRateSchedule), warmup, validation split, and assistant-only loss. Progress streams through FinetuningProgress with live loss, accuracy, and learning rate; RequestStop cancels cooperatively and still saves the adapter trained so far; step checkpointing supports resuming. Training runs on the same GGUF model files used for inference (quantized bases included) with no external dependency. Training is GPU-accelerated on CUDA: the full step runs on the device, including the masked instruction-tuning loss, the AdamW update on device-resident adapters, and the gradient path back through quantized base weights, cutting step time by more than an order of magnitude over CPU; it falls back to CPU when no CUDA device is present. Breaking change: this replaces the previous fine-tuning surface, which was non-functional; the new API is public and documented.
  • Dataset ingestion from files and archives (LMKit.Finetuning.TrainingDataset): load training data from the standard industry formats, auto-detected: chat JSONL ({"messages":[...]}, the OpenAI shape), ShareGPT JSON, Alpaca JSON, plain-text corpora, and ZIP archives bundling any mix of these. TrainingDataset.Load(model, path) reads a file or archive; LoraFinetuning.AddDatasetFile(path) and AddDataset(TrainingDataset) feed a run, alongside the programmatic AddTrainingData(ChatHistory) and AddRawText. UnmaskedSampleCount surfaces chat-template mismatches so a dataset problem is visible instead of silently degrading to full-sequence loss.
  • Vision fine-tuning: training samples can carry images, on vision-capable models. Conversations with image attachments and dataset files with images arrays (relative paths beside the file or inside its ZIP, <image> markers, data URIs) train through the model's own vision path: frozen vision tower, adapters on the language side, laid out exactly as inference lays them out. Image token cost follows the attachment's ImageDetail, and a dataset whose declared images all fail to resolve is refused instead of silently training text-only.
  • Image redaction with LMKit.Media.Image.ImageRedactor: permanently removes content from images by painting regions fully opaque, locating search terms through the configured OCR engine, re-encoding in the source format (multipage sources keep every page), and stripping EXIF/XMP metadata. Areas can be built directly from PII detection output via ImageRedactionArea.FromRegion.
  • Office document redaction with LMKit.Document.OpenXml.OfficeRedactor: definitively removes text from DOCX, XLSX and PPTX packages by overwriting every matched character with a mask character, matching across formatting runs and covering headers, footers, notes, comments, shared strings and document properties.
  • PDF form filling with LMKit.Document.Pdf.PdfForm: lists a PDF's form fields (names, labels, kinds, options, current values, required and read-only flags, page geometry) and fills text fields, checkboxes, radio buttons and choice fields with proper appearance regeneration, optionally flattening the result so the values become page content.
  • Added model card for muse-glimmer:30b: Meta Muse Glimmer 30B flagship vision-language model with image and video-frame understanding, a dedicated reasoning channel, native function calling, and a 131K context window. Ships with full-precision weights for fine-tuning alongside the quantized catalog artifact.

Bug Fixes

  • Skill folders removed from a watched directory now leave the registry: SkillWatcher resolved deletions by inspecting the already-deleted path and by treating the folder name as the skill name, so removals never landed and a skill named differently from its folder could linger forever. Deletions now reconcile against each registered skill's own directory; a skill that survives the event (for example a single resource file removed) reloads instead of being dropped, so its cached resource listing stays fresh.
  • LoraMerger could produce a corrupted merged model: an internal flag was read uninitialized, so a merge could write re-quantized tensor data under a header that declared full-precision tensors, and the resulting file failed to load ("tensor data is not within the file bounds"). Merged tensors are now always written at the declared F16 precision, and EnableQuantization re-quantizes the merged model back to the base precision as documented.
  • Attachment.SupportedFileExtensions no longer advertises audio containers: the registry listed .wav, .mp3, .flac, .ogg and .m4a ahead of actual ingestion support, so consumers gating on it shipped audio files that Attachment then rejected. The audio entries return when ingestion ships.
  • Markdown tables no longer show raw inline markup in PDF conversion: MarkdownToPdf rendered emphasis, code and link markers inside table cells as literal characters; cells now render their display text.

Version 2026.8.2 (08 August 2026)

Improvements

  • A full GPU no longer terminates the process (CUDA and Vulkan): a device that runs out of memory during decoding now fails only the affected request with a retryable error, while the engine, its resident conversations, and every other request keep running. Previously the native runtime brought down the whole process.
  • New DeviceMemoryPressureException: raised when the device is momentarily out of memory, either because a shared slot pool could not be built within its wait window or because a decode's device allocation failed. The condition is transient and carries the model name and device number, so hosts can shed the request with a retryable status and clients can back off instead of treating it as a failure.
  • Standing inference pools no longer evict each other under memory pressure: a pool that served a request within the last 30 seconds is treated as live, and an incoming pool fits itself down instead of retiring it. Previously two pools that could not coexist at their configured shapes traded evictions on every attach, and requests paid a rebuild or a timeout on each swing.
  • Proportionate memory reclaim when a request's context allocation fails: the runtime now frees just enough idle standing state for the failed allocation instead of retiring every idle pool on the device.
  • Model load records its device placement: the load log line now names the device the model landed on with its free and total memory, so a multi-GPU host where several models or processes elect the same device is visible at a glance.
  • Models that cannot host a shared slot pool are served immediately: such a model is a stated capability limit of the pooled strategy, and its requests now route to the per-request pipeline up front instead of paying the full pool wait window on every request.
  • Device election prices unbuilt slot pools: a loaded model's configured pool now counts against its device before the first completion materializes it, so consecutive model loads spread across the GPUs instead of piling onto the card that momentarily reads freest and later starving it.

New Features

  • Markup-free embedding view as one public call (SemanticChunkQualityGate.NormalizeForEmbedding): returns exactly the normalized text the chunk quality gate scores and embeds - HTML tags and entities, markdown markers, table rails, link URLs and over-long tokens removed - so any embedding pipeline can guarantee markup never reaches the model.
  • Structured extraction of content larger than the context window (TextExtraction.OverflowStrategy): OverflowResolutionStrategy.Segment splits the content into overlapping context-sized windows, runs one extraction pass per window in sequence, and folds the answers into the single object the schema describes. List fields hold the union of every window's items with duplicates removed, and single-value fields hold the first window that reported a value.
  • Windowed extraction now covers images and PDFs, not just text: a scanned or image-based document too large for one pass is packed into windows by measured per-page cost rather than page count, so dense and light pages are budgeted correctly. When a page is too costly to fit even on its own, its image detail steps down until the plan fits instead of the extraction being refused.
  • Windowed extraction stops once the schema is complete (TextExtraction.StopWhenAllFieldsFound, on by default): windows are read in document order and a single-value field keeps the first window that answered it, so once every field has an answer the remaining windows cannot change the result and are skipped. For a long document whose fields sit near the front, the usual shape of forms, invoices and contracts, this turns dozens of inference passes into one. A schema containing a list field at any depth always reads every window, since a later one can still contribute an item.
  • Oversize content is refused by default (OverflowResolutionStrategy.Reject): extraction raises NotEnoughContextSizeException with the required and available token counts instead of quietly spending one inference pass per window. Windowing is opt-in, so a large document cannot crowd out the rest of the workload unless the caller asks for it.

Bug Fixes

  • Closed three more out-of-memory aborts on GPU: a compute-buffer reservation failing mid-decode, an image encode that could not allocate its graph, and a conversation state snapshot that could not allocate its device stream each terminated the process under sustained memory pressure (visible as GGML_ASSERT(buffer) aborts or near-NULL segfaults in crash logs). All three now fail only the affected request with DeviceMemoryPressureException, and a snapshot that could not be stored simply re-prefills on the conversation's next turn.
  • Image embedding and background removal models now load from the released package: nomic-embed-vision, U2Net and ModNet failed with "ONNX model family ... is not supported" because the family recorded in the .lmk archive no longer matched the shipped build.
  • Windowed extraction no longer stops at the first window: named entity recognition and PII detection split inputs larger than the context into several windows, but only the first window's entities reached the caller. Every window now contributes to the returned result.
  • Windows now overlap at their seams: a record straddling a window boundary was read partially in both windows and correctly in neither. Each window re-shows the tail of its predecessor, and the duplicates that produces are removed when the windows are folded together.
  • Confidence and review triage now work on windowed extractions: every element of a folded result reports the confidence of the window that produced it, so TextExtractionResultElement.Confidence and HumanVerificationRequired are meaningful again. A single-value field that two windows read differently keeps only a fraction of that confidence, so a contested value surfaces for review instead of being settled silently by the first window to answer.

Version 2026.8.1 (02 August 2026)

New Features

  • Shared slot pool inference scheduling (Configuration.InferenceScheduling, Configuration.SharedSlotPool): a new scheduling strategy that allocates one fixed-shape context per model and divides it into slots that decode together, so throughput scales with the slot count and the memory footprint is known before the first request. SharedSlotPoolOptions controls SlotCount, SlotContextSize, the saturation policy (Queue or Reject, which throws SlotPoolSaturatedException), and allocation timing. The default strategy remains PerRequestContext.
  • Per-model slot pool shape (LM.SharedSlotPool): a loaded model can now depart from the process-wide pool shape, so one long-context model can be given a wider window without paying for it on every model, and a large model can be given fewer slots so it still fits its device. Every value left unset is inherited live from Configuration.SharedSlotPool (SlotCountOverride and SlotContextSizeOverride are the tri-state view, where null means inherit). A change applies on the model's next request, and the device memory ceiling governs it exactly as it governs the process-wide shape.
  • Idle conversations no longer consume device memory (Configuration.EnableSessionStateOffload, on by default): idle conversation state leaves device memory and resumes transparently on the next turn, so many more conversations can stay active at once.
  • New sampling controls: Top-A, Epsilon cutoff, Eta cutoff, Top-N-Sigma, quadratic smoothing, and Exclude Top Choices (XTC) join the RandomSampling chain.
  • Adaptive-P sampling (LMKit.TextGeneration.Sampling.AdaptivePSampling): targets a steady confidence level instead of a fixed distribution shape, keeping long completions consistent.
  • Sequence-aware repetition control, DRY (RepetitionPenalty.NgramPenaltyMultiplier, RepetitionPenalty.NoRepeatNgramSize): penalizes repeated sequences rather than repeated tokens, with an optional hard n-gram block for output that must never repeat.
  • Added model card for infinity-parser2-flash: INF Tech Infinity-Parser2-Flash, a compact 2B vision-language model for low-latency document parsing. VlmOcr drives its native tasks: Markdown transcription, table extraction (HTML), formula extraction (LaTeX), chart-to-table conversion, and layout extraction.
  • New VlmOcrIntent.LayoutAnalysis intent: extracts the full page structure as positioned, categorized regions. Each region's layout category is exposed through the new TextElement.Category property (LayoutElementCategory: title, text, table, formula, figure, captions, footnotes, header, footer), figures keep their bounding box, and the machine-readable JSON payload is surfaced through VlmOcrResult.NormalizedText. Supported by infinity-parser2-flash.

Improvements

  • Up to 4x more throughput under concurrent load.
  • Faster sampling and structured data extraction.
  • Better multi-turn conversation performance under load.

Bug Fixes

  • DeviceConfiguration.GetOptimalContextSize is now scheduling-aware: under InferenceScheduling.SharedSlotPool it returns the pool's per-slot serving window, so components such as TextExtraction and DocumentSplitting no longer reject documents the pool would have served.
  • Measured context sizing now survives architectures with non-monotonic memory curves (for example hybrid-recurrent models such as IBM Granite 4.0-H): previously such models fell back to a formula that overpriced them by more than an order of magnitude and shrank context recommendations to the floor.

API Changes

  • Configuration.InferenceMemoryRatio replaces Configuration.MaxCachedContextMemoryRatio (now obsolete): one per-device budget for standing inference state (slot pools and cached contexts together).

Version 2026.7.4 (22 July 2026)

New Features

  • PDF redaction (LMKit.Document.Pdf.PdfRedactor): permanently removes content from PDFs (text, image pixels, vector graphics, annotations) by search term, page area, or /Redact annotation. Removed content is unrecoverable.
  • Smart redaction: on-device PII detection (LMKit.TextAnalysis.PiiExtraction) combined with PdfRedactor to detect, review, and permanently remove sensitive data. New smart_pii_redaction sample.
  • Added Windows Icon (ICO / CUR) image decoding
  • Added AVIF (AV1 image) decoding
  • Embedding provider abstraction (LMKit.Abstractions.IEmbedder): pluggable embedding backends across RAG and other consumers, with EmbedderBase for custom providers. The LM-based RagEngine constructors are now obsolete; wrap a local model with new Embedder(model).
  • Amazon Bedrock embeddings (LMKit.Integrations.Aws.Embeddings.BedrockEmbedder): Amazon Titan and Cohere embedding models via AWS Bedrock as an IEmbedder.
  • Microsoft.Extensions.AI embeddings: use any IEmbeddingGenerator as an IEmbedder via ExtensionsAIEmbedder / AsEmbedder().

Version 2026.7.3 (17 July 2026)

New Features

  • Added support for the Microsoft Harrier OSS embedding model
  • Added model card for harrier-oss:0.6b

Bug Fixes

  • Fixed a fatal process crash when undisposed PdfChat instances were garbage collected

Version 2026.7.2 (09 July 2026)

New Features

  • PDF to PDF/A conversion (LMKit.Document.Pdf.PdfAConverter): converts existing PDFs to PDF/A-1b, 2b or 3b (ISO 19005).
  • Semantic chunk quality gate (LMKit.Retrieval.ChunkQuality): new public SemanticChunkQualityGate scores chunks before embedding generation with rejection support.

Version 2026.7.1 (01 July 2026)

Improvements

  • Inference speed improvements
  • Improved Document to Markdown converter accuracy and speed
  • Improved Categorization engine with EML files

Version 2026.6.4 (22 June 2026)

Improvements

  • Context hibernation improvements
  • Inference speed improvements
  • Added KV Cache quantization support Introduced new property 'Configuration.EnableKVCacheQuantization'

Version 2026.6.3 (15 June 2026)

Improvements

  • Inference speed improvements
  • Improved overall extraction accuracy

Version 2026.6.2 (09 June 2026)

Improvements

  • Inference speed improvements with structured content extraction with MTP and draft models

Version 2026.6.2 (08 June 2026)

New Features

  • Added model card for gemma4:12b: Google Gemma 4 11.9B dense model with 256K context, hybrid sliding/global attention, vision, tool calling, math, coding, and reasoning support. gemma4:12b is now the replacement model for the deprecated gemma3:12b.
  • Added draft model support Introduced new property 'LM.DraftModel'

Improvements

  • Inference speed improvements

Version 2026.5.6 (31 May 2026)

New Features

  • Added model card for paddleocr-vl-1.6:0.9b: PaddleOCR-VL 1.6, an ultra-compact 0.9B vision-language model for document parsing (OCR, tables, formulas, charts, text spotting, seals, layout analysis), reaching 96.33% on OmniDocBench v1.6 (state of the art). Architecturally compatible with 1.5 for drop-in migration. The paddleocr-vl:0.9b model card is now deprecated in favor of paddleocr-vl-1.6:0.9b.
  • Added PostgreSQL pgvector integration (LM-Kit.NET.Data.Connectors.PgVector): a new PgVectorEmbeddingStore that implements IVectorStore on top of PostgreSQL with the pgvector extension, joining the existing Qdrant connector as a backend for embedding storage, semantic memory, and RAG. Each collection maps to a table (id text primary key, embedding vector(N), metadata jsonb); similarity search uses cosine distance (<=>) and returns cosine-similarity scores. The store is thread-safe (pooled NpgsqlDataSource) and can be constructed from a connection string or an existing data source, with an optional schema. A static PgVectorEmbeddingStore.EnsureDatabaseExistsAsync(...) helper creates the target database on demand, and the connector auto-provisions the vector extension, schema, tables, and metadata indexes on first use.

Version 2026.5.5 (28 May 2026)

New Features

  • Context hibernation policy (HibernationMode, IKVCache, Configuration, MultiTurnConversation, PdfChat, RagChat, AgentExecutor): new HibernationMode enum (Auto, None, Forced), per-conversation IKVCache.HibernationMode get/set property on every multi-turn conversation type, and a process-wide Configuration.DefaultContextHibernationMode that seeds the value on every new conversation. In Forced mode the runtime hibernates the KV-cache to disk in the background at the end of every turn; the caller returns immediately and the next turn rehydrates transparently. None keeps the context resident. Auto is the default, reserved for runtime-driven heuristics, and currently behaves like None.

Version 2026.5.4 (24 May 2026)

New Features

  • Stream-based model loading (LMKit.Model): new LM(Stream) loads GGUF and LMK archives from a stream; LM.LoadEncryptedFromStream(...) does the same for encrypted GGUF (.lmke). No on-disk extraction.
  • Markdown attachment support (LMKit.Data.Attachment): .md / .markdown files are now recognized as plain-text attachments (text/markdown), handled identically to .txt end to end.
  • Multi-Token Prediction (MTP) self-speculative decoding: a new generation accelerator for models trained with MTP heads. MTP runs a lightweight in-model draft head to propose several tokens per main-model forward pass and verifies them in a single batched decode, delivering ~2× generation throughput with no accuracy loss. Lossless under greedy decoding and a zero-cost no-op on checkpoints without MTP heads. See the glossary entry for the full primer. New public surface:
    • LM.LoadingOptions.EnableMultiTokenPrediction (bool, default true): controls whether MTP head tensors are loaded into VRAM at model load time. Set to false to skip the heads and save a few hundred MiB to ~1 GiB of VRAM when you know you will not use MTP on this LM instance.
    • LM.HasMultiTokenPrediction (bool): runtime capability check: true when the loaded model declares MTP heads and they were loaded.

Improvements

  • Improved translation, text rewriting, and text correction engines (LMKit.Translation, LMKit.TextGeneration): higher output quality, better fidelity to the source text, and improved handling of long-form inputs across the TextTranslation, TextRewriting, and TextCorrection pipelines.
  • Broader GPU coverage in the Vulkan backend: the Vulkan runtime now detects and offloads onto a wider range of GPUs, including additional integrated and discrete devices that previously fell back to CPU. Improves performance on mixed-vendor fleets and on machines without CUDA-capable hardware.

Version 2026.5.3 (18 May 2026)

New Features

  • Added Windows ARM64 platform support: LM-Kit.NET now ships native binaries for Windows ARM64 alongside the existing Windows x64, Linux x64, Linux ARM64, and macOS Universal targets. Covers Snapdragon X / Copilot+ PCs, Surface Pro X / Surface Pro 9 (5G), Windows Dev Kit 2023, and other Qualcomm-powered Windows 11 devices. The base LM-Kit.NET package now contains a runtimes/win-arm64/native/ folder with the default CPU (ARM Neon) and Vulkan backends (Qualcomm Adreno acceleration via Vulkan), plus pdfium and onnxruntime. dotnet publish -r win-arm64 produces a fully working self-contained build.
  • Added CUDA 13 backend for Linux x64 (LM-Kit.NET.Backend.Cuda13.Linux): NVIDIA GPU acceleration on Linux x64 using CUDA 13.x drivers. Requires the CUDA 13 Toolkit runtime libraries to be installed on the host. Closes the gap left by previously shipping CUDA 13 only on Windows x64.
  • Added CUDA 13 backend for Linux ARM64 (LM-Kit.NET.Backend.Cuda13.linux-arm64): NVIDIA GPU acceleration for ARM64 Linux systems, including Jetson Orin / Thor and Grace Hopper / Grace Blackwell.

Improvements

  • Inference speed improvements

Version 2026.5.2 (10 May 2026)

New Features

  • Added model cards for Qwen 3.6 family: qwen3.6:27b (27B dense hybrid Gated DeltaNet + Gated Attention model, 64 blocks) and qwen3.6:35b-a3b (35B MoE, 3B active, 256 experts with 8 routed plus 1 shared, 40 blocks). Both support chat, vision, tool calling, code completion, math, and OCR with a native 262K context window extensible to 1M tokens via YaRN. The qwen3.5:27b and qwen3.5:35b-a3b model cards are now deprecated in favor of qwen3.6:27b and qwen3.6:35b-a3b respectively.
  • Added OpenTelemetry-compatible distributed tracing (LMKit.Agents.Observability.AgentDiagnostics): a new ActivitySource named LMKit.Agents emits spans for every orchestration run (orchestration.execute), every per-agent invocation (agent.execute), and every delegation (agent.delegate), with stable tag names (agent.name, orchestrator.name, orchestration.step, agent.planning_strategy, agent.status, agent.inference_count, delegation.from, delegation.to). Subscribe via OpenTelemetry.Trace.TracerProviderBuilder.AddSource(AgentDiagnostics.SourceName) or a standard System.Diagnostics.ActivityListener. Independent of and complementary to the existing IAgentTracer system.
  • Added graph-based orchestration composition (LMKit.Agents.Orchestration.Nodes): new IOrchestrationNode contract with composable primitives - AgentNode, SequentialNode, ParallelNode, ConditionalNode - and a GraphOrchestrator host. Build arbitrary orchestration shapes (e.g., a parallel block of pipelines feeding into a conditional router) without writing a custom orchestrator class. The prebuilt PipelineOrchestrator / ParallelOrchestrator / RouterOrchestrator / SupervisorOrchestrator remain available as named facades.
  • Added OrchestrationOptions.ReasoningLevel (LMKit.Agents.Orchestration): orchestration-wide override propagated to every agent in the orchestration, including delegated workers in SupervisorOrchestrator. Set to ReasoningLevel.None to disable model-internal <think> emission across the whole graph (e.g. fast classification pipelines on thinking-capable models).
  • Added AgentExecutionOptions.ReasoningLevel (LMKit.Agents): per-call override for an agent's model-internal reasoning level.
  • Added TextGenerationResult.Content (LMKit.TextGeneration): user-visible portion of the assistant turn, reconstructed from the runtime's segment classification with <think> reasoning blocks excluded. Completion continues to expose the full text including reasoning.

Improvements

  • SupervisorOrchestrator propagates orchestration options to delegated workers: workers invoked through delegate_to_agent now respect the orchestration's MaxCompletionTokens, SamplingMode, MaxIterations, ReasoningLevel, and AgentTimeout. Previously workers ran with their own defaults regardless of the supervisor's options.
  • Thread-safe registries (LMKit.Agents.Tools.ToolRegistry, LMKit.Agents.AgentRegistry): registration, lookup, removal, and iteration are now safe to call concurrently.
  • OrchestrationContext is parallel-safe (LMKit.Agents.Orchestration): AddResult, AddTrace, SetState, and stop-signaling properties (ShouldStop, StopReason) are correctness-safe under concurrent agent execution from ParallelOrchestrator and graph ParallelNode.
  • Channel-based streaming (LMKit.Agents.Orchestration.Streaming): IOrchestrator.StreamAsync no longer polls; tokens flow as soon as the model emits them. Slow IOrchestrationStreamHandler.OnTokenAsync callbacks no longer block the inference thread.

Breaking Changes

  • Removed AgentExecutor.DefaultOptions (LMKit.Agents): the public mutable property is gone. Pass AgentExecutionOptions per call to Execute / ExecuteAsync instead.
  • AgentExecutionOptions.Default returns a fresh instance per access (LMKit.Agents): previously a shared mutable singleton. Code that read values is unaffected; code that mutated AgentExecutionOptions.Default.X = Y to set process-wide defaults must build options per call.

Version 2026.5.1 (06 May 2026)

New Features

  • Extended encrypted GGUF support to metadata-only scenarios (LMKit.Cryptography, LMKit.Model, LMKit.Hardware): LM.LoadEncrypted now honors LoadingOptions.LoadTensors = false, mirroring the plaintext metadata-only path - only the metadata block is decrypted, no tensor bytes are read, and the resulting LM exposes architecture, vocabulary, context length, layer count, and other GGUF metadata. Use this for fast catalog inspection or pre-flight checks on protected .lmke containers.
  • Added MemoryEstimation.FitParameters overload for encrypted containers (LMKit.Hardware): new FitParameters(string encryptedPath, GgufEncryptionScheme scheme, string password, ...) runs the native fit estimator against an encrypted GGUF without ever materializing tensor bytes; the existing FitParameters(LM model, ...) overload also now works on models loaded via LM.LoadEncrypted and reuses the metadata cached at load time, so callers do not need to re-supply the password. Tensor data is never decrypted during estimation.
  • Added LM.IsEncrypted property (LMKit.Model): true when the instance was loaded via LM.LoadEncrypted. Lets downstream code branch on encryption state without inspecting the file path.
  • Added LM.DeviceConfiguration.AutoFitToVram property (LMKit.Model): controls whether the model loader automatically retries with progressively fewer GPU layers when the first load attempt fails because the model does not fit in available VRAM. Default is true. When enabled, the runtime walks GpuLayerCount down - placing the remaining layers in system memory - until the model loads or the entire model is on CPU. Set to false to restore the previous behavior of failing loud on insufficient VRAM.

Improvements

  • Inference speed improvements
  • Automatic partial CPU offload on VRAM exhaustion (LMKit.Model): when a model load fails because the model does not fit in the GPU's available VRAM, the loader now automatically retries with progressively fewer GPU layers - placing the remaining layers in system memory - until the model loads or the entire model is on CPU. Replaces the previous behavior where insufficient VRAM produced an immediate exception. The fallback is gated by the new DeviceConfiguration.AutoFitToVram flag (default true); set it to false to restore the previous fail-loud behavior.
  • Pre-flight context-size sizing for tight VRAM (LMKit.Model, LMKit.TextGeneration): before allocating a new inference context, the runtime now estimates the KV-cache and compute-buffer cost for the requested context size and compares it to the device's currently free VRAM. If the projection exceeds free memory, the context size is reduced up-front, avoiding a doomed allocation attempt. On an actual allocation failure during creation, the runtime additionally retries with progressively smaller context sizes before throwing.
  • Sharper diagnostics on context-creation failure (LMKit.Exceptions): when the runtime cannot allocate an inference context even after its built-in retries, the thrown RuntimeException now includes the device's free VRAM at failure time and a hint to either set DeviceConfiguration.GpuLayerCount = 0 for CPU-only loading or shrink the requested context size.

Breaking Changes

  • Removed the experimental LM.DeviceConfiguration.ForceCpuMode property (LMKit.Model): functionally duplicated by setting GpuLayerCount = 0, which routes the entire model and KV cache to system memory. Callers who set ForceCpuMode = true should set GpuLayerCount = 0 instead.

Version 2026.4.4 (23 April 2026)

New Features

  • Introduced IKVCache public interface (LMKit.Inference): exposes residency, warmup, and hibernation capabilities on objects that own an inference KV-cache. Implemented by MultiTurnConversation, PdfChat, RagChat, and AgentExecutor (cast the instance to IKVCache to access). Members: KVCacheContent (textual projection of the cache), Residency (current ContextResidency), Warmup() (eagerly initializes the context or rehydrates it from disk so the first user-facing call is not penalized by lazy allocation), and HibernateAsync(string filePath = null) which serializes the full context state to disk, frees the in-memory handle, and rehydrates transparently on the next inference call. Background hibernation requests are coalesced and deferred while the context is actively in use.
  • Added ContextResidency enumeration (LMKit.Inference): lifecycle state of an inference context - NotCreated, InMemory, or Hibernated. Exposed via IKVCache.Residency.
  • Added ContextHibernationDirectory property to Configuration (LMKit.Global): folder used for auto-generated hibernation files when IKVCache.HibernateAsync is called without an explicit path. Defaults to the system temp folder (Path.GetTempPath()); the setter auto-creates the directory if it does not exist and throws ArgumentException on null/empty input.
  • Added the Markdown member to the TextOutputMode enumeration
  • Introduced DocumentToMarkdownConverter (LMKit.Document.Conversion): end-to-end document → Markdown pipeline built for LLM ingestion. Accepts the full range of LM-Kit input modes (file path, byte[] + file name, Stream + file name, ImageBuffer, Uri, and pre-built Attachment) and exposes matching Convert / ConvertAsync overloads along with ConvertToFile / ConvertToFileAsync variants that write the Markdown directly to disk. Supports per-page observability and cancellation through the PageStarting and PageCompleted events.
  • Added DocumentToMarkdownStrategy enumeration (LMKit.Document.Conversion): selects how each page is converted. TextExtraction uses the embedded text layer (fast, no model required); VlmOcr rasterizes each page and transcribes it with a vision-language model; Hybrid applies a per-page decision, keeping born-digital pages on the text path while routing scanned pages through vision OCR; Auto resolves to the best available strategy based on the input and on whether a vision model is configured.
  • Added DocumentToMarkdownOptions (LMKit.Document.Conversion): exposes the full configuration surface of the converter, including strategy selection, 1-based PageRange filtering, TextOutputMode for the text-extraction path, VLM OCR tuning (VlmImageDetail, VlmMaximumCompletionTokens, VlmStripImageMarkup, VlmStripStyleAttributes), the hybrid HybridMinTextLength threshold, output shaping (IncludePageSeparators, PageSeparatorFormat, EmitFrontMatter, NormalizeWhitespace), and forwarded DOCX/EML options.
  • Added DocumentToMarkdownResult and DocumentToMarkdownPageResult (LMKit.Document.Conversion): carry the aggregated Markdown, per-page diagnostics (StrategyUsed, Elapsed, GeneratedTokenCount, QualityScore, Warning), requested vs. effective strategy, source name, and total elapsed time.
  • Added DocumentConversionPageStartingEventArgs and DocumentConversionPageCompletedEventArgs (LMKit.Document.Conversion): event payloads for the converter's page-level lifecycle, exposing PageIndex/PageNumber/PageCount, SourceName, PlannedStrategy, a Cancel flag, and the PageResult/Exception captured for each page.
  • Added encrypted GGUF model loading (LMKit.Cryptography, LMKit.Model): new static LM.LoadEncrypted(string path, GgufEncryptionScheme scheme, string password, ...) factory loads a GGUF model from an LM-Kit encrypted container, decrypting tensor bytes on the fly from disk. The plaintext GGUF is never materialized in memory nor written back to disk: only the metadata block (a few MB) plus one tensor's worth of bytes at a time are ever decrypted. Intended for commercial deployments that need to protect model-file copyright on-device.
  • Added EncryptedGguf static helper (LMKit.Cryptography): EncryptedGguf.Encrypt(plaintextGguf, outputLmke, scheme, password) streams a plaintext GGUF through AES-256-CTR (PBKDF2-HMAC-SHA256 key derivation, 100k iterations) into an .lmke container. EncryptedGguf.Reader.Open(path, password) exposes seekable, per-range decrypted reads for advanced scenarios.
  • Added GgufEncryptionScheme enumeration (LMKit.Cryptography): lists supported schemes. Ships with AesCtr256 (seekable stream cipher required for per-tensor decryption during load). The design leaves room to add authenticated variants in future releases.
  • Added demo encrypted_model_loading (demos/console_net): end-to-end walkthrough that downloads a small model from the LM-Kit catalog, encrypts it to an .lmke container, loads it via LM.LoadEncrypted, and drives a multi-turn chat.

Version 2026.4.3 (17 April 2026)

New Features

  • Added ImageDetail property to IConversation and VlmOcr (LMKit.TextGeneration, LMKit.Extraction.Ocr): controls the pixel budget used when processing images for vision models. Accepts a member of the ImageDetail enumeration (Minimal, Low, Standard, High, Maximal). Default is High. Available on MultiTurnConversation, SingleTurnConversation, AgentExecutor, RagChat, PdfChat, and VlmOcr.

  • Added TranslationProgress event to TextTranslation (LMKit.Translation): reports chunk-level progress (ChunkIndex, TotalChunks, TranslatedChunk) during text translation, with a Stop flag to abort remaining chunks

  • Added model card for gemma4:31b: Google Gemma 4 31B dense model with 256K context, hybrid sliding/global attention, vision, tool calling, and reasoning support

  • Added session persistence to PdfChat (LMKit.Retrieval): SaveSession() and SaveSession(string) serialize the full conversation state, loaded documents, passage retrieval indices, and configuration. Restore via new PdfChat(chatModel, embeddingModel, sessionData) or the file path overload.

  • Added SkipThinking flag to AfterTextCompletionEventArgs (LMKit.TextGeneration.Events): when set during an InternalReasoning segment, the model immediately ends its thinking phase and begins generating the user-visible answer. The thinking suffix tokens are injected automatically.

  • Changed default MaximumCompletionTokens from 2048 to -1 (unlimited): applies to MultiTurnConversation, SingleTurnConversation, PdfChat, RagChat, and AgentExecutionOptions. Set a positive value to restore a cap.

  • Added delegation events on SupervisorOrchestrator (LMKit.Agents.Orchestration): BeforeDelegation, AfterDelegation, and WorkerTextCompletion events let consumers observe the delegation lifecycle and stream worker text directly from the orchestrator, without reaching into Agent.EnableDelegation() or the internal DelegateTool. Events fire in both streaming and non-streaming orchestration.

Improvements

  • Inference speed improvements
  • Improved text translation quality
  • Improved text rewriting quality
  • Improved Gemma Translate support

Breaking Changes

  • AfterTextCompletion delegate signature changed: added ref bool skipThinking parameter. Callers implementing the ModelController.AfterTextCompletion delegate must update their signatures.
  • TextTranslation.AfterTextCompletion event removed: replaced by TranslationProgress. Migrate from AfterTextCompletionEventArgs.Text to TranslationProgressEventArgs.TranslatedChunk.

Bug Fixes

  • SupervisorOrchestrator now emits OrchestrationStreamTokenType.Delegation tokens (LMKit.Agents.Orchestration): when the supervisor delegates to a worker via the delegate_to_agent tool, streaming consumers now receive a typed Delegation token (with from_agent, to_agent, and task metadata) immediately before the worker's AgentStarted token. Previously this token type was defined but never emitted, forcing UI code to infer delegation by parsing ToolCall metadata.
  • Agent.EnableDelegation() is now idempotent (LMKit.Agents): repeated calls return the same DelegateTool instance instead of constructing a new one and overwriting the prior registration. BeforeDelegation, AfterDelegation, and AfterTextCompletion handlers subscribed before wrapping the agent in a SupervisorOrchestrator now fire reliably during orchestration. Added DelegateTool.ToolName constant ("delegate_to_agent") for registry lookups.

Version 2026.4.2 (10 April 2026)

New Features

  • Added thinking mode support for Gemma 4 models (E2B, E4B, 26B)

Bug Fixes

  • Added per-request language and orientation detection to PDF OCR: OcrParameters, PdfSearchableMakerOptions, and PdfGenerationOptions now accept optional Languages and EnableOrientationDetection overrides. The PDF OCR server endpoint exposes languages and detect_orientation fields.
  • Orchestration streaming now emits Thinking tokens for internal reasoning segments

Version 2026.4.1 (04 April 2026)

New Features

  • Added model cards for gemma4:e2b, gemma4:e4b, and gemma4:26b-a4b: Google Gemma 4 multimodal Mixture-of-Experts models with vision and tool calling support

Improvements

  • Inference speed improvements
  • Improved overall extraction accuracy

Version 2026.3.5 (28 March 2026)

New Features

  • Added model cards for translategemma3:4b and translategemma3:12b: Google TranslateGemma 3 open translation models built on Gemma 3, supporting 55 languages with text and image inputs
  • Added Translation model capability (ModelCapabilities.Translation): new flag identifying models specifically trained for multilingual translation
  • Added model card for nemotron3-nano:4b: NVIDIA Nemotron 3 Nano 4B, an edge-ready hybrid Mamba-2/Transformer model (3.97B parameters) with 262K context, supporting reasoning, agentic tasks, math, code, and tool calling

Improvements

  • Inference speed improvements

Version 2026.4.1 (24 March 2026)

Improvements

  • Inference speed improvements
  • Improved overall extraction accuracy

Version 2026.3.3 (09 March 2026)

New Features

  • Added Embedder.GetQueryEmbeddings and Embedder.GetQueryEmbeddingsAsync (LMKit.Embeddings): compute embeddings with model-specific query instruction prefixes applied. Modern embedding models (Qwen3 Embedding, Nomic Embed, BGE v1.5) are trained with asymmetric prefixes for queries versus passages; these methods apply the correct prefix automatically based on the loaded model's architecture.
  • Automatic query instruction prefix in RAG retrieval: RagEngine.FindMatchingPartitions and FindMatchingPartitionsAsync now apply the model's query instruction prefix when embedding search queries, improving retrieval recall without any code changes.

Version 2026.3.2 (08 March 2026)

New Features

  • Added model cards for qwen3-coder:30b-a3b and lightonocr-2-bbox:1b
  • Added SearchHighlightEngine (LMKit.Document.Search): searches text in paginated documents (PDF or image) and produces a highlighted copy. Supports exact, regex, and fuzzy (Damerau-Levenshtein) matching. Accepts optional pre-computed PageElement instances for raster PDFs or images.
  • Added SearchHighlightOptions, SearchHighlightResult, HighlightAppearance, and SearchMode enum (LMKit.Document.Search)
  • Added pdf_search_highlight built-in tool: searches text in a PDF and saves a highlighted copy with matches visually marked
  • Added LM.TensorOverride (LMKit.Model): enables fine-grained control over tensor device placement via regex pattern matching, particularly useful for offloading MoE (Mixture of Experts) expert weights to CPU while keeping attention layers on GPU. Includes factory methods TensorOverride.Cpu(pattern) and TensorOverride.Gpu(pattern, gpuIndex).
  • Added LM.DeviceConfiguration.TensorOverrides property to configure per-tensor device placement at model load time
  • Automatic memory extraction in MultiTurnConversation (LMKit.TextGeneration): when AgentMemory.ExtractionMode is set to LlmBased, conversations now automatically extract and store facts after each turn. Previously, automatic extraction only worked through the Agent pipeline. This enables memory extraction for RagChat, PdfChat, and direct MultiTurnConversation usage.

Improvements

  • Inference speed improvements

Version 2026.3.1 (03 March 2026)

New Features

  • Added model cards for qwen3.5:0.8b, qwen3.5:2b, qwen3.5:4b and qwen3.5:9b

Version 2026.2.11 (28 February 2026)

New Features

  • Added model card for glm-4.6v-flash
  • Added model card for glm-ocr: Z.ai GLM-OCR 0.9B vision-language model specialized in document parsing, OCR, and structured information extraction

Improvements

  • Improved GLM model support: added ChatGLM3 and ChatGLM4 template formats with proper token handling and tool calling support

Version 2026.2.10 (25 February 2026)

New Features

  • Added model cards for Qwen 3.5 family: qwen3.5:27b (27B dense hybrid GDN model) and qwen3.5:35b-a3b (35B MoE, 3B active). Both support chat, vision, tool calling, code completion, math, and OCR with a native 262K context window. The qwen3-vl:30b model card is now deprecated in favor of qwen3.5:35b-a3b.
  • Introduced RagChat (LMKit.Retrieval): a turnkey multi-turn conversational RAG class that wraps a user-managed RagEngine with an internal MultiTurnConversation. Implements IMultiTurnConversation and orchestrates query contextualization, retrieval dispatch, prompt construction, and grounded response generation in a single call. Supports all four QueryGenerationMode strategies, tools, skills, and agent memory.
  • Introduced RagQueryResult (LMKit.Retrieval): return type for RagChat.Submit/SubmitAsync, exposing the generated TextGenerationResult alongside the IReadOnlyList<PartitionSimilarity> used as context.
  • Introduced RetrievalCompletedEventArgs (LMKit.Retrieval.Events): event arguments for the RagChat.RetrievalCompleted event, providing the retrieval query, matched partitions, requested count, and elapsed time.
  • Introduced RetrievalDefaults (LMKit.Retrieval): a static class centralizing default constants for the retrieval subsystem (e.g. MinRelevanceScore), used consistently by RagChat, PdfChat, RagEngine, and VectorSearch.
  • Added advanced query generation strategies for RAG (QueryGenerationMode on PdfChat and RagChat):
    • Contextual: follow-up questions are automatically reformulated into self-contained queries before retrieval, configurable via QueryContextualizationOptions
    • MultiQuery: generates multiple query variants and merges results using Reciprocal Rank Fusion for improved recall, configurable via MultiQueryOptions
    • HypotheticalAnswer: generates a hypothetical answer and uses it as the retrieval query, bridging the gap between question and document phrasing, configurable via HydeOptions
  • Added Maximal Marginal Relevance (MMR) diversity filtering (MmrLambda on RagEngine and PdfChat): reduces near-duplicate passages in retrieval results by balancing relevance against diversity
  • Added context window expansion for retrieval results (ContextWindow on RagEngine and PdfChat): automatically includes neighboring partitions around each match, providing the LLM with surrounding context for more accurate answers
  • Added hybrid search with BM25 + vector fusion (IRetrievalStrategy on RagEngine and PdfChat):
    • VectorRetrievalStrategy: semantic similarity via cosine distance on embeddings (default, unchanged behavior)
    • Bm25RetrievalStrategy: BM25+ lexical ranking with configurable term saturation (K1), length normalization (B), long-document floor (Delta), proximity boosting (ProximityWeight), language-aware stopword filtering (Language), and custom stopword support (CustomStopWords)
    • HybridRetrievalStrategy: combines vector and BM25 strategies with weighted Reciprocal Rank Fusion, configurable via VectorWeight, KeywordWeight, and RrfK

Version 2026.2.9 (22 February 2026)

Bug Fixes

  • Fixed JSON serialization and deserialization failures
  • Fixed a critical initialization problem

New Features

  • Added MarkdownToPdf converter (LMKit.Document.Conversion) with full formatting support (headings, bold/italic, code blocks, lists, blockquotes, tables, links, horizontal rules)
  • Added EmlToPdf converter (LMKit.Document.Conversion) with embedded attachment support
  • Added markdown_to_pdf and eml_to_pdf built-in document tools
  • Added support for PaddleOCR VL models
  • Added model card for paddleocr-vl:0.9b
  • Added VlmOcrIntent enum and VlmOcr(LM, VlmOcrIntent) constructor for explicit OCR intent selection (plain text, table, formula, chart, coordinates, seal, Markdown)
  • Added VlmOcr.GetSupportedIntents(LM) to query the intents a model is known to support with dedicated behavior
  • Introduced the Canvas drawing API (LMKit.Graphics.Drawing): a fluent, in-place 2D drawing surface backed by ImageBuffer with coverage-based antialiasing, Pen/Brush styling, and support for lines, rectangles, quadrilaterals, ellipses, polygons, and rounded rectangles

Improvements

  • VLM OCR now provides text location data when the underlying model supports coordinate output (e.g. PaddleOCR-VL with VlmOcrIntent.OcrWithCoordinates). Each recognized text region is returned as a TextElement with a bounding box mapped back to the original source image coordinates.
  • Improved VLM OCR post-processing to adapt output cleanup to the selected intent and model family
  • Added form field rendering support for PDF rasterization, improving extraction accuracy on fillable PDFs

Version 2026.2.6 (19 February 2026)

Filters/middleware pipeline, prompt templates, advanced agent memory, EML/MBOX support.

New Features

  • Added Filters / Middleware Pipeline (LMKit.TextGeneration.Filters) 🔥
    • FilterPipeline with IPromptFilter, ICompletionFilter, and IToolInvocationFilter following the ASP.NET Core middleware (onion) pattern
    • Lambda-friendly API and integration with both MultiTurnConversation and Agent
  • Added Prompt Templates with Logic (LMKit.TextGeneration.Prompts)
    • PromptTemplate class with Mustache syntax, conditionals, loops, filter chaining, custom helpers, and strict mode
  • Added memory capacity limits, eviction policies, and time-decay scoring to AgentMemory
  • Added UserScopedMemory for multi-user memory isolation
  • Added built-in automatic memory extraction to AgentMemory
  • Added memory consolidation via ConsolidateAsync on AgentMemory
  • Added conversation summarization via SummarizeConversationAsync on AgentMemory
  • Added MemoryEstimation static class in LMKit.Hardware for accurate VRAM/context fitting
  • Added EML (email) and MBOX (Unix mailbox) document format support
  • Added embedded attachment extraction for PDF, EML, and MBOX documents

Version 2026.2.5 (16 February 2026)

Tool metadata, permission policies, extraction confidence scores, entity validation, HTML chunking.

New Features

  • Added Markdown conversion public APIs (LMKit.Document.Conversion): Markdown to/from HTML and DOCX
  • Added per-element confidence scores and human verification flag to extraction results
  • Added extraction progress events (ExtractionPhase enum)
  • Added entity auto-detection and validation for extraction results (102 entity kinds with format validators)
  • Added HTML-aware chunking for RAG workflows (HtmlChunking class)
  • Added async PDF splitting and extraction APIs
  • Added pattern-constrained extraction formatting
  • Added standardized tool metadata via IToolMetadata interface
  • Added ToolPermissionPolicy for centralized tool access control with approval workflow support
  • Added pdf_search built-in document tool and reusable PdfSearch API
  • Added filesystem_search and http_download built-in tools

Improvements

  • Improved tool calling reliability across all models
  • Fixed and improved GLM (glm4.7-flash) tool calling support

Breaking Changes

  • Split multi-operation built-in tools into atomic single-operation tools (1 tool = 1 feature)

Version 2026.2.4 (12 February 2026)

PDF split/merge, document splitting, database and spreadsheet tools, Document tool category.

Improvements

  • Improved SupervisorOrchestrator single-pass execution and real-time streaming of worker output
  • Improved DelegateTool to return plain text for verbatim relay

New Features

  • Introduced the PdfSplitter class
  • Introduced the DocumentSplitting class for detecting logical document boundaries
  • Introduced the PdfMerger class
  • Added DatabaseTool, SpreadsheetTool, RssFeedTool, ClipboardTool, and FtpTool to built-in tools
  • Added JPEG output support to PdfToImage and ImageBuffer
  • Introduced the ImageToPdf class
  • Introduced the PdfUnlocker class
  • Added Document category to built-in tools (PDF operations, image preprocessing, content extraction, OCR)

Version 2026.2.3 (09 February 2026)

Improvements

  • Improved skill activations via tools

New Features

  • Added model cards for minicpm-o-45, lightonocr-2:1b and glm4.7-flash
  • Added StripStyleAttributes property to VlmOcr

Version 2026.2.2 (06 February 2026)

Microsoft.Extensions.AI integration, orchestrator streaming, complete MCP protocol support.

Improvements

  • Enhanced telemetry with comprehensive OpenTelemetry GenAI semantic conventions support

New Features

  • Introduced the LM-Kit.NET.Integrations.ExtensionsAI NuGet package for Microsoft.Extensions.AI integration 🔥
    • Implements IChatClient and IEmbeddingGenerator for seamless integration with the Microsoft.Extensions.AI ecosystem
  • Added real-time streaming support for orchestrators
  • Added the ConversationId property to the ChatHistory class
  • Extended MCP client with complete protocol support (sampling, roots, elicitation, progress tracking, cancellation, logging, completions, resource templates, resource subscriptions)

Version 2026.2.1 (02 February 2026)

Improvements

  • Improved ReAct pattern of agents with tools

New Features

  • Added stdio transport support to the MCP client for local MCP servers (Node.js, Python, native executables)

Bug Fixes

  • Boolean type was not correctly handled in TextExtraction

Version 2026.1.5 (31 January 2026)

Comprehensive agent framework: orchestrators, built-in tools, planning, delegation, skills.

Improvements

  • Improved SpeechToText speed and accuracy

New Features

  • Extended the LMKit.Agents namespace with comprehensive agent framework 🔥 (Agent, AgentBuilder, AgentExecutor, AgentRegistry)
  • Introduced the LMKit.Agents.Orchestration namespace 🔥 (PipelineOrchestrator, ParallelOrchestrator, RouterOrchestrator, SupervisorOrchestrator)
  • Introduced the LMKit.Agents.Tools.BuiltIn namespace with built-in tools 🔥 (eight categories: Data, Text, Numeric, Security, Utility, IO, Net, Document)
  • Introduced the LMKit.Agents.Planning namespace (ReActHandler, ChainOfThoughtHandler, TreeOfThoughtHandler, PlanAndExecuteHandler, ReflectionHandler)
  • Introduced the LMKit.Agents.Delegation namespace
  • Introduced the LMKit.Agents.Streaming namespace
  • Introduced the LMKit.Agents.Resilience namespace
  • Introduced the LMKit.Agents.Observability namespace
  • Introduced the LMKit.Agents.Templates namespace (18 pre-built agent templates)
  • Introduced the LMKit.Agents.Skills namespace with Agent Skills Protocol support 🔥
  • Added skills support to the MultiTurnConversation class

Bug Fixes

  • Resolved compilation issue with MAUI for macOS (this time for real)

Version 2026.1.4 (27 January 2026)

Improvements

  • Improved SpeechToText accuracy

New Features

  • Added model cards for whisper-large2 and devstral-small2
  • Introduced the LMKit.Speech.Dictation namespace
  • Added the SuppressHallucinations and SuppressNonSpeechTokens properties to the SpeechToText class

Bug Fixes

  • Resolved compilation issue with MAUI for macOS

Version 2026.1.3 (17 January 2026)

Improvements

  • Improved confidence metrics computation
  • Improved the target language support of the summarizer engine

New Features

  • Introduced the NamedEntityRecognitionTrainingDataset class

Bug Fixes

  • Text attachments were not correctly processed in some tasks

Version 2026.1.2 (11 January 2026)

Improvements

  • General performance enhancements
  • Improved DataSource create and update performance on cloud vector databases (for example Qdrant)
  • Improved error reporting when loading partially corrupted DataSource files
  • Improved the accuracy of the keyword extraction engine

New Features

  • Added the DeleteDocument and DeleteDocumentAsync methods to the DocumentRag class
  • Added AddDataSource and AddDataSourceAsync overloads to the RagEngine class that load an existing DataSource from a vector store
  • Added LoadWarnings and HasLoadWarnings properties to the DataSource class for inspecting sections that could not be read during partial loading
  • Introduced the LoadWarning class
  • Added model cards for nemotron3-nano and falcon-h1r:7b
  • Added support for the LMKIT_MODELS_DIR environment variable to configure the default model storage directory

Version 2026.1.1 (04 January 2026)

DocumentRag, PdfChat, chunking, telemetry, PDF format support, Attachment async APIs.

Improvements

  • General performance enhancements
  • Improved speed and accuracy of the VlmOcr engine
  • Improved speed of the SpeechToText engine
  • Improved observability with OpenTelemetry GenAI instrumentation

New Features

  • Added the ModelID property to the LM class
  • Added PromptTokenCount and PromptProcessingRate properties to the TextGenerationResult class
  • Added the GeneratedTokenCount property to the TextGenerationResult class
  • Introduced the AttachmentReference class
  • Added GetText and GetTextAsync overloads to the Attachment class that take a page range as a parameter
  • Added the Structured and Auto members to the TextOutputMode enumeration
  • Added SetText overloads to the Attachment class that accept a page index
  • Added URI constructor and CreateFromUriAsync factory method to the Attachment class for loading attachments from remote URIs
  • Added CreateFromFileAsync and CreateFromStreamAsync factory methods to the Attachment class for asynchronous loading
  • Added HasTextOnPage and HasTextOnPageAsync methods to the Attachment class
  • Added support for the PDF format
  • Introduced the IMultiTurnConversation enumeration
  • Introduced the FileSystemVectorStore class
  • Introduced the IChunking interface
  • Introduced the MarkdownChunking class
  • Added QueryPartitions and QueryPartitionsAsync overloads to RagEngine that accept a custom prompt template
  • Introduced the DocumentRag class
  • Introduced the PdfChat class
  • Introduced the DocumentReference class
  • Introduced the DocumentIndexingResult class
  • Introduced the DocumentImportProgressEventArgs class
  • Introduced the CacheAccessedEventArgs class
  • Introduced the PassageRetrievalCompletedEventArgs class
  • Introduced the ResponseGenerationStartedEventArgs class
  • Introduced the DocumentImportPhase enumeration
  • Introduced the DocumentQueryResult class
  • Introduced the PageProcessingMode class
  • Added the MaximumCompletionTokens and StripImageMarkup properties to the VlmOcr class
  • Added SetContent overloads to the TextExtraction class that accept a page index or a page range
  • Introduced the LMKitTelemetry class

Breaking changes

  • Removed the Prompt class, use ChatHistory.Message instead

2025

Version 2025.12.4 (13 December 2025)

Improvements

  • General performance enhancements
  • Improved task accuracy with Ministral models
  • Improved accuracy of the VlmOcr engine

Bug Fixes

  • Fixed unsupported Unicode characters in TextExtractionElement.Name

Version 2025.12.2 (08 December 2025)

Improvements

  • General performance enhancements
  • Voice activity detection accuracy improvements
  • Embedding performance enhancements

New Features

  • Introduced the VlmOcr class
  • Added support for LightOnOCR model
  • Added model cards for qwen3-vl:30b and lightonocr1025:1b

Version 2025.12.1 (03 December 2025)

Improvements

  • General performance enhancements

New Features

  • Added Message constructor overloads taking attachment as parameter
  • Added Expand method overload to the Rectangle class, allowing asymmetric expansion on each side
  • Added support for Ministral V3 models
  • Added model cards for ministral3:3b, ministral3:8b, and ministral3:14b

Version 2025.12.1 (22 November 2025)

Improvements

  • General performance enhancements
  • Faster Vulkan backend

New Features

  • Added support for Qwen3 embedding models
  • Added model cards for qwen3-embedding:0.6b, qwen3-embedding:4b, and qwen3-embedding:8b

Version 2025.11.2 (12 November 2025)

Improvements

  • General performance enhancements

New Features

  • Added a native assembly targeting .NET 10

Version 2025.11.1 (05 November 2025)

Improvements

  • General performance enhancements
  • Improved the summarizer engine

New Features

  • Added model cards for qwen3-vl:2b, qwen3-vl:4b, and qwen3-vl:8b

Version 2025.10.5 (24 October 2025)

Improvements

  • General performance enhancements

New Features

  • Introduced the McpResource class
  • Introduced the McpResourceContent class
  • Introduced the McpPrompt class
  • Introduced the McpPromptArgument class
  • Introduced the McpPromptResult class
  • Introduced the McpMessageRole enumeration
  • Introduced the McpPromptMessage class
  • Introduced the McpPromptContent class
  • Introduced the McpEmbeddedResource class
  • Introduced the McpClientCapabilities and McpServerCapabilities enumerations
  • Introduced the McpCatalogKind enumeration
  • Added the ServerCapabilities, Prompts, Resources, and McpProtocolVersion properties to the McpClient class
  • Added the HasCapability method to the McpClient class
  • Added the ToolsChanged, ResourcesChanged, and PromptsChanged events to the McpClient class
  • Added the GetResources, GetResourcesAsync, ReadResource, and ReadResourceAsync methods to the McpClient class
  • Added the GetPrompts, GetPromptsAsync, RefreshPrompts, and RefreshPromptsAsync methods to the McpClient class
  • Introduced the McpResponseReceivedEventArgs class
  • Introduced the McpRequestSendingEventArgs class
  • Introduced the McpAuthFailedEventArgs class
  • Introduced the McpCatalogChangedEventArgs class
  • Added the ToolsChanged, ResourcesChanged, and PromptsChanged events to the McpClient class

Version 2025.10.4 (16 October 2025)

Improvements

  • General performance enhancements
  • Improved tool calling support
  • Improved Mistral and GptOss models support

New Features

  • Introduced the LMFunctionToolBinder class
  • Introduced the Agent.Tools.LMFunctionAttribute class
  • Added model card for magistral-small1.2
  • Introduced the ReasoningLevel enumeration
  • Added the ReasoningLevel property to the MultiTurnConversation class
  • Introduced the ChatHistory.Message.MessageSegment class
  • Added the Segments property to the ChatHistory.Message class
  • Introduced the EntityAnnotation class
  • Introduced the ExtractionTrainingDataset class
  • Introduced the CategorizationTrainingDataset class
  • Introduced the EmotionDetectionTrainingDataset class
  • Introduced the SarcasmDetectionTrainingDataset class
  • Introduced the SentimentAnalysisTrainingDataset class
  • Introduced the LanguageDetectionTrainingDataset class
  • Introduced the PiiExtractionTrainingDataset class

Version 2025.10.3 (09 October 2025)

Improvements

  • Improved tool calling support
  • Improved MCP client support

New Features

  • Introduced the TextSegmentType enumeration
  • Added the SegmentType property to the AfterTextCompletionEventArgs class

Version 2025.10.2 (06 October 2025)

Improvements

  • General performance enhancements
  • Improved tool calling support
  • Optimized dynamic sampling mechanisms

New Features

  • Added model cards for granite4-h:3b and granite4-h:7b

Version 2025.9.3 (29 September 2025)

Tool calling, MCP client, CUDA 13 backend, fine-tuning export, layout engine.

Improvements

  • General performance enhancements
  • Improved internal paragraph-detection engine, yielding better RAG chunking and higher extraction accuracy
  • Improved PII extraction and NER engines accuracy

New Features

  • Introduced first version of a CUDA 13 backend
  • Introduced the TextRegion class
  • Introduced the TextOutputMode enumeration
  • Added the GetText method to the PageElement class
  • Introduced the ITool class
  • Introduced the ToolRegistry class
  • Introduced the ToolCallPolicy class
  • Introduced the ToolChoice enumeration
  • Introduced the ToolCallResultType enumeration
  • Introduced the ToolCall class
  • Introduced the ToolCallResult class
  • Introduced the MCPTool class
  • Introduced the MCPClient class
  • Introduced the ShareGptExporter class
  • Introduced the LMKit.Finetuning.Export.RoleMappingPolicy enumeration
  • Introduced the LMKit.Finetuning.Export.ExportResult class
  • Introduced the LMKit.Finetuning.Export.ExportProgress class
  • Added the HasTextGeneration property to the LM class
  • Added the HasToolCalls property to the LM class
  • Added the Tools property to the MultiTurnConversation class
  • Added the ToolPolicy property to the MultiTurnConversation class
  • Introduced the AfterToolInvocationEventArgs class
  • Introduced the BeforeToolInvocationEventArgs class
  • Added the BeforeToolInvocation event to the MultiTurnConversation class
  • Added the AfterToolInvocation event to the MultiTurnConversation class
  • Added the Occurrences property to the PiiExtraction.PiiExtractedEntity class
  • Added the Occurrences property to the NamedEntityRecognition.ExtractedEntity class
  • Added the PageElements and PageCount properties to the Attachment class
  • Added the GetPageWidth and GetPageHeight methods to the Attachment class

Version 2025.9.2 (10 September 2025)

Improvements

  • Improved overall extraction accuracy

New Features

  • Introduced the LayoutSearchEngine class
  • Added support for Gemma embedding models
  • Added model card for embeddinggemma-300m

Version 2025.9.1 (09 September 2025)

Improvements

  • Improved overall extraction accuracy

New Features

  • Added the Bounds property to the TextExtractionResultElement class
  • Added the GetValue, TryGetValue, Get, TryGet, and GetAll methods to the TextExtractionResult class
  • Introduced the Rectangle class
  • Introduced the Quadrilateral class
  • Introduced the IBounds, IPoint, ISize, and IVector2D interfaces
  • Introduced the ILayoutElement interface
  • Introduced the ParagraphElement class
  • Introduced the LineElement class
  • Added DetectLines and DetectParagraphs methods to the PageElement class
  • Added the Bounds property to the PageElement class
  • Added TryDetectBorderBackgroundColor, Deskew, CropAuto, IsBlank, ConvertGRAY8, ConvertRGB24, and ConvertRGBA32 methods to the ImageBuffer class
  • Added DOCX, XLSX, and PPTX formats support to the Attachment class
  • Added the Prompt property to the SpeechToText class
  • Added model card for minicpm-v-45

Version 2025.8.4 (22 August 2025)

Improvements

  • General performance enhancements

Version 2025.8.3 (19 August 2025)

Improvements

  • Improved Categorization engine speed and accuracy
  • General performance enhancements

New Features

  • Introduced the ChatTrainingSample class
  • Introduced the TrainingDataset class
  • Added model card for gemma3:270m
  • Added the SchemaDiscovery and SchemaDiscoveryAsync methods to the TextExtraction class
  • Added the HasImageSegmentation property to the LM class
  • Introduced the ImageSegmentation member to the ModelCapabilities enumeration
  • Introduced the BackgroundDetection class
  • Added model card for u2net

Version 2025.8.2 (08 August 2025)

Improvements

  • Optimized dynamic sampling mechanisms
  • Enhanced runtime loading strategy
  • General performance enhancements
  • Improved the summarizer and keyword extraction engines introducing optional target language detection

New Features

  • Introduced the Configuration.FavorDistributedInference property
  • Added TargetLanguage property to the Summarizer class
  • Added TargetLanguage property to the KeywordExtraction class
  • Added RemoveLoraAdapter method to the LM class
  • Added support for OpenAI gpt-oss models
  • Added model card for gptoss:20b

Version 2025.8.2 (02 August 2025)

Improvements

  • Optimized dynamic sampling mechanisms
  • Enhanced runtime loading strategy
  • General performance enhancements

Version 2025.7.5 (25 July 2025)

Improvements

  • Optimized dynamic sampling mechanisms

New Features

  • Introduced the TesseractOcrEngine class

Version 2025.7.4 (17 July 2025)

Improvements

  • Better multi-threading support for multimodal inference

New Features

  • Dynamic LoRA adapter loading support
  • Introduced the LoraAdapter class
  • Introduced the Adapters property to the LM class

Version 2025.7.3 (10 July 2025)

New Features

  • Added support for SmolLM 3 models family
  • Added model card for smollm3:3b
  • Introduced the ExtractionProfiler class

Version 2025.7.2 (7 July 2025)

New Features

  • Added support for linux-arm64 (CPU, Vulkan, and CUDA)

Improvements

  • Optimized dynamic sampling mechanisms

Bug Fixes

  • Fixed a crash that occurred when aborting speech-to-text tasks

Version 2025.7.1 (1 July 2025)

New Features

  • Added LoadAsRGB method overload to the ImageBuffer class taking file path as parameter
  • Added DetectLanguage and DetectLanguageAsync method overload to the TextTranslation class taking an ImageBuffer object as parameter
  • Introduced the VoiceActivityDetection member to the ModelCapabilities enumeration
  • Introduced the SpeechToText.SpeechToTextMode enumeration
  • Introduced the VadSettings class
  • Added Mode property to the SpeechToText class
  • Added EnableVoiceActivityDetection property to the SpeechToText class
  • Introduced the VadSettings property to the SpeechToText class
  • Introduced the SpeechToText.LanguageDetectionResult class
  • Introduced the IsValid static method to the WaveFile class

Version 2025.6.5 (27 June 2025)

Speech-to-text engine, ImageBuffer, WaveFile, audio processing classes.

New Features

  • Added model cards for mistral-small3.2, magistral-small, whisper-tiny, whisper-base, magistral-small, magistral-medium, whisper-large3, and whisper-large-turbo3
  • Added the HasSpeechToText property to the LM class
  • Introduced the SpeechToText member to the ModelCapabilities enumeration
  • Introduced the WaveFile class
  • Introduced the SpeechToText class
  • Introduced the SpeechToText.OnNewSegmentEventArgs class
  • Introduced the SpeechToText.OnProgressEventArgs class
  • Introduced the SpeechToText.TranscriptionResult class
  • Introduced the AudioSegment class
  • Introduced the CorruptedAudioException class
  • Introduced the NotSupportedAudioException class
  • Introduced the ImageBuffer class
  • Introduced the ImagePixelFormat enumeration
  • Added new constructor to the Attachment class to support ImageBuffer input

Improvements

  • Improved overall extraction accuracy

Version 2025.6.4 (19 June 2025)

New Features

  • Added the PageElement property to the OcrResult class
  • Added the Guidance property to the PiiExtraction class
  • Added the Guidance property to the NamedEntityRecognition class

Improvements

  • Minor extraction improvements

Version 2025.6.3 (17 June 2025)

New Features

  • Added the InnerElements property to the TextExtractionResultElement class
  • Introduced the PageElement class
  • Introduced the TextElement class
  • Added SetText method overload to the Attachment class taking PageElement as parameter

Improvements

  • Improved overall extraction accuracy

Bug Fixes

  • Fixed txt file loading issue from the Attachment class

Version 2025.6.2 (10 June 2025)

Named entity recognition, PII extraction, OCR events.

New Features

  • Introduced the NamedEntityRecognition class
  • Introduced the NamedEntityRecognition.EntityDefinition class
  • Introduced the NamedEntityRecognition.ExtractedEntity class
  • Introduced the NamedEntityRecognition.NamedEntityType enumeration
  • Introduced the PiiExtraction class
  • Introduced the PiiExtraction.PiiExtraction class
  • Introduced the PiiExtraction.PiiExtractedEntity class
  • Introduced the PiiExtraction.PiiEntityType enumeration
  • Added the Timeout property to the TextractOcr class
  • Introduced the OcrStartingEventArgs event
  • Introduced the OcrCompletedEventArgs event
  • Added the Id property to the Attachment class
  • Added the ClearContent method to the TextExtraction class
  • Added the InferencePolicies property to the SingleTurnConversation class

Improvements

  • Optimized dynamic sampling mechanisms

Bug Fixes

  • Fixed the Linux runtime, which was not correctly updated in the previous version

Version 2025.6.1 (2 June 2025)

New Features

  • Added support for multimodal classification and extraction
  • Added the Title and Description properties to the TextExtraction class
  • Added the OcrEngine property to the TextExtraction class
  • Added the MaxInputTokens property to the Categorization class
  • Added the HasText property to the Attachment class
  • Added the CreateFromText and DetectMimeType static methods to the Attachment class
  • Added the SetText methods to the Attachment class
  • Added the Path property to the Attachment class
  • Introduced the InferenceModality enumeration
  • Added the PreferredInferenceModality property to the Categorization class
  • Added the PreferredInferenceModality property to the TextExtraction class
  • Introduced the OcrEngine abstract class
  • Introduced the OcrResult class
  • Introduced the OcrParameters class
  • Introduced the TextractOcr class

Improvements

  • Improved overall extraction accuracy
  • Improved Categorization engine speed and accuracy
  • Optimized dynamic sampling mechanisms

Version 2025.5.5 (25 May 2025)

New Features

  • Added model card for qwen2.5-vl:32b
  • Added the TrimStart property to the TextExtractionElementFormat class
  • Added support for more CUDA devices

Improvements

  • Reduced memory usage when handling large context
  • Improved overall extraction accuracy

Version 2025.5.4 (20 May 2025)

Improvements

  • Various speed and memory usage improvements

Bug Fixes

  • Fixed a model-loading issue that occurred under rare conditions

Version 2025.5.3 (20 May 2025)

Improvements

  • Improved overall extraction accuracy
  • Introduced the TextExtractionElementFormat.PredefinedStringFormat enumeration
  • Added the FormatHint property to the TextExtractionElementFormat class
  • Added the IsRequired property to the TextExtractionElementFormat class
  • Added the EnableBackendLogging property to the Runtime class

Version 2025.5.2 (13 May 2025)

Improvements

  • Improved inference on various model families
  • Reduced memory footprint of the built-in vector database engine

New Features

  • Added model cards for bge-m3 and bge-m3-reranker
  • Introduced the Reranker class
  • Introduced the RagEngine.RagReranker class
  • Added the Reranker property to the RagEngine class
  • Added new RagEngine constructor for multimodal RAG
  • Added FindMatchingPartitions and FindMatchingPartitionsAsync method overloads to the RagEngine class taking attachment as parameter
  • Added the DefaultImagePayloadPix property to the RagEngine class
  • Added RerankedScore and RawSimilarity properties to the PartitionSimilarity class
  • Added the PayloadEncoding property to the PartitionSimilarity class
  • Added the NullOnDoubt property to the TextExtraction class
  • Introduced the Partition class
  • Introduced the ImagePartition class
  • Added the Version property to the DataSource class

Version 2025.5.1 (5 May 2025)

Improvements

  • Improved inference of vision models
  • Improved inference of LLama 4 models

New Features

  • Added support for Qwen 2.5 VL and Pixtral model families
  • Added model cards for pixtral, qwen2.5-vl:3b, and qwen2.5-vl:7b

Version 2025.4.13 (30 April 2025)

Improvements

  • Improved translation engine precision with small models

New Features

  • Added model cards for qwen3:0.6b, qwen3:1.7b, qwen3:4b, qwen3:8b, and qwen3:14b
  • Added the DisableReasoning property to the SingleTurnConversation class
  • Added the DisableReasoning property to the MultiTurnConversation class
  • Added the HasReasoningSupport member to the TemplateFormatFlags enumeration
  • Added the HasReasoning property to the LM class

Version 2025.4.12 (27 April 2025)

Bug Fixes

  • Fixed a multi-byte decoding issue in produced model tokens

New Features

  • Added Upsert and UpsertAsync method overloads to the DataSource class taking raw vector as parameter

Version 2025.4.11 (23 April 2025)

Bug Fixes

  • Fixed ONNX runtime loading issue on Linux

New Features

  • Added the DataSource.VectorEntry class
  • Added the Upsert and UpsertAsync method to the DataSource class
  • Introduced the VectorSearch static class

Breaking changes

  • The TextPartitionSimilarity class has been renamed to PartitionSimilarity

Version 2025.4.10 (22 April 2025)

Improvements

  • Optimized dynamic sampling mechanisms

New Features

  • Added support for image embeddings
  • Added support for running inference on ONNX models
  • Added the GetEmbeddings and GetEmbeddingsAsync overloads to the Embedder class to enable embeddings computation from image
  • Added the HasImageEmbeddings property to the LM class
  • Introduced the Summarizer.SummarizationIntent enumeration
  • Added the Summarizer.Intent property to the Summarizer class
  • Added model cards for nomic-embed-vision, granite3.3:2b, and granite3.3:8b

Version 2025.4.9 (15 April 2025)

Improvements

  • Improved translation engine
  • Improved structured text extraction accuracy
  • Improved compatibility with JSON schemas for structured text extraction
  • Improved internal scheduler engine
  • Global speed improvement, up to 20%

New Features

  • Added GetTopCategories, GetTopCategoriesAsync, GetBestCategory, and GetBestCategoryAsync overloads to the Categorization class to specify category descriptions

Version 2025.4.7 (9 April 2025)

New Features

  • Added the HasSection method to the DataSource class

Version 2025.4.6 (9 April 2025)

Built-in vector database engine, file-based DataSource storage.

New Features

  • Introduced a new built-in vector database engine that permits handling small- to medium-sized vector collections on the file system without any dependency
  • Introduced the StorageMode enumeration
  • Added the DataSource.StorageMode property
  • Added the LoadFromFile and LoadFromFileAsync methods to the DataSource class
  • Added the OptimizeDataSource and OptimizeDataSourceAsync methods to the DataSource class
  • Added the CreateFileDataSource, CreateInMemoryDataSource, CreateVectorStoreDataSource, and CreateVectorStoreDataSourceAsync methods to the DataSource class
  • Added the Import method to the RagEngine class
  • Added the ImportAsync method to the RagEngine class
  • Added the DefaultTextChunking property to the RagEngine class

Version 2025.4.1 (2 April 2025)

Improvements

  • Enhanced RagEngine accuracy and speed
  • The RAG engine now supports multiple DataSources simultaneously, each backed by its own storage mode (e.g., one DataSource using in-memory storage and another using a vector database)

New Features

  • Introduced different DataSource storage modes, enabling storage of DataSource content directly in vector databases
  • Introduced a new collection of open-source assemblies to bridge external vector databases with LM-Kit.NET. Currently, Qdrant is supported. Git repository: LM-Kit.NET Data Connectors
  • Introduced the IVectorStore interface
  • Introduced the PointEntry class
  • Added the CollectionChanged event to the MetadataCollection class
  • Added the PropertyChanged event to the MetadataCollection class
  • Added the AddOrReplace method to the MetadataCollection class
  • Added the ImportText, ImportTextAsync, ImportTextFromFile, and ImportTextFromFileAsync overloads to the RagEngine class to specify metadata collection
  • Added the GetSectionByIdentifierAsync method to the DataSource class
  • Added the RemoveSectionAsync method to the DataSource class
  • Added the LoadFromStore and LoadFromStoreAsync methods to the DataSource class
  • Added the Metadata property to the RagEngine.TextPartitionSimilarity class

Version 2025.3.6 (24 March 2025)

Improvements

  • Strong performance improvements for the Vulkan backend
  • Enhanced extraction accuracy in the structured text extraction engine
  • Reduced VRAM/RAM usage

New Features

  • Added support for Mistral Small 3.1 model and added mistral-small-3.1 model card
  • Added the GetText method to the Attachment class
  • Added HTML format support to the Attachment class

Version 2025.3.5 (17 March 2025)

New Features

  • Added the HandleUnknownCategory property to the Categorization class
  • Added support for Gemma 3 vision

Improvements

  • Improved inference with Gemma 3 models family
  • Improved internal context caching strategy
  • Inference speed improvements

Version 2025.3.4 (12 March 2025)

New Features

  • Added support for Gemma 3 models family
  • Added model cards for Qwen QwQ 32B, Gemma 3 1B, Gemma 3 4B, Gemma 3 12B, and Gemma 3 27B
  • Added the Guidance property to the Categorization class

Version 2025.3.3 (11 March 2025)

New Features

  • Added the SetElementsFromJsonScheme method to the TextExtraction class
  • Added the IsVisionRequired property to the Attachment class
  • Added the GetTopCategories and GetTopCategoriesAsync property to the Categorization class
  • Added the GetBestCategoryAsync and GetTopCategoriesAsync overloads to the Categorization class to enable classification from image attachments

Version 2025.3.2 (3 March 2025)

Improvements

  • Improved inference with phi-3 and phi-4 models
  • Reduced CUDA backend size for Windows by a factor of 3

New Features

  • Introduced the MemoryType enumeration
  • Added the SaveInformation overloads to the AgentMemory class to specify the type of memory to record
  • Added the SaveInformationAsync overloads to the AgentMemory class to specify the type of memory to record
  • Added the GetMemoryType static method to the AgentMemory class
  • Added the GetDataSource method to the RagEngine class
  • Added the TryGetDataSource method to the RagEngine class
  • Added the Get method to the MetadataCollection class
  • Added the TryGet method to the MetadataCollection class
  • Added the MemoryType property to the MemoryRecallEventArgs class

Version 2025.3.1 (1 March 2025)

Improvements

  • Improvements to generic classification accuracy and speed

New Features

  • Added the RemoveDataSource overloads to the RagEngine class to remove a DataSource from an identifier
  • Added the RemoveSection method to the DataSource class
  • Added support for Phi-4 Mini models
  • Added model cards for Phi-4 Mini and Deepseek R1

Version 2025.2.4 (26 February 2025)

Improvements

  • Minor performance improvements of the inference system
  • Improved inference with various model families such as Granite, Mistral, Monarch, Orion, MiniCPM, and GigaChat
  • Improved language detection accuracy

New Features

  • Added new constructor to the Attachment class to support stream input
  • Added the ExtractKeywords and ExtractKeywordsAsync overloads to the KeywordExtraction class to extract keywords from image attachments
  • Added the Summarize and SummarizeAsync overloads to the Summarizer class to produce summary from image attachments
  • Added the DetectLanguage and DetectLanguageAsync overloads to the TextTranslation class to detect language from image attachments
  • Introduced the DataFilter class
  • Added the RemoveDataSource overloads to the AgentMemory class to remove a DataSource from an identifier
  • Added the AddDataSource method to the AgentMemory class
  • Added the AddDataSources method to the AgentMemory class
  • Added the Filter property to the RagEngine class
  • Added the Filter property to the AgentMemory class
  • Added support for DeepSeek-R1 models

Version 2025.2.3 (19 February 2025)

Improvements

  • Improved RAG engine accuracy and speed
  • Optimized dynamic sampling mechanisms

New Features

  • Introduced the AgentMemory class
  • Introduced the MemoryRecallEventArgs class
  • Introduced the TopNSigmaSampling class
  • Added the Memory property to the MultiTurnConversation class
  • Added the MaximumRecallTokens property to the MultiTurnConversation class
  • Added the MemoryRecall event to the MultiTurnConversation class
  • Added the DownloadAsync method to the ModelCard class
  • Added the LogCallback event to the Runtime class

Version 2025.2.2 (12 February 2025)

Improvements

  • Improved internal context caching strategy

New Features

  • Added the ModelID property to the ModelCard class
  • Added the GetPredefinedModelCardByModelID method to the ModelCard class
  • Added the LoadFromModelID static method to the LM class
  • Added the ModelUri property to the LM class
  • Added the ImportTextAsync method to the RagEngine class
  • Added the ImportTextFromFileAsync method to the RagEngine class

Version 2025.2.1 (4 February 2025)

Improvements

  • Improved inference of MiniCPM engine

New Features

  • Added model card for Mistral Small Instruct 2501
  • Created a new open-source assembly bridging Microsoft SemanticKernel and LM-Kit.NET. Git repository: LM-Kit.NET Semantic Kernel

Version 2025.1.10 (30 January 2025)

Improvements

  • Added WebP and TIFF image support to Attachment
  • Minor performance improvements of the inference system

Version 2025.1.9 (27 January 2025)

Improvements

  • Enhanced compatibility with Framework 4.6.2 apps
  • Enhanced backend management mechanism

Version 2025.1.8 (26 January 2025)

Improvements

  • Enhanced compatibility with Framework 4.6.2 apps
  • Minor performance improvements for the Vulkan backend

Version 2025.1.7 (24 January 2025)

Improvements

  • Improved speed and accuracy of vision models inference

Bug Fixes

  • Fixed a memory leak during image eval using MiniCPM models

Version 2025.1.6 (22 January 2025)

Improvements

  • Improved speed and accuracy of vision models inference for content retrieval

New Features

  • Added support for the MiniCPM-O model
  • Added the ReplacementModel property to the ModelCard class

Bug Fixes

  • Resolved a crash when regenerating responses using MiniCPM models
  • Fixed a memory leak with VLM disposal

Version 2025.1.4 (19 January 2025)

Bug Fixes

  • Resolved an inference issue in AOT mode
  • Resolved a rare race condition in the Vulkan backend during inference
  • Resolved a segmentation fault in the TextExtraction class

Version 2025.1.3 (18 January 2025)

Improvements

  • Various performance improvements
  • Improved Runtime initialization

New Features

  • Added the SetContent method overload that accepts an Attachment to the TextExtraction class, allowing extraction of unstructured content from images

Bug Fixes

  • Resolved a crash during Qwen2-VL inference on macOS

Version 2025.1.2 (11 January 2025)

First multimodal/VLM support, Attachment class, LMK model format.

Improvements

  • Enhanced GPU device memory management
  • Optimized dynamic sampling mechanisms
  • Various performance improvements

New Features

  • Initial support for multimodal capabilities with vision handling (VLM)
  • Added support for the LMK model format
  • Introduced the Prompt class
  • Introduced the Attachment class
  • Added overloads to the Submit and SubmitAsync methods in the MultiTurnConversation class to support prompts with image attachments
  • Added overloads to the Submit and SubmitAsync methods in the SingleTurnConversation class to support prompts with image attachments

Version 2025.1.1 (1 January 2025)

Improvements

  • Optimized dynamic sampling mechanisms
  • Improved error handling

New Features

  • Added the HasVision property to the LM class
  • Added the EnableModelChecksumValidation property to the Configuration class

2024 (Preview)

Expand 2024 releases (Preview era: July 2024 to December 2024)

Version 2024.12.13 (29 December 2024)

Improvements

  • Optimized dynamic sampling mechanisms
  • Improved performance with IBM Granite models

New Features

  • Added overloads to the GetPerformanceScore methods in the DeviceConfiguration class to obtain the model's performance score from a specified path

Bug Fixes

  • An unhandled exception was raised when a model could not be loaded

Version 2024.12.12 (26 December 2024)

New Features

  • Added the ShortModelName property to the ModelCard class
  • Added the IsPredefined property to the ModelCard class

Improvements

  • The LLM class has been marked as obsolete. Use LM class as its replacement

Bug Fixes

  • GpuDeviceInfo.DeviceType was returning an invalid value

Version 2024.12.11 (23 December 2024)

New Features

  • Added the Architecture property to the ModelCard class
  • Added the GetPerformanceScore method to the DeviceConfiguration class
  • Added support for Llama-3_1-Nemotron-51B and InfiniAI Megrez 3b models

Version 2024.12.10 (22 December 2024)

New Features

  • Added the LocalPath property to the ModelCard class

Improvements

  • Improved performance with Phi 4 model

Version 2024.12.9 (20 December 2024)

New Features

  • Added the ValidateFileChecksum method to the ModelCard class
  • The ModelCard class can now retrieve model metadata directly from Hugging Face servers without downloading the models

Version 2024.12.8 (19 December 2024)

New Features

  • Added the GetDeviceFromNumber method to the GpuDeviceInfo class
  • Added the MaximumContextLength property to the TextExtraction class
  • Added overloads to GetOptimalContextSize methods in the DeviceConfiguration class to obtain the optimal context size from the available resources and model
  • Introduced the ModelCard class
  • Introduced the ModelCapabilities enumeration
  • Added the ModelStorageDirectory property to the Configuration class

Improvements

  • Improved summarization engine

Version 2024.12.7 (15 December 2024)

New Features

  • Introduced the Summarizer.OverflowResolutionStrategy enumeration
  • Introduced the TextShrinkingStrategy enumeration
  • Added the OverflowStrategy property to the Summarizer class
  • Added the TextShrinkingStrategy property to the KeywordExtraction class
  • Introduced the DeviceConfiguration class

Improvements

  • Improved summarization of very large text

Bug Fixes

  • Prevent the MultiTurnConversation class from requesting a context size exceeding the model's capacity

Version 2024.12.6 (13 December 2024)

New Features

  • Introduced the Summarizer class
  • Introduced the Summarizer.SummarizerResult class

Improvements

  • Enhanced MAUI compatibility for macOS development

Version 2024.12.5 (11 December 2024)

New Features

  • Added the ContextRemainingSpace property to the MultiTurnConversation class
  • Added the ContextRemainingSpace property to the AfterTokenSamplingEventArgs class
  • Added the ContextSize property to the AfterTokenSamplingEventArgs class

Version 2024.12.4 (10 December 2024)

Improvements

  • Changed type of ChatHistory.Message.PreviousContent to ChatHistory.Message
  • Improved CPU backend speed on Windows

Version 2024.12.3 (07 December 2024)

Bug Fixes

  • The items in ChatHistory.Message.PreviousContent were not set in the correct order
  • The KeywordExtraction.KeywordCount setter was ignored

Improvements

  • Improved the sampling strategy in scenarios with a low context length

Version 2024.12.2 (07 December 2024)

New Features

  • The Windows Vulkan runtime is now included in the NuGet package

Improvements

  • Optimized dynamic sampling mechanisms

Version 2024.12.1 (06 December 2024)

New Features

  • Introduced the LLM.TemplateFormatFlags enumeration
  • Introduced the KeywordExtraction class
  • Introduced the KeywordExtraction.KeywordItem class
  • Added the ChatTemplateFormatFlags property to the LLM class
  • Added the IsArray property to the TextExtractionElement class

Improvements

  • Optimized dynamic sampling mechanisms
  • Improved support for large text bodies in the embedding engine

Version 2024.11.10 (29 November 2024)

New Features

  • Introduced the DeviceType enumeration
  • Added the DeviceType property to the GpuDeviceInfo class

Improvements

  • Inference speed improvements with Vulkan backend

Version 2024.11.9 (27 November 2024)

New Features

  • Added the UseAsyncModelAttributesLoading property to the Configuration class
  • Added the DeviceDescription property to the GpuDeviceInfo class
  • Added the TotalMemorySize property to the GpuDeviceInfo class
  • Added the FreeMemorySize property to the GpuDeviceInfo class

Improvements

  • Improved NuGet package compatibility with MAUI
  • Various inference speed improvements
  • Improved handling of model loading failures

Version 2024.11.8 (25 November 2024)

New Features

  • Added the SetLogTextWriter method to the Runtime class

Version 2024.11.7 (25 November 2024)

New Features

  • Added maccatalyst RID for MAUI

Version 2024.11.6 (25 November 2024)

New Features

  • Vulkan backend is now enabled by default
  • Introduced the Runtime.BackendType enumeration
  • Added the Backend static property to the Runtime class
  • Introduced the GpuDeviceInfo class
  • Added the PreviousContent property to the ChatHistory.Message class

Version 2024.11.5 (23 November 2024)

Improvements

  • Enhanced inference speed
  • Improved compatibility with MAUI

Version 2024.11.4 (18 November 2024)

New Features

  • Added Vulkan backend for Linux
  • Added support for .NET 9

Improvements

  • Improved compatibility with macOS ARM and macOS x64
  • Enhanced CPU inference speed

Version 2024.11.4 (12 November 2024)

New Features

  • Added the CreateGrammarFromStringList method to the Grammar class
  • Added the WhitelistedValues property to the TextExtractionElementFormat class

Version 2024.11.2 (05 November 2024)

New Features

  • Added overloads to GetEmbeddings and GetEmbeddingsAsync methods in the Embedder class to support batch processing of multiple inputs

Version 2024.11.1 (04 November 2024)

New Features

  • Added support for Granite models
  • Added the Perplexity property to the BeforeTokenSamplingEventArgs class
  • Added the Perplexity property to the AfterTokenSamplingEventArgs class
  • Added the ContinueLastAssistantResponse and ContinueLastAssistantResponseAsync methods to the MultiTurnConversation class

Improvements

  • Optimized dynamic sampling mechanisms

Version 2024.10.5 (24 October 2024)

New Features

  • Added the GeneratedTokens property to the ChatHistory.Message class
  • Added the TerminationReason property to the ChatHistory.Message class
  • Introduced the TextExtractionElementFormat class
  • Introduced the TextExtractionElementFormat.TextCaseMode enumeration
  • Added the TextExtractionElementFormat property to the TextExtractionElement class

Improvements

  • Enhanced structured text extraction
  • Added new formatting options to text extraction elements
  • Improved function calling capabilities
  • Refined JSON data sampling
  • Optimized dynamic sampling mechanisms

Version 2024.10.4 (17 October 2024)

Improvements

  • Structured text extraction improvements
  • Function calling improvements
  • Refined JSON data sampling
  • Optimized dynamic sampling mechanisms

Version 2024.10.3 (16 October 2024)

New Features

  • Added the TextExtraction class
  • Added the TextExtractionResult class
  • Added the TextExtractionResultElement class
  • Added the ElementType enumeration
  • Added the DateTime parameter type support to function calling

Improvements

  • Optimized dynamic sampling mechanisms

Version 2024.10.2 (09 October 2024)

New Features

  • Added the TextExtractionElement class
  • Added the CreateJsonGrammarFromExtractionElements(IEnumerable<TextExtractionElement> extractionElements) method overload to the Grammar class

Improvements

  • Optimized dynamic sampling mechanisms

Version 2024.10.1 (01 October 2024)

New Features

  • Added the CreateTrainingObject method overload to the EmotionDetection class
  • Added the GetTrainingData method to the EmotionDetection class
  • Introduced the EmotionDetection.TrainingDataset enumeration
  • Introduced the JsonNumArray, JsonIntArray, and JsonStringArray members to the LMKit.Data.Json.JsonBasicType enumeration
  • Introduced the TextTranslation.TrainingDataset enumeration
  • Added the GetTrainingData method to the TextTranslation class
  • Added the EnableDynamicSampling property to the Configuration class

Improvements

  • Improvements to generic classification accuracy and speed
  • Improved global performance with Llama 3.2 models
  • Improved global performance with Qwen 2.5 models
  • Fine-tuning: extended compatibility to all Llama architectures
  • Improved sampling of JSON array structures

Version 2024.9.4 (25 September 2024)

New Features

  • Added support for array parameters in function calls
  • Added the ForceFunctionSelection property to the SingleFunctionCall class
  • Introduced the LMKit2024_09_INT member to the SentimentAnalysis.TrainingDataset enumeration

Improvements

  • Improved function calling accuracy and speed
  • Improved emotion detection engine accuracy and speed
  • Strong improvements to generic classification accuracy and speed
  • Improved accuracy of the language detection engine

Bug Fixes

  • Fixed a memory leak in the fine-tuning engine

Version 2024.9.3 (18 September 2024)

Improvements

  • Improved function calling accuracy
  • Enhanced language detection accuracy
  • Boosted generic classification accuracy and speed
  • Increased inference speed on CPU

Version 2024.9.2 (11 September 2024)

New Features

  • Added the Seed property to RandomSampling, MirostatSampling, and Mirostat2Sampling classes
  • Introduced the TrimAuto member to the InputLengthOverflowPolicy enumeration
  • Enabled deserialization of ChatHistory objects without specifying a Model parameter

Improvements

  • Further increased inference speed on CPU
  • Enhanced internal API for better error handling

Version 2024.9.1 (6 September 2024)

Improvements

  • Optimized inference speed on CPU
  • Implemented checks to prevent access to disposed objects
  • Improved exception handling in quantization features

Version 2024.9.0 (3 September 2024)

New Features

  • Added the GetToken method to the Vocabulary class
  • Introduced the Confidence property to the TextTranslation class
  • Added the MaximumInputTokens property to the SingleTurnConversation class

Improvements

  • Enhanced JSON content sampling strategy
  • Extended CUDA backend compatibility across more Windows configurations
  • Improved accuracy of the language detection engine
  • Enhanced compatibility with MAUI

Version 2024.8.4 - Preview (26 August 2024)

New Features

  • Introduced the GlobalConfiguration static class

Improvements

  • Refined JSON content sampling strategy
  • Improved function calling accuracy and speed
  • Increased inference speed with Gemma2 models
  • Enhanced classification accuracy with tiny-small models

Bug Fixes

  • Fixed an issue when computing embeddings from a token array matching the context size

Version 2024.8.3 - Preview (21 August 2024)

Improvements

  • Improved support for Phi 3.5 models

Version 2024.8.2 - Preview (20 August 2024)

New Features

  • Added the CreateJsonGrammarFromJsonScheme method to the Grammar class

Improvements

  • Improved JSON content sampling strategy
  • Enhanced function calling accuracy and speed

Version 2024.8.1 - Preview (15 August 2024)

New Features

  • Added Vulkan backend 🔥
  • Introduced the FunctionCallResult property to the FunctionCallEventArgs class
  • Added the EnableVulkan property to the Runtime class
  • Included KeepLast property in the AfterTokenSamplingEventArgs class

Improvements

  • Refined JSON content sampling strategy
  • Enhanced function calling accuracy and speed

Version 2024.8.0 - Preview (8 August 2024)

New Features

  • Added the CreateJsonGrammarFromFields method to the Grammar class
  • Enabled function calling support with any model class 🔥
  • Introduced the SingleFunctionCall and FunctionCallResult classes
  • Added the LMFunctionAttribute attribute

Improvements

  • Enhanced grammar sampling strategy, especially for JSON schemes

Version 2024.7.10 - Preview (6 August 2024)

New Features

  • Added support for Google Gemma 2 2B models 🔥
  • Introduced the CreateJsonGrammarFromTextFields method to the Grammar class

Improvements

  • Improved grammar sampling strategy, particularly with JSON schemes

Version 2024.7.9 - Preview (31 July 2024)

New Features

  • Added the Version property to the Runtime class

Bug Fixes

  • Fixed an issue enabling neutral emotion support in the EmotionDetection class
  • Resolved issues when running fine-tuning with gradient checkpointing

Version 2024.7.8 - Preview (30 July 2024)

New Features

  • Added the MaximumContextLength property to the SingleTurnConversation class
  • Added the GetTextAsync method to the Attachment class

Improvements

  • Enhanced inference engine handling of context overflow scenarios

Version 2024.7.7 - Preview (29 July 2024)

Improvements

  • Enhanced compatibility with .NET Framework 4.6.2

Bug Fixes

  • Resolved a crash related to grammar sampling

Version 2024.7.6 - Preview (27 July 2024)

New Features

  • Added support for LLaMA 3.1 models 🔥

Improvements

  • Enhanced logging mechanism

Version 2024.7.1 - Preview (23 July 2024)

🎉 Initial release!

Share