Releases: ardanlabs/kronk
Release list
v1.31.9
Release Notes - v1.31.9
Release Date: August 22, 2026
Overview
Version 1.31.9 brings word-level timestamps to Bucky transcription and cancellable native generation to Malina, along with dependency updates to the bucky and malina libraries and supporting documentation.
Detailed Changes
New Features
Feature Bucky Word-Level Timestamps
- Author: William Kennedy
- New
WithWordTimestampstranscription option plus aWordtype andTranscription.Wordsfield that surface per-word timing from whisper.cpp. collectWordsandappendWordPieceassemble word pieces from per-token timestamps, splitting and merging on whitespace and dropping empty, non-UTF-8, and EOT tokens.- The
verbose_jsontranscription response now returns a populatedwordsarray (word,start,end) when word granularity is requested, instead of an empty list.
Improvements
Improvement Malina Cancellable Generation
- Author: William Kennedy
- Canceling a request after native generation starts now interrupts the stable-diffusion.cpp call and resets the model context for reuse, instead of waiting for native code to finish.
- A new context support check at load time rejects any loaded context that does not support image generation.
- Cancellation runs in a dedicated goroutine and joins the native, stop, and cancel errors before returning, so neither a canceled context nor a freed handle is reused while native code is active.
Documentation
Documentation Bucky and Malina Manual Updates
- Author: William Kennedy
- Chapter 18 (Bucky) documents the word-level
wordsarray inverbose_jsonand the updated behavior oftimestamp_granularities[]=word. - Chapter 19 (Malina) and README updated to describe cancellable native generation and the new whisper.cpp / bucky 1.1.0 compatibility row.
Dependencies
Dependency Library Updates
- Author: William Kennedy
- bucky v1.0.8 → v1.1.0 (enables word-level timestamps and the NoState model init).
- malina v1.0.3 → v1.0.4 (enables cancellable native generation and context support checks).
- Indirect bumps: GCP OpenTelemetry operations (detectors/gcp v1.35 → v1.36, exporter/metric v0.59 → v0.60), aws smithy-go v1.27.8 → v1.27.9, and googleapis gax-go/v2 v2.23 → v2.24.
Statistics
| Category | Count |
|---|---|
| Total Commits | 4 |
| New Features | 1 |
| Improvements | 1 |
| Bug Fixes | 0 |
| Documentation | 1 |
Contributors:
- William Kennedy
Upgrade Notes
Breaking Changes
NONE
Migration
No migration required
Recommended Actions
- Update to bucky v1.1.0 to use
WithWordTimestampsand the populatedwordsarray inverbose_json. - Review Malina
Generatecancellation behavior: a canceled request now resets the native context for reuse. - Verify your stable-diffusion contexts support image generation, as unsupported contexts are now rejected at load time.
v1.31.8
Release Notes - v1.31.8
Release Date: August 21, 2026
Overview
Version 1.31.8 brings explicit control over where a multimodal model's media projector (mmproj) runs, support for the new Ornith 1.5 model line, and a faster, lighter test suite. The highlight is a new proj-device option that lets you pin the projector to a specific accelerator (for example, CUDA1 or MTL0), a general upgrade to Yzma v1.24.0, and a large reduction in the test-model download footprint from about 98 GiB to about 52 GiB.
Detailed Changes
New Features
Feature Projector Device Control
- Author: William Kennedy
- New
WithProjDeviceSDK option andproj-devicemodel-config setting that pins the multimodal projector to a specific backend device (for example,CUDA1orMTL0); omit for automatic placement. proj-deviceconflicts withproj-on-cpu: true; the language model's device selection viangpu-layers/main-gpuis unaffected.DeviceInfonow reportsdescription,hardware_type, andbackend, sokronk devicesexposes richer detail and the projector can target the reported name.
Feature Code-Generation Benchmark Harness
- Author: William Kennedy
- New structured code-generation benchmark (
sdk/kronk/tests/benchmarks) that runs a two-turn tic-tac-toe coding task and produces token/throughout/TTFT/through speculative-decoding metrics and model-memory estimates. - Integrated automated grader (
grader_test.go) that builds, vets, checks Go structure, and runs win/draw/undo scenarios against each response. - New make targets (
benchmark-codegen-*) withBENCH_CODEGEN_TIMEandBENCH_CODEGEN_TIMEOUTknobs, replacing the previous bench suite.
Improvements
Improvement Ornith 1.5 Model Support
- Author: William Kennedy
- Agent model config now uses
kronk/ornith-ai/Ornith-1.5-35B-Q8_0/AGENTas the main model, retiring the Ornith 1.0 35B entry. - Updated model capabilities, context/output limits, and catalog/model-config entries to match the Ornith 1.5 line.
- Adjusted small-model and additional-model entries and their limits in
.agents.
Improvement Smaller Test-Model Footprint
- Author: William Kennedy
- Test-model set reduced from about 98 GiB to about 52 GiB, using smaller quantizations that still exercise each runtime path.
- Cleaned the default catalog (
sdk/tools/defaults/yaml/catalog.yaml) by removing stale/unused model entries. - Added
MODEL_USAGE.mdto record the intent behind each model-backed test, benchmark, and example selection.
Improvement CI Model-Backed Coverage
- Author: William Kennedy
- GitHub Actions now run focused, model-backed tests per capability in
linux.yml(ThinkChat, tool-call content, draft/speculative, vision, rerank) instead of relying solely on local runs. - Added small test models (
Qwen3-0.6B-Q8_0,Qwopus3.5-4B-Coder.Q4_K_M) and trimmed models to fit the GitHub Actions 10 GiB cache quota. - Refined
kronk launchmodel filtering for cleaner regeneration of the OpenCode config.
Improvement GPU Device Classification
- Author: William Kennedy
ClassifyDeviceTypenow classifies by backend device metadata (hardware type + registration name), giving more accurategpu_rocm/gpu_cuda/gpu_metal/gpu_vulkanmapping.- Refactored ROCm/HIP alias handling so it no longer depends solely on by-name prefixes.
Library Updates
- Author: William Kennedy
- Upgraded Yzma v1.23.0 → v1.24.0, bringing the underlying llama.cpp default library from b10520 → b10549.
- Refreshed transitive dependencies (grpc, aws-sdk-go-v2, cloud.google.com/storage, genproto, testify, logrus, mewkiz/flac, lestrrat-go/dsig).
Bug Fixes
None.
Documentation
Documentation Projector + Benchmark Docs
- Author: William Kennedy
- Chapter 03 documents the new
proj-devicesetting, its conflict withproj-on-cpu, and the updated config-reference table. - New code-generation benchmark README documents the protocol, metrics, make targets, and artifacts.
- Updated several manual chapters and BUI docs (DocsManual, DocsSDKModel) to reflect the cleaned model list and projector options.
Dependencies
Dependency Yzma and Transitive Dependencies
- Author: William Kennedy
github.com/hybridgroup/yzmav1.23.0 → v1.24.0 (primary library upgrade).kronklibs defaultllama.cppbuild bumped b10520 → b10549.- Bumped grpc, aws-sdk-go-v2 suite, cloud.google.com/auth and storage, genproto packages, testify, sirupsen/logrus, mewkiz/flac, and lestrrat-go/dsig.
Statistics
| Category | Count |
|---|---|
| Total Commits | 4 |
| New Features | 2 |
| Improvements | 4 |
| Bug Fixes | 0 |
| Documentation | 1 |
Contributors:
- William Kennedy
Upgrade Notes
Breaking Changes
None.
Migration
No migration required. The new proj-device setting is optional; omit it to keep the previous automatic projector behavior.
Recommended Actions
- Review the cleaned default catalog and test-model list if any of those entries were relied upon.
- Optionally add
proj-deviceto pin the multimodal projector on multi-GPU systems. - Re-run any custom benchmark scripts against the new
benchmark-codegen-*make targets.
v1.31.7
Release Notes - v1.31.7
Release Date: August 19, 2026
Overview
Version 1.31.7 brings model configuration updates, improvements to media message normalization that preserves message fields, and removes the enum restriction on reasoning_effort to support newer templates.
Detailed Changes
Improvements
Improvement Media Message Field Preservation
- Author: William Kennedy
toMediaMessagenow preservesreasoning_content,tool_calls, andtool_call_idfields instead of dropping them during media normalization- Messages are cloned before normalization so only content fields are rewritten
- A length mismatch check between source and normalized messages prevents silent data loss
- Non-user roles (system, assistant, tool) are now correctly preserved through the full message lifecycle
Improvement Removed reasoning_effort Enum Restriction
- Author: William Kennedy
- Removed the hardcoded enum validation for
reasoning_effortinparseReasoningString - The SDK now accepts any string value so newer chat templates can add reasoning levels without requiring a server change
- Invalid values are passed through to the template which may reject them
Improvement Model Configuration Updates
- Author: William Kennedy
- Added
unsloth/Ornith-1.0-35B-UD-Q8_K_XL/AGENTmodel config withnseq-max: 2,context-window: 131072, andpreserve_thinking: true - Removed hardcoded
temperature,top_k, andtop_poverrides for all AGENT models to use their GGUF sampling defaults - Added
chat-template-kwargs: preserve_thinking: trueto all AGENT models
Bug Fixes
Bug Fix Removed Invalid reasoning_effort Test Case
- Author: William Kennedy
- Removed test case that expected
"invalid"to fail validation onreasoning_effort - The new behavior allows any string so templates can validate their own values
Documentation
Documentation Updated Request Parameters Manual
- Author: William Kennedy
- Updated Chapter 10 to document the flexible
reasoning_effortbehavior - Updated API Endpoints manual with catalog and operations endpoint details
Statistics
| Category | Count |
|---|---|
| Total Commits | 1 |
| New Features | 0 |
| Improvements | 3 |
| Bug Fixes | 1 |
| Documentation | 1 |
Contributors:
- William Kennedy
Upgrade Notes
Breaking Changes
None
Migration
No migration required
Recommended Actions
- Review model configuration files if custom sampling overrides were set — defaults now come from the model's GGUF metadata
- Verify that any custom
reasoning_effortvalues are compatible with your chat templates
v1.31.6
Release Notes - v1.31.6
Release Date: August 19, 2026
Overview
Version 1.31.6 brings a concurrency redesign to Malina (image generation), a new kronk malina CLI subcommand tree for managing stable-diffusion.cpp libraries and model bundles, improved Bucky admission timeout handling, and a Go toolchain bump to 1.27.0.
Detailed Changes
New Features
Malina CLI Subcommands
- Author: William Kennedy
- New
kronk malina libscommand for installing, listing, and removing stable-diffusion.cpp library bundles - New
kronk malina modelcommand tree withcatalog,list,pull, andremovesubcommands for managing curated image-model bundles - Library and model management commands require
--localflag since Malina routes are not yet served by the Kronk model server
Improvements
Malina Concurrency Redesign
- Author: William Kennedy
- Malina now uses a pool of backend contexts instead of a single backend, enabling concurrent image generation across multiple model contexts
- Each backend still performs one generation at a time (stable-diffusion contexts are not safe for concurrent use)
- Admission channel capacity scaled to
Concurrency + QueueDepthfor proper backpressure across the pool - Workers use
sync.WaitGroupfor clean shutdown coordination
Bucky Admission Timeout
- Author: William Kennedy
- Admission wait is now independently bounded by
AdmissionTimeout, separate from the caller's original context - Introduces
ErrAdmissionTimeouterror variable so callers can distinguish admission timeouts from context cancellation - Once admitted, model processing continues under the caller's original context
Go Toolchain Bump
- Author: William Kennedy
- Updated minimum Go version from 1.26.6 to 1.27.0 across the project
Bug Fixes
Bucky Concurrency Surface
- Author: William Kennedy
- Fixed Bucky API concurrency surface to correctly use the new admission channel pattern
Documentation
Bucky and Malina Docs
- Author: William Kennedy
- Updated Bucky documentation with sampling parameters
- Updated Malina documentation reflecting concurrency redesign and new CLI commands
Dependencies
Project Image and Infrastructure
- Author: William Kennedy
- Updated project banner image
- Updated installation, model configuration, and developer guide documentation
- Updated Nix flake.lock and flake.nix for dependency consistency
Statistics
| Category | Count |
|---|---|
| Total Commits | 3 |
| New Features | 1 |
| Improvements | 3 |
| Bug Fixes | 1 |
| Documentation | 2 |
Contributors:
- William Kennedy
Upgrade Notes
Breaking Changes
None
Migration
No migration required
Recommended Actions
- Update Go toolchain to 1.27.0
- If using Malina with high concurrency, review the new pool-based architecture — the single-backend model is replaced by a pool of
Concurrencybackends - If using Bucky and relying on context cancellation for admission backpressure, check for
ErrAdmissionTimeoutto distinguish admission timeouts from other cancellations
v1.31.5
Release Notes - v1.31.5
Release Date: August 19, 2026
Overview
Version 1.31.5 introduces comprehensive whisper.cpp sampling parameters for both transcription and streaming modes in Bucky, allowing fine-grained control over decoding behavior including temperature, beam search, and greedy strategies. Documentation and BUI components have been updated to reflect these new capabilities.
Detailed Changes
New Features
Bucky Sampling Parameters
- Author: William Kennedy
- Added
Temperature,TemperatureInc,EntropyThreshold,GreedyBestOf,BeamSize,BeamSearchPatience, andLengthPenaltyfields toTranscribeConfiginsdk/bucky/model/transcribe.go - Added the same sampling parameters to
StreamConfiginsdk/bucky/model/stream.gofor streaming transcription sessions - Introduced constructor options:
WithTemperature,WithTemperatureInc,WithEntropyThreshold,WithGreedyBestOf,WithBeamSearchPatience, andWithLengthPenaltyfor both transcribe and stream configs - Added
parseWhisperOptionsfunction incmd/server/app/domain/audioapp/audioapp.goto parse whisper options from HTTP form values, exposing all new parameters through the API endpoint - Added comprehensive test coverage for sampling parameters in
sdk/bucky/model/sampling_params_test.go
Documentation
Documentation Bucky Sampling Parameters
- Author: William Kennedy
- Updated
.manual/chapter-03-model-configuration.mdwith documentation for the new sampling parameters - Updated
.manual/chapter-04-batch-processing.mdwith additional context - Updated
.manual/chapter-18-bucky.mdwith details on the new Bucky sampling parameters - Updated BUI components
DocsManual.tsxandDocsSDKBuckyModel.tsxto reflect the new documentation - Updated static assets for the Browser UI (BUI)
Statistics
| Category | Count |
|---|---|
| Total Commits | 1 |
| New Features | 1 |
| Improvements | 0 |
| Bug Fixes | 0 |
| Documentation | 1 |
Contributors:
- William Kennedy
Upgrade Notes
Breaking Changes
None
Migration
No migration required
Recommended Actions
- Review the new Bucky sampling parameters in the SDK and API documentation
- Update transcription and streaming calls to leverage the new decoding controls for improved accuracy
v1.31.4
Release Notes - v1.31.4
Release Date: August 18, 2026
Overview
Version 1.31.4 introduces canonical model identifiers across all APIs, a new immutable System cache pool for the Incremental Message Cache, improved pool auto-tuning with weighted multi-GPU budget allocation, and model server configuration support. It also includes batch engine optimizations, documentation updates, and dependency upgrades.
Detailed Changes
New Features
Canonical Model Identifiers
- Author: William Kennedy
- Model identifiers now use the canonical
provider/modelIDform on all public model-facing APIs - Bare model IDs are rejected instead of being searched across a provider list
- Model pull and catalog resolution no longer walk a configured provider list for bare IDs
- Discovery responses (
GET /v1/models) and inference responses now report canonical IDs as the source of truth - Named configurations append the profile after the canonical base ID (e.g.,
Qwen/Qwen3-8B-Q8_0/AGENT) - New
ParseModelIDandModelIDtypes insdk/tools/modelsfor canonical identifier parsing
IMC System Cache Pool
- Author: William Kennedy
- New immutable System preload pool for Incremental Message Cache (IMC)
- Dedicated
IMCSystemCaches()API returns snapshots of System cache pool entries - System caches persist across sessions for shared prompt prefixes and template content
- Exposes per-entry details: token count, allocated size, snapshot bytes, restore count, and last-used time
- Significantly reduces redundant prefill work for common system prompts
Model Server Settings in Config
- Author: William Kennedy
- Model server now supports per-model configuration via
model_config.yaml - New
config.goservice in the API server for structured config management - Configuration supports context window, split mode, and other model-level overrides
- Legacy bare model ID keys in config are rejected in favor of canonical identifiers
Improvements
Pool Auto-Tune Weighted Budget
- Author: William Kennedy
- Auto-tune now uses weighted multi-GPU budget allocation based on tensor split or device capacity
ResponseModelIDis now propagated from pool load requests through to model config- GPU budget calculation considers tensor split weights when available, falling back to device total bytes
- Improved device selection logic respects explicit device configuration over usage-based discovery
Batch Engine Optimizations
- Author: William Kennedy
- IMC optimization changes across the batch generation engine
- Improved prefill media handling and slot management
- Enhanced speculative decoding integration with batch engine
- Better diagnostics reporting for batch generation state
- Optimized token handling and cache management in prefill paths
BUI IMC Sessions UI
- Author: William Kennedy
- Refreshed IMC Sessions screen in the Browser UI with improved layout and information display
- Updated API types and service integration for IMC session details
- Improved CSS styling for sessions component
Bug Fixes
Model ID Resolution
- Author: William Kennedy
- Fixed model ID resolution in model pull and resolve commands to use canonical identifiers
- Corrected model ID handling in launch command and server startup
- Fixed model ID propagation through pool and tool app domain layers
AuthTune Configuration
- Author: William Kennedy
- Fixed AuthTune configuration handling in server startup
Qwen Tool Parsing
- Author: William Kennedy
- Fixed tool parsing in Qwen parser for improved compatibility
Documentation
Comprehensive Updates
- Author: William Kennedy
- Updated installation guide with latest model configuration details
- Expanded model configuration documentation including server settings
- Updated batch processing documentation for IMC optimizations
- Enhanced speculative decoding and MTP documentation
- Updated YaRN extended context documentation
- Expanded model server documentation with config file details
- Updated API endpoints documentation
- Improved troubleshooting guide
- Updated Malina (image generation) documentation
- Refreshed developer guide with latest build and architecture information
- Updated observability documentation for Prometheus metrics
- Updated BUI documentation
- Removed outdated IMC diagram SVGs and refreshed session selection diagram
Dependencies
Dependency Updates
- Author: William Kennedy
github.com/ardanlabs/malinav1.0.2 → v1.0.3github.com/open-policy-agent/opav1.19.0 → v1.19.1cel.dev/exprv0.25.2 → v0.25.3- Full AWS SDK for Go v2 dependency chain updated (v1.43.5 → v1.43.6 and related sub-modules)
github.com/aws/smithy-gov1.27.7 → v1.27.8
Statistics
| Category | Count |
|---|---|
| Total Commits | 4 |
| New Features | 3 |
| Improvements | 3 |
| Bug Fixes | 1 |
| Documentation | 1 |
Contributors:
- William Kennedy
Upgrade Notes
Breaking Changes
Model Identifier Changes
Kronk model identifiers now use the canonical provider/modelID form on all public model-facing APIs. Bare model IDs are rejected instead of being searched across a provider list.
Update the model field sent to Chat Completions, Responses, Messages, Embeddings, Reranking, Tokenize, and other inference endpoints. Also update model IDs supplied to model-management APIs and CLI commands.
Keys in ~/.kronk/models/model_config.yaml must also use canonical identifiers. A legacy bare key prevents the server pool from initializing.
Named configurations now append the profile after the canonical base ID. For example, replace Qwen3-8B-Q8_0/AGENT with Qwen/Qwen3-8B-Q8_0/AGENT.
See BREAKING_CHANGES.md for full migration details.
Migration
Update all model identifiers to canonical provider/modelID form. Update model config YAML keys. See BREAKING_CHANGES.md for complete migration instructions.
Recommended Actions
- Update all model identifiers in API requests and configuration files to canonical
provider/modelIDform - Verify model config YAML uses canonical keys (run server to confirm pool initializes)
- Review
BREAKING_CHANGES.mdfor detailed migration guidance - Test IMC behavior with the new System cache pool to verify performance improvements
v1.31.3
Release Notes - v1.31.3
Release Date: August 16, 2026
Overview
Version 1.31.3 delivers a major architectural reorganization of the speculative decoding engine, separating it into well-defined packages for classic and MTP (Multi-Token Prediction) strategies. This refactor significantly improves code maintainability and readability while also fixing validation bugs in chat processing.
Detailed Changes
New Features
Speculative Decoding Package Refactor
- Author: William Kennedy
- Separated speculative decoding logic from the batch engine into dedicated packages under
sdk/kronk/model/internal/speculation/ - Created
classicpackage implementing classic speculative decoding with generate, verify, and state management components - Created
mtppackage implementing MTP-specific draft generation, synchronization, verification, and finalization - Introduced
speculation.Controllerinterface withDisabledfallback implementation for non-speculative workloads - Added
speculation_runtime.goas the central runtime controller that dispatches to classic or MTP engines based on configuration - Added
speculation_config.goto centralize speculation configuration parsing and validation - Added
mtp_runtime_hooks.gowith MTP-specific runtime hooks for the yzma integration - All new packages include comprehensive test coverage (disabled_test.go, classic_test.go, mtp/*_test.go, speculation_test.go)
Improvements
Validation Bug Fixes
- Author: William Kennedy
- Fixed validation bugs in speculative decoding configuration and chat processing
- Added 57 new lines of tests in
cmd/server/api/services/kronk/tests/chat_test.gofor chat validation scenarios - Added 75 new lines of tests in
sdk/kronk/model/chat_test.gofor chat processing validation - Streamlined batch engine code by removing speculative decoding logic (270 lines removed from
batchgen_engine.go, 748 lines frombatchgen_speculative.go) - Cleaned up
batchgen_slot.goandbatchgen_slot_start.goto remove speculative decoding concerns - Removed
speculative_sparse.go(109 lines) as the functionality has been reorganized into the new speculation packages
Documentation
Speculative Decoding Documentation Updates
- Author: William Kennedy
- Updated
.manual/chapter-03-model-configuration.mdwith 12 new lines covering speculation configuration - Updated
.manual/chapter-06-speculative-decoding-mtp.mdwith 6 new lines reflecting the new architecture - Updated BUI components (
DocsManual.tsx,DocsSDKModel.tsx) with 42 new lines of documentation content
Dependencies
Configuration Tool Updates
- Updated
sdk/tools/models/kronkconfig.goandkronkresolve.goto support new speculation configuration fields - Added tests for kronkresolve configuration parsing
- Updated model config YAML files in
sdk/tools/defaults/yaml/andzarf/kms/
Statistics
| Category | Count |
|---|---|
| Total Commits | 2 |
| New Features | 1 |
| Improvements | 1 |
| Bug Fixes | 1 |
| Documentation | 1 |
Contributors:
- William Kennedy
Upgrade Notes
Breaking Changes
None
Migration
No migration required. The speculative decoding functionality remains the same from a user perspective — the changes are internal reorganization of the codebase.
Recommended Actions
- No action required for existing users
- If you have custom speculation configuration, verify it still works with the updated configuration parsing
- Review the updated documentation in Chapter 3 and Chapter 6 for the latest speculation configuration guidance
v1.31.2
Release Notes - v1.31.2
Release Date: August 16, 2026
Overview
Version 1.31.2 brings a major rework of Kronk's batch scheduling engine with new diagnostics, a single prefill-batch-size configuration setting replacing nbatch/nubatch, a Slots UI for real-time scheduler visibility, a new media load testing tool, and a BREAKING change to model batch configuration.
Detailed Changes
New Features
Batch Engine Diagnostics API
- Author: William Kennedy
- New
BatchEngineSnapshottype exposes real-time scheduler state per loaded model - Each snapshot includes per-slot phase, generation mode, token counts, and IMC preparation progress
- Generation contributions track each slot's row count and mode (ordinary, speculative, MTP, M-RoPE direct)
- Prefill and IMC selector cursors show which slots are eligible and currently selected
- Available via
Model.BatchEngineSnapshot()in the SDK andGET /v1/kronk/models/{model}/slotson the server
Slots Browser UI
- Author: William Kennedy
- New Slots tab in the BUI displays live scheduler state for all loaded generation models
- Shows per-slot phase (idle, starting, prefill, media-prefill, IMC preparation, generation), token counts, request age, and generation mode
- Model-level summary includes iteration count, batch sizing, MTP/speculative mode, and selector cursors
- Color-coded phase badges and generation mode labels for quick visual scanning
- Auto-refreshes every 2 seconds to keep scheduler state current
Media Load Testing Tool
- Author: William Kennedy
- New
.tools/media-load/media-load.pyfor benchmarking Kronk with multimodal media inputs - Supports parallel clients, configurable image/audio payloads, and streaming responses
- Generates throughput and latency metrics for vision and audio model workloads
SDK Batch Engine Snapshot
- Author: William Kennedy
kronk.(*Kronk).BatchEngineSnapshot()exposes the latest scheduler state from the generation batch engine- Returns
(BatchEngineSnapshot, bool)— the bool is false for embedding/rerank models - Complements
IMCSessions()for complete runtime observability
Improvements
Single Prefill Batch Size Configuration
- Author: William Kennedy
- Replaced separate
nbatchandnubatchsettings with oneprefill-batch-size(default: 2048) prefill-batch-sizelimits how many prompt tokens the current prefill owner contributes per decode iteration- Kronk derives internal
NBatchandNUBatchcapacities fromprefill-batch-size, slot count, and generation mode - Non-MTP reserves one generation row per slot; MTP reserves
1 + ndraftrows per slot
Round-Robin Prefill Replaced by Prefill Owner
- Author: William Kennedy
- Prefill now uses a persistent owner model instead of round-robin across slots
- One active slot owns prefill until its prompt completes, then the cursor advances to the next eligible slot
- Generation and speculative rows from ready output slots are staged first, then the remaining tray capacity goes to the prefill owner
- This gets long-prompt prefill done quickly without blocking streaming output from other slots
IMC Preparation Scheduling
- Author: William Kennedy
- Text IMC preparation is deferred to its own scheduling phase after slot admission
- Newly admitted requests can claim free slots immediately without waiting for IMC decoding
- If no rows were staged during admission, IMC preparation runs before prefill
Configuration Cleanup
- Author: William Kennedy
- Minor cleanup to configuration handling and edge cases
- Removed unused
nbatch/nubatchreferences from config files and examples
Documentation
Manual Updates
- Author: William Kennedy
- Updated Chapter 4 (Batch Processing) with new prefill owner model, batch sizing diagrams, and selector cursor explanations
- Updated Chapter 3 (Model Configuration) with
prefill-batch-sizedocumentation - Updated Chapter 5 (Message Caching) with new IMC session selection diagram
- Updated Chapter 6 (Speculative Decoding & MTP) with MTP batch sizing notes
- Updated Chapter 11 (Multi-Modal Models) and Chapter 13 (Browser UI)
- Added new SVG diagrams for batch sizing, prefill batching, IMC cache growth, and IMC session selection
- Added
BREAKING_CHANGES.mddocumenting the v1.31.2 batch configuration migration
SDK Documentation
- Author: William Kennedy
- Updated
DocsSDKModel.tsxwith new batch engine diagnostics API examples - Updated
DocsSDKPool.tsxwith pool-level snapshot references - Updated
DocsSDKKronk.tsxwithBatchEngineSnapshot()usage
Dependencies
Build Toolchain
- Author: William Kennedy
- Updated
.make/tools.mkwith toolchain improvements
Statistics
| Category | Count |
|---|---|
| Total Commits | 2 |
| New Features | 4 |
| Improvements | 4 |
| Bug Fixes | 0 |
| Documentation | 3 |
Contributors:
- William Kennedy
Upgrade Notes
Breaking Changes
Model Batch Configuration Changes
The separate user-configurable nbatch and nubatch settings were replaced by one prompt-processing setting:
# Before
nbatch: 8192
nubatch: 2048
# After
prefill-batch-size: 2048prefill-batch-size defaults to 2048 and limits how many prompt tokens the current prefill owner contributes to one decode iteration. Kronk now derives llama.cpp's internal logical NBatch and physical NUBatch capacities from that value, the slot count, and the generation mode. Non-MTP reserves one generation row per slot. MTP reserves 1 + ndraft rows per slot and uses one physical batch for the complete prefill-plus-generation tray.
Direct Go SDK consumers must replace these removed APIs:
| Removed | Replacement |
|---|---|
model.Config.PtrNBatch |
model.Config.PtrPrefillBatchSize |
model.Config.PtrNUBatch |
model.Config.PtrPrefillBatchSize |
model.Config.NBatch() |
model.Config.PrefillBatchSize() for configuration; EffectiveNBatch() for diagnostics |
model.Config.NUBatch() |
model.Config.PrefillBatchSize() for configuration; EffectiveNUBatch() for diagnostics |
model.WithNBatch(...) |
model.WithPrefillBatchSize(...) |
model.WithNUBatch(...) |
model.WithPrefillBatchSize(...) |
The Playground request field changed from nbatch and nubatch to prefill_batch_size. The BUI playground and configuration sweeps now expose only Prefill Batch Size. Effective NBatch / NUBatch values remain visible as read-only runtime diagnostics on the Slots screen.
Migration
When migrating an old configuration with different values, use the old nubatch value as the initial prefill-batch-size, then benchmark the workload. A larger value can finish long-prompt prefill in fewer decode calls, but each call takes longer before already-generating slots can run again and requires a larger compute buffer.
Recommended Actions
- Replace
nbatchandnubatchYAML settings withprefill-batch-sizein all configuration files - Update Go SDK code: replace
PtrNBatch/PtrNUBatchwithPtrPrefillBatchSize, replaceWithNBatch/WithNUBatchwithWithPrefillBatchSize - Replace
model.Config.NBatch()calls withPrefillBatchSize()for config orEffectiveNBatch()for diagnostics - Replace
model.Config.NUBatch()calls withPrefillBatchSize()for config orEffectiveNUBatch()for diagnostics - Update playground request payloads: replace
nbatch/nubatchfields withprefill_batch_size - Explore the new Slots tab in the BUI for real-time scheduler visibility
- Review
BREAKING_CHANGES.mdfor complete migration details
v1.31.1
Release Notes - v1.31.1
Release Date: August 15, 2026
Overview
Version 1.31.1 brings MTP performance improvements, new support for the Qwen3.8-27B model, and documentation updates for Homebrew installation.
Detailed Changes
New Features
Qwen3.8-27B Model Support
- Author: William Kennedy
- Added catalog entry for
unsloth/Qwen3.8-27B-UD-Q4_K_XL(Hybrid model with vision, reasoning, and tooling capabilities) - Added model configuration for
unsloth/Qwen3.8-27B-UD-Q4_K_XL/AGENTwithreasoning_effort: "low"and 16384 max tokens - Updated libs.go for compatibility
Improvements
MTP Performance Enhancements
- Author: William Kennedy
- Removed adaptive
chooseNDraftthrottling for MTP — now uses the configured draft count to match llama.cpp behavior - Added detailed timing observability for MTP decode operations: target decode elapsed, MTP sync elapsed, decode wait elapsed, and chunk counts
- Updated
defMTPNDraftfrom 2 to 3 to match llama.cpp's MTP default - Clarified comments distinguishing MTP drafting from separate-GGUF speculative decoding
Reasoning Effort Handling
- Author: William Kennedy
- Removed the global default
DefReasoningEffortconstant so the chat template determines the default reasoning level - Updated Mistral parser to only coerce explicit
reasoning_effortvalues — an empty value remains unset, allowing the template's native default to apply - Added test coverage for Mistral parser reasoning effort handling
Model Config Updates
- Author: William Kennedy
- Increased
max_tokensfrom 8192 to 16384 for AGENT models:gemma-4-26B-A4B,mtp-Qwen3.6-27B,mtp-Qwen3.6-35B-A3B,gemma-4-E4B, andQwopus3.5-4B-Coder
Documentation
Homebrew Installation Fix
- Author: William Kennedy
- Updated Homebrew installation instructions in
.manual/chapter-02-installation.mdandREADME.md
Statistics
| Category | Count |
|---|---|
| Total Commits | 3 |
| New Features | 1 |
| Improvements | 3 |
| Bug Fixes | 0 |
| Documentation | 1 |
Contributors:
- William Kennedy
Upgrade Notes
Breaking Changes
None
Migration
No migration required
Recommended Actions
- Review the updated MTP behavior: draft token count no longer adapts based on acceptance rate for auto-detected MTP heads — it uses the configured value (default 3) to match llama.cpp
- If you relied on the previous
DefReasoningEffortdefault of"medium", verify your templates handle the reasoning effort default appropriately
v1.31.0
Release Notes - v1.31.0
Release Date: August 14, 2026
Overview
Version 1.31.0 brings improved error resilience in batch generation, new load mode options, VRAM optimization with per-sequence output limits, GGUF filetype/quantization visibility, and an update to llama.cpp b10423.
Detailed Changes
Improvements
LoadModeAuto Default and LoadModeMMapMLock
- Author: William Kennedy
- Changed default LoadMode from
mmaptoauto, which uses mmap when every selected device supports it and falls back to ordinary loading otherwise - Added
LoadModeMMapMLockoption that combines mmap with resident page locking - Updated
DerefLoadModeto default toLoadModeAutoinstead ofLoadModeMMap - Updated config documentation and YAML defaults to reflect the new options
NOutputsMaxPerSeq VRAM Optimization
- Author: William Kennedy
- Added
NOutputsMaxPerSeqcontext parameter for per-sequence logit row reservation - Prevents a single sequence from claiming the total logit rows, freeing significant VRAM at large ubatch sizes with MTP
- Applied in both generation and IMC prefill paths
- Context pool fallback now respects the per-sequence limit
GGUF FileType and Quantization Visibility
- Author: William Kennedy
- Added
FileTypeandQuantizationfields toModelInfostruct in both SDK and tools - Model info display now shows file type and friendly quantization name (e.g., "Q4_K - Medium")
- Updated
ModelInfoFromMetadatato parsegeneral.file_typefrom GGUF headers - Added
TestGGMLTypeSizestest covering all supported GGML types including MXFP4, NVFP4, Q1_0, and Q2_0
Batch Generation Error Resilience
- Author: William Kennedy
- Added error handling to all
batch.Add()calls across batch generation engine - MTP draft generation now returns errors properly through the drafter interface
- Speculative decoding batch operations handle errors with proper slot cleanup
- Prefill text and media operations rollback batch state on errors and finish slots cleanly
- Batch sequence engine for embed/rerank models handles add errors
Yzma / llama.cpp Update
- Author: William Kennedy
- Updated default llama.cpp version from b10417 to b10423
- Updated GGML type block sizes for Q2_K, Q8_K, IQ2_XS, IQ3_XXS, and IQ4_XS to match upstream
- Added GGML type definitions for MXFP4 (39), NVFP4 (40), Q1_0 (41), and Q2_0 (42)
Documentation
Model Configuration Docs
- Author: William Kennedy
- Updated Chapter 3 (Model Configuration) with new load mode options
- Updated Chapter 17 (Troubleshooting) with relevant changes
- Updated BUI documentation components to reflect new config options
Dependencies
Dependency llama.cpp Update
- Updated default llama.cpp version from b10417 to b10423
- Uses new
download.InstallAPI instead ofdownload.GetWithContext
Statistics
| Category | Count |
|---|---|
| Total Commits | 1 |
| New Features | 0 |
| Improvements | 5 |
| Bug Fixes | 1 |
| Documentation | 1 |
Contributors:
- William Kennedy
Upgrade Notes
Breaking Changes
None
Migration
No migration required. The default LoadMode changed from mmap to auto, but this maintains the same behavior when all devices support mmap. Explicit load-mode: mmap in config files will continue to work as before.
Recommended Actions
- Review model configuration files if you have explicit
load-modesettings — the default is nowautoinstead ofmmap - Consider using
load-mode: mmap+mlockif you want the combined mmap + mlock behavior that was previously not available as a single option - Update any code relying on LoadMode zero value being
MMap— it is nowAuto