diff --git a/README.md b/README.md
index 4e4c3154f..c79a020e4 100644
--- a/README.md
+++ b/README.md
@@ -112,8 +112,8 @@ Here are some of the known compatible versions:
| kronk | yzma | llama.cpp | bucky | whisper.cpp | malina | stable-diffusion.cpp |
| ------ | ------- | --------- | ------ | ----------- | ------ | -------------------- |
-| development | 1a800a2f3861 | b11513 | v1.1.4 | v1.9.5 | v1.1.5 | master-929-3f8527a |
-| 1.32.8 | 87450fc | b11439 | v1.1.4 | v1.9.5 | v1.1.5 | master-929-3f8527a |
+| 1.32.9 | 1a800a2 | b11513 | v1.1.4 | v1.9.5 | v1.1.5 | master-929-3f8527a |
+| 1.32.8 | c25d400 | b11331 | v1.1.3 | v1.9.4 | v1.1.5 | master-929-3f8527a |
| 1.32.6 | ece4890 | b10896 | v1.1.2 | v1.9.3 | v1.1.0 | master-849-d04e895 |
| 1.32.5 | v1.26.0 | v0.4.0 | v1.1.2 | v1.9.3 | v1.0.8 | master-841-6b3edaa |
| 1.32.4 | 6bd0208 | b10785 | v1.1.1 | v1.9.3 | v1.0.6 | master-841-6b3edaa |
diff --git a/cmd/server/api/frontends/bui/src/components/DocsSDKKronk.tsx b/cmd/server/api/frontends/bui/src/components/DocsSDKKronk.tsx
index 36f3de83c..520737de4 100644
--- a/cmd/server/api/frontends/bui/src/components/DocsSDKKronk.tsx
+++ b/cmd/server/api/frontends/bui/src/components/DocsSDKKronk.tsx
@@ -519,7 +519,7 @@ export default function DocsSDKKronk() {
Version
- {`const Version = "1.32.9-rc"`}
+ {`const Version = "1.32.9"`}
Version contains the current version of the kronk package. Bump this in the same commit that prepares a `v<X.Y.Z>` release tag — CI guards the release pipeline (.github/workflows/release.yaml and docker.yml, via .github/scripts/check-version.sh) and refuses to publish a tag whose value does not match this constant.
diff --git a/cmd/server/api/services/kronk/static/assets/index.js b/cmd/server/api/services/kronk/static/assets/index.js
index 866d49062..be0ce1db6 100644
--- a/cmd/server/api/services/kronk/static/assets/index.js
+++ b/cmd/server/api/services/kronk/static/assets/index.js
@@ -231,7 +231,7 @@ kronk server start`})]})]})}function Ls(e){let t=/^([\d.]+)\s*(MB|GB|KB|B)?$/i.e
}`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`ResponseTextFormat specifies the text format configuration.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`type-responseusage`,children:[(0,G.jsx)(`h4`,{children:`ResponseUsage`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:'type ResponseUsage struct {\n InputTokens int `json:"input_tokens"`\n InputTokensDetails InputTokensDetails `json:"input_tokens_details"`\n OutputTokens int `json:"output_tokens"`\n OutputTokenDetail OutputTokensDetails `json:"output_tokens_details"`\n TotalTokens int `json:"total_tokens"`\n}'})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`ResponseUsage contains token usage information.`})]})]}),(0,G.jsxs)(`div`,{className:`card`,id:`methods`,children:[(0,G.jsx)(`h3`,{children:`Methods`}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`method-kronk-activestreams`,children:[(0,G.jsx)(`h4`,{children:`Kronk.ActiveStreams`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func (krn *Kronk) ActiveStreams() int`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`ActiveStreams returns the number of active streams.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`method-kronk-batchenginesnapshot`,children:[(0,G.jsx)(`h4`,{children:`Kronk.BatchEngineSnapshot`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func (krn *Kronk) BatchEngineSnapshot() (model.BatchEngineSnapshot, bool)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`BatchEngineSnapshot returns the latest generation scheduler state. Models used only for embeddings or reranking do not expose a batch engine.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`method-kronk-chat`,children:[(0,G.jsx)(`h4`,{children:`Kronk.Chat`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func (krn *Kronk) Chat(ctx context.Context, d model.D) (model.ChatResponse, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`Chat provides support to interact with an inference model. For text models, NSeqMax controls parallel sequence processing within a single model instance. For vision/audio models, NSeqMax creates multiple model instances in a pool for concurrent request handling.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`method-kronk-chatstreaming`,children:[(0,G.jsx)(`h4`,{children:`Kronk.ChatStreaming`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func (krn *Kronk) ChatStreaming(ctx context.Context, d model.D) (<-chan model.ChatResponse, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`ChatStreaming provides support to interact with an inference model. For text models, NSeqMax controls parallel sequence processing within a single model instance. For vision/audio models, NSeqMax creates multiple model instances in a pool for concurrent request handling. When stream_options.include_usage is true, the terminal choice is followed by a usage response with an empty Choices slice.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`method-kronk-chatstreaminghttp`,children:[(0,G.jsx)(`h4`,{children:`Kronk.ChatStreamingHTTP`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func (krn *Kronk) ChatStreamingHTTP(ctx context.Context, w http.ResponseWriter, d model.D) (model.ChatResponse, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`ChatStreamingHTTP provides http handler support for a chat/completions call. For text models, NSeqMax controls parallel sequence processing within a single model instance. For vision/audio models, NSeqMax creates multiple model instances in a pool for concurrent request handling.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`method-kronk-decision`,children:[(0,G.jsx)(`h4`,{children:`Kronk.Decision`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func (krn *Kronk) Decision(ctx context.Context, req model.DecisionRequest) (model.DecisionResponse, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`Decision evaluates typed questions against shared state using a supported decision model.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`method-kronk-decisionhttp`,children:[(0,G.jsx)(`h4`,{children:`Kronk.DecisionHTTP`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func (krn *Kronk) DecisionHTTP(ctx context.Context, log Logger, w http.ResponseWriter, req model.DecisionRequest) (model.DecisionResponse, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`DecisionHTTP provides HTTP handler support for a decision call.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`method-kronk-embeddings`,children:[(0,G.jsx)(`h4`,{children:`Kronk.Embeddings`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func (krn *Kronk) Embeddings(ctx context.Context, d model.D) (model.EmbedReponse, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`Embeddings provides support to interact with an embedding model.`}),(0,G.jsx)(`p`,{className:`doc-description`,children:`Supported options in d: - input (string): the text to embed (required) - truncate (bool): if true, truncate input to fit context window (default: false) - truncate_direction (string): "right" (default) or "left" - dimensions (int): reduce output to first N dimensions (for Matryoshka models)`}),(0,G.jsx)(`p`,{className:`doc-description`,children:`Each model instance processes calls sequentially (llama.cpp only supports sequence 0 for embedding extraction). Use NSeqMax > 1 to create multiple model instances for concurrent request handling. Batch multiple texts in the input parameter for better performance within a single request.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`method-kronk-embeddingshttp`,children:[(0,G.jsx)(`h4`,{children:`Kronk.EmbeddingsHTTP`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func (krn *Kronk) EmbeddingsHTTP(ctx context.Context, log Logger, w http.ResponseWriter, d model.D) (model.EmbedReponse, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`EmbeddingsHTTP provides http handler support for an embeddings call.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`method-kronk-imcsessions`,children:[(0,G.jsx)(`h4`,{children:`Kronk.IMCSessions`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func (krn *Kronk) IMCSessions() []model.IMCSessionDetail`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`IMCSessions returns the current state of the model's allocated IMC cache entries. An unloaded model has no sessions.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`method-kronk-imcsystemcaches`,children:[(0,G.jsx)(`h4`,{children:`Kronk.IMCSystemCaches`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func (krn *Kronk) IMCSystemCaches() []model.IMCSystemCacheDetail`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`IMCSystemCaches returns the model's immutable System cache pool entries.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`method-kronk-modelconfig`,children:[(0,G.jsx)(`h4`,{children:`Kronk.ModelConfig`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func (krn *Kronk) ModelConfig() model.Config`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`ModelConfig returns a copy of the configuration being used. This may be different from the configuration passed to New() if the model has overridden any of the settings.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`method-kronk-modelid`,children:[(0,G.jsx)(`h4`,{children:`Kronk.ModelID`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func (krn *Kronk) ModelID() string`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`ModelID returns the identifier emitted by public inference responses.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`method-kronk-modelinfo`,children:[(0,G.jsx)(`h4`,{children:`Kronk.ModelInfo`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func (krn *Kronk) ModelInfo() model.ModelInfo`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`ModelInfo returns the model information.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`method-kronk-rerank`,children:[(0,G.jsx)(`h4`,{children:`Kronk.Rerank`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func (krn *Kronk) Rerank(ctx context.Context, d model.D) (model.RerankResponse, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`Rerank provides support to interact with a reranker model.`}),(0,G.jsx)(`p`,{className:`doc-description`,children:`Supported options in d: - query (string): the query to rank documents against (required) - documents ([]string): the documents to rank (required) - top_n (int): return only the top N results (optional, default: all) - return_documents (bool): include document text in results (default: false)`}),(0,G.jsx)(`p`,{className:`doc-description`,children:`Each model instance processes calls sequentially (llama.cpp only supports sequence 0 for rerank extraction). Use NSeqMax > 1 to create multiple model instances for concurrent request handling. Batch multiple texts in the input parameter for better performance within a single request.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`method-kronk-rerankhttp`,children:[(0,G.jsx)(`h4`,{children:`Kronk.RerankHTTP`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func (krn *Kronk) RerankHTTP(ctx context.Context, log Logger, w http.ResponseWriter, d model.D) (model.RerankResponse, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`RerankHTTP provides http handler support for a rerank call.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`method-kronk-response`,children:[(0,G.jsx)(`h4`,{children:`Kronk.Response`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func (krn *Kronk) Response(ctx context.Context, d model.D) (ResponseResponse, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`Response provides support to interact with an inference model. For text models, NSeqMax controls parallel sequence processing within a single model instance. For vision/audio models, NSeqMax creates multiple model instances in a pool for concurrent request handling.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`method-kronk-responsestreaming`,children:[(0,G.jsx)(`h4`,{children:`Kronk.ResponseStreaming`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func (krn *Kronk) ResponseStreaming(ctx context.Context, d model.D) (<-chan ResponseStreamEvent, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`ResponseStreaming provides streaming support for the Responses API. For text models, NSeqMax controls parallel sequence processing within a single model instance. For vision/audio models, NSeqMax creates multiple model instances in a pool for concurrent request handling.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`method-kronk-responsestreaminghttp`,children:[(0,G.jsx)(`h4`,{children:`Kronk.ResponseStreamingHTTP`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func (krn *Kronk) ResponseStreamingHTTP(ctx context.Context, w http.ResponseWriter, d model.D) (ResponseResponse, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`ResponseStreamingHTTP provides http handler support for a responses call. For text models, NSeqMax controls parallel sequence processing within a single model instance. For vision/audio models, NSeqMax creates multiple model instances in a pool for concurrent request handling.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`method-kronk-systeminfo`,children:[(0,G.jsx)(`h4`,{children:`Kronk.SystemInfo`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func (krn *Kronk) SystemInfo() map[string]string`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`SystemInfo returns system information.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`method-kronk-tokenize`,children:[(0,G.jsx)(`h4`,{children:`Kronk.Tokenize`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func (krn *Kronk) Tokenize(ctx context.Context, d model.D) (model.TokenizeResponse, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`Tokenize returns the token count for a text input.`}),(0,G.jsx)(`p`,{className:`doc-description`,children:`Supported options in d: - input (string): the text to tokenize (required) - apply_template (bool): if true, wrap input as a user message and apply the model's chat template before tokenizing (default: false) - add_generation_prompt (bool): when apply_template is true, controls whether the assistant role prefix is appended to the prompt (default: true)`}),(0,G.jsx)(`p`,{className:`doc-description`,children:`When apply_template is true, the returned count includes all template overhead (role markers, separators, generation prompt). This reflects the actual number of tokens that would be fed to the model.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`method-kronk-tokenizehttp`,children:[(0,G.jsx)(`h4`,{children:`Kronk.TokenizeHTTP`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func (krn *Kronk) TokenizeHTTP(ctx context.Context, log Logger, w http.ResponseWriter, d model.D) (model.TokenizeResponse, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`TokenizeHTTP provides http handler support for a tokenize call.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`method-kronk-unload`,children:[(0,G.jsx)(`h4`,{children:`Kronk.Unload`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func (krn *Kronk) Unload(ctx context.Context) error`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`Unload will close down the loaded model. You should call this only when you are completely done using Kronk.`})]})]}),(0,G.jsxs)(`div`,{className:`card`,id:`constants`,children:[(0,G.jsx)(`h3`,{children:`Constants`}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`const-logsilent`,children:[(0,G.jsx)(`h4`,{children:`LogSilent`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`const (
LogSilent = applog.LogSilent
LogNormal = applog.LogNormal
-)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`Set of logging levels supported by llama.cpp.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`const-version`,children:[(0,G.jsx)(`h4`,{children:`Version`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`const Version = "1.32.9-rc"`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:"Version contains the current version of the kronk package. Bump this in the same commit that prepares a `v` release tag — CI guards the release pipeline (.github/workflows/release.yaml and docker.yml, via .github/scripts/check-version.sh) and refuses to publish a tag whose value does not match this constant."})]})]}),(0,G.jsxs)(`div`,{className:`card`,id:`variables`,children:[(0,G.jsx)(`h3`,{children:`Variables`}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`var-discardlogger`,children:[(0,G.jsx)(`h4`,{children:`DiscardLogger`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`var DiscardLogger = applog.DiscardLogger`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`DiscardLogger discards logging.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`var-erradmissiontimeout`,children:[(0,G.jsx)(`h4`,{children:`ErrAdmissionTimeout`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`var ErrAdmissionTimeout = errors.New("admission timeout")`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`ErrAdmissionTimeout indicates that a request could not obtain an admission permit within the configured admission timeout.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`var-errresponsecommitted`,children:[(0,G.jsx)(`h4`,{children:`ErrResponseCommitted`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`var ErrResponseCommitted = errors.New("response already committed")`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`ErrResponseCommitted indicates that an HTTP streaming response was already committed before the operation failed.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`var-fmtlogger`,children:[(0,G.jsx)(`h4`,{children:`FmtLogger`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`var FmtLogger = applog.FmtLogger`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`FmtLogger provides a basic logger that writes to stdout.`})]})]})]}),(0,G.jsx)(`nav`,{className:`doc-sidebar`,children:(0,G.jsxs)(`div`,{className:`doc-sidebar-content`,children:[(0,G.jsxs)(`div`,{className:`doc-index-section`,children:[(0,G.jsx)(`a`,{href:`#functions`,className:`doc-index-header`,children:`Functions`}),(0,G.jsxs)(`ul`,{children:[(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#func-autotuneconfig`,children:`AutoTuneConfig`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#func-autotuneconfigwithbudget`,children:`AutoTuneConfigWithBudget`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#func-init`,children:`Init`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#func-initialized`,children:`Initialized`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#func-setfmtloggertraceid`,children:`SetFmtLoggerTraceID`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#func-new`,children:`New`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#func-newwithcontext`,children:`NewWithContext`})})]})]}),(0,G.jsxs)(`div`,{className:`doc-index-section`,children:[(0,G.jsx)(`a`,{href:`#types`,className:`doc-index-header`,children:`Types`}),(0,G.jsxs)(`ul`,{children:[(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-incompletedetail`,children:`IncompleteDetail`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-initoption`,children:`InitOption`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-inputtokensdetails`,children:`InputTokensDetails`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-kronk`,children:`Kronk`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-loglevel`,children:`LogLevel`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-logger`,children:`Logger`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-outputtokensdetails`,children:`OutputTokensDetails`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-responsecontentitem`,children:`ResponseContentItem`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-responseerror`,children:`ResponseError`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-responseformattype`,children:`ResponseFormatType`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-responseoutputitem`,children:`ResponseOutputItem`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-responsereasoning`,children:`ResponseReasoning`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-responseresponse`,children:`ResponseResponse`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-responsestreamevent`,children:`ResponseStreamEvent`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-responsetextformat`,children:`ResponseTextFormat`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-responseusage`,children:`ResponseUsage`})})]})]}),(0,G.jsxs)(`div`,{className:`doc-index-section`,children:[(0,G.jsx)(`a`,{href:`#methods`,className:`doc-index-header`,children:`Methods`}),(0,G.jsxs)(`ul`,{children:[(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-activestreams`,children:`Kronk.ActiveStreams`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-batchenginesnapshot`,children:`Kronk.BatchEngineSnapshot`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-chat`,children:`Kronk.Chat`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-chatstreaming`,children:`Kronk.ChatStreaming`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-chatstreaminghttp`,children:`Kronk.ChatStreamingHTTP`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-decision`,children:`Kronk.Decision`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-decisionhttp`,children:`Kronk.DecisionHTTP`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-embeddings`,children:`Kronk.Embeddings`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-embeddingshttp`,children:`Kronk.EmbeddingsHTTP`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-imcsessions`,children:`Kronk.IMCSessions`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-imcsystemcaches`,children:`Kronk.IMCSystemCaches`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-modelconfig`,children:`Kronk.ModelConfig`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-modelid`,children:`Kronk.ModelID`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-modelinfo`,children:`Kronk.ModelInfo`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-rerank`,children:`Kronk.Rerank`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-rerankhttp`,children:`Kronk.RerankHTTP`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-response`,children:`Kronk.Response`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-responsestreaming`,children:`Kronk.ResponseStreaming`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-responsestreaminghttp`,children:`Kronk.ResponseStreamingHTTP`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-systeminfo`,children:`Kronk.SystemInfo`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-tokenize`,children:`Kronk.Tokenize`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-tokenizehttp`,children:`Kronk.TokenizeHTTP`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-unload`,children:`Kronk.Unload`})})]})]}),(0,G.jsxs)(`div`,{className:`doc-index-section`,children:[(0,G.jsx)(`a`,{href:`#constants`,className:`doc-index-header`,children:`Constants`}),(0,G.jsxs)(`ul`,{children:[(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#const-logsilent`,children:`LogSilent`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#const-version`,children:`Version`})})]})]}),(0,G.jsxs)(`div`,{className:`doc-index-section`,children:[(0,G.jsx)(`a`,{href:`#variables`,className:`doc-index-header`,children:`Variables`}),(0,G.jsxs)(`ul`,{children:[(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#var-discardlogger`,children:`DiscardLogger`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#var-erradmissiontimeout`,children:`ErrAdmissionTimeout`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#var-errresponsecommitted`,children:`ErrResponseCommitted`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#var-fmtlogger`,children:`FmtLogger`})})]})]})]})})]})]})}function Xv(){let e=ot();return(0,S.useEffect)(()=>{let t=document.querySelector(`.main-content`);if(!t)return;if(!e.hash){t.scrollTo({top:0});return}let n=e.hash.slice(1);requestAnimationFrame(()=>{let e=document.getElementById(n);if(!e)return;let r=t.getBoundingClientRect(),i=e.getBoundingClientRect().top-r.top+t.scrollTop;t.scrollTo({top:i-20,behavior:`smooth`})})},[e.key,e.hash]),(0,G.jsxs)(`div`,{children:[(0,G.jsxs)(`div`,{className:`page-header`,children:[(0,G.jsx)(`h2`,{children:`Model Package`}),(0,G.jsx)(`p`,{children:`Package model provides the low-level api for working with models. This is an internal package and should not be used directly. If you use this package directly you are on your own. The project reserves the right to break this API.`})]}),(0,G.jsxs)(`div`,{className:`doc-layout`,children:[(0,G.jsxs)(`div`,{className:`doc-content`,children:[(0,G.jsxs)(`div`,{className:`card`,children:[(0,G.jsx)(`h3`,{children:`Import`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`import "github.com/ardanlabs/kronk/sdk/kronk/model"`})})]}),(0,G.jsxs)(`div`,{className:`card`,id:`functions`,children:[(0,G.jsx)(`h3`,{children:`Functions`}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-addparams`,children:[(0,G.jsx)(`h4`,{children:`AddParams`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func AddParams(params Params, d D)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`AddParams adds the values from the Params struct into the provided D map. Only non-zero values are added.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-inityzmaworkarounds`,children:[(0,G.jsx)(`h4`,{children:`InitYzmaWorkarounds`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func InitYzmaWorkarounds(string) error`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`InitYzmaWorkarounds initializes Kronk-specific Yzma compatibility code.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-recurrentstatecopies`,children:[(0,G.jsx)(`h4`,{children:`RecurrentStateCopies`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func RecurrentStateCopies(cfg Config, embeddedMTP bool) int64`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`RecurrentStateCopies returns the number of current and rollback recurrent state planes allocated for the configured speculative-decoding mode. embeddedMTP selects the auto-detected MTP path; false selects an explicit separate drafter or companion MTP file.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-registerparser`,children:[(0,G.jsx)(`h4`,{children:`RegisterParser`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func RegisterParser(f ParserFactory)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`RegisterParser appends a parser factory to the registry. Call once per parser at server bootstrap, before any models are loaded. Order matters: the catch-all parser (fallback) must be registered last so the more specific parsers get first chance to claim.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-speculativecontextcount`,children:[(0,G.jsx)(`h4`,{children:`SpeculativeContextCount`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func SpeculativeContextCount(cfg Config) int64`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`SpeculativeContextCount returns the native contexts known from configuration before the target GGUF metadata is inspected. A companion MTP model creates a second target-shaped context. A separate classic drafter is estimated from its own GGUF, while embedded MTP is detected from the target's NextN metadata.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-validatechatrequest`,children:[(0,G.jsx)(`h4`,{children:`ValidateChatRequest`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func ValidateChatRequest(d D) error`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`ValidateChatRequest validates the fields in a chat request document.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-validatemessages`,children:[(0,G.jsx)(`h4`,{children:`ValidateMessages`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func ValidateMessages(d D) error`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`ValidateMessages validates the messages field of a chat document.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-newgrammarsampler`,children:[(0,G.jsx)(`h4`,{children:`NewGrammarSampler`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func NewGrammarSampler(vocab llama.Vocab, grammar string) *grammarSampler`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`NewGrammarSampler creates a grammar sampler that will be managed separately from the main sampler chain.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-verifyartifact`,children:[(0,G.jsx)(`h4`,{children:`VerifyArtifact`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func VerifyArtifact(modelFile string, digest ArtifactDigest, previous *ArtifactVerification, checkSHA bool) (ArtifactVerification, bool, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`VerifyArtifact checks modelFile against parsed integrity values. It reads the artifact itself but performs no sidecar I/O. The returned bool reports whether a new verification was produced and should be persisted by the caller.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-parsedecisionprotocol`,children:[(0,G.jsx)(`h4`,{children:`ParseDecisionProtocol`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func ParseDecisionProtocol(value string) (DecisionProtocol, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`ParseDecisionProtocol parses value and returns the corresponding DecisionProtocol when it exists.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-parseggmltype`,children:[(0,G.jsx)(`h4`,{children:`ParseGGMLType`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func ParseGGMLType(s string) (GGMLType, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`ParseGGMLType parses a string into a GGMLType. Supported values: "f32", "f16", "q4_0", "q4_1", "q5_0", "q5_1", "q8_0", "bf16", "auto".`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-parseloadmode`,children:[(0,G.jsx)(`h4`,{children:`ParseLoadMode`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func ParseLoadMode(s string) (LoadMode, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`ParseLoadMode parses a string into a LoadMode.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-parsemoemode`,children:[(0,G.jsx)(`h4`,{children:`ParseMoEMode`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func ParseMoEMode(value string) (MoEMode, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`ParseMoEMode parses value and returns the corresponding MoEMode when it exists.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-newmodel`,children:[(0,G.jsx)(`h4`,{children:`NewModel`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func NewModel(ctx context.Context, cfg Config) (*Model, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`NewModel loads a model from the GGUF files specified in cfg and returns a *Model ready to serve requests. It validates the configuration, builds llama.cpp model parameters, applies NUMA settings, performs the actual GGUF load, computes VRAM/KV diagnostics, retrieves the chat template, and initializes the per-model runtime — either the sequence-batch runtime or context-pool fallback for embed/rerank models, or a batch engine plus parser plugin and optional draft model for generation models.`}),(0,G.jsx)(`p`,{className:`doc-description`,children:`The returned *Model owns the underlying llama.Model, llama.Context, KV memory, batch engine, and (when configured) draft model; release them via Model.Unload when finished.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-detectmodeltypefromfiles`,children:[(0,G.jsx)(`h4`,{children:`DetectModelTypeFromFiles`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func DetectModelTypeFromFiles(modelFiles []string) (ModelType, string, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`DetectModelTypeFromFiles loads a model from the given GGUF files, determines the architecture type, and immediately frees the model. It returns the ModelType, the raw general.architecture string from the GGUF metadata, and any error encountered during loading.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-parseropescalingtype`,children:[(0,G.jsx)(`h4`,{children:`ParseRopeScalingType`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func ParseRopeScalingType(s string) (RopeScalingType, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`ParseRopeScalingType parses a string into a RopeScalingType. Supported values: "none", "linear", "yarn".`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-parsesplitmode`,children:[(0,G.jsx)(`h4`,{children:`ParseSplitMode`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func ParseSplitMode(s string) (SplitMode, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`ParseSplitMode parses a string into a SplitMode. Supported values are "none", "layer", "row", and "tensor".`})]})]}),(0,G.jsxs)(`div`,{className:`card`,id:`types`,children:[(0,G.jsx)(`h3`,{children:`Types`}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`type-adapterconfig`,children:[(0,G.jsx)(`h4`,{children:`AdapterConfig`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`type AdapterConfig struct {
+)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`Set of logging levels supported by llama.cpp.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`const-version`,children:[(0,G.jsx)(`h4`,{children:`Version`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`const Version = "1.32.9"`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:"Version contains the current version of the kronk package. Bump this in the same commit that prepares a `v` release tag — CI guards the release pipeline (.github/workflows/release.yaml and docker.yml, via .github/scripts/check-version.sh) and refuses to publish a tag whose value does not match this constant."})]})]}),(0,G.jsxs)(`div`,{className:`card`,id:`variables`,children:[(0,G.jsx)(`h3`,{children:`Variables`}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`var-discardlogger`,children:[(0,G.jsx)(`h4`,{children:`DiscardLogger`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`var DiscardLogger = applog.DiscardLogger`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`DiscardLogger discards logging.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`var-erradmissiontimeout`,children:[(0,G.jsx)(`h4`,{children:`ErrAdmissionTimeout`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`var ErrAdmissionTimeout = errors.New("admission timeout")`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`ErrAdmissionTimeout indicates that a request could not obtain an admission permit within the configured admission timeout.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`var-errresponsecommitted`,children:[(0,G.jsx)(`h4`,{children:`ErrResponseCommitted`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`var ErrResponseCommitted = errors.New("response already committed")`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`ErrResponseCommitted indicates that an HTTP streaming response was already committed before the operation failed.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`var-fmtlogger`,children:[(0,G.jsx)(`h4`,{children:`FmtLogger`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`var FmtLogger = applog.FmtLogger`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`FmtLogger provides a basic logger that writes to stdout.`})]})]})]}),(0,G.jsx)(`nav`,{className:`doc-sidebar`,children:(0,G.jsxs)(`div`,{className:`doc-sidebar-content`,children:[(0,G.jsxs)(`div`,{className:`doc-index-section`,children:[(0,G.jsx)(`a`,{href:`#functions`,className:`doc-index-header`,children:`Functions`}),(0,G.jsxs)(`ul`,{children:[(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#func-autotuneconfig`,children:`AutoTuneConfig`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#func-autotuneconfigwithbudget`,children:`AutoTuneConfigWithBudget`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#func-init`,children:`Init`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#func-initialized`,children:`Initialized`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#func-setfmtloggertraceid`,children:`SetFmtLoggerTraceID`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#func-new`,children:`New`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#func-newwithcontext`,children:`NewWithContext`})})]})]}),(0,G.jsxs)(`div`,{className:`doc-index-section`,children:[(0,G.jsx)(`a`,{href:`#types`,className:`doc-index-header`,children:`Types`}),(0,G.jsxs)(`ul`,{children:[(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-incompletedetail`,children:`IncompleteDetail`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-initoption`,children:`InitOption`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-inputtokensdetails`,children:`InputTokensDetails`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-kronk`,children:`Kronk`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-loglevel`,children:`LogLevel`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-logger`,children:`Logger`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-outputtokensdetails`,children:`OutputTokensDetails`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-responsecontentitem`,children:`ResponseContentItem`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-responseerror`,children:`ResponseError`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-responseformattype`,children:`ResponseFormatType`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-responseoutputitem`,children:`ResponseOutputItem`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-responsereasoning`,children:`ResponseReasoning`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-responseresponse`,children:`ResponseResponse`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-responsestreamevent`,children:`ResponseStreamEvent`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-responsetextformat`,children:`ResponseTextFormat`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#type-responseusage`,children:`ResponseUsage`})})]})]}),(0,G.jsxs)(`div`,{className:`doc-index-section`,children:[(0,G.jsx)(`a`,{href:`#methods`,className:`doc-index-header`,children:`Methods`}),(0,G.jsxs)(`ul`,{children:[(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-activestreams`,children:`Kronk.ActiveStreams`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-batchenginesnapshot`,children:`Kronk.BatchEngineSnapshot`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-chat`,children:`Kronk.Chat`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-chatstreaming`,children:`Kronk.ChatStreaming`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-chatstreaminghttp`,children:`Kronk.ChatStreamingHTTP`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-decision`,children:`Kronk.Decision`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-decisionhttp`,children:`Kronk.DecisionHTTP`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-embeddings`,children:`Kronk.Embeddings`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-embeddingshttp`,children:`Kronk.EmbeddingsHTTP`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-imcsessions`,children:`Kronk.IMCSessions`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-imcsystemcaches`,children:`Kronk.IMCSystemCaches`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-modelconfig`,children:`Kronk.ModelConfig`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-modelid`,children:`Kronk.ModelID`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-modelinfo`,children:`Kronk.ModelInfo`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-rerank`,children:`Kronk.Rerank`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-rerankhttp`,children:`Kronk.RerankHTTP`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-response`,children:`Kronk.Response`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-responsestreaming`,children:`Kronk.ResponseStreaming`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-responsestreaminghttp`,children:`Kronk.ResponseStreamingHTTP`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-systeminfo`,children:`Kronk.SystemInfo`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-tokenize`,children:`Kronk.Tokenize`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-tokenizehttp`,children:`Kronk.TokenizeHTTP`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#method-kronk-unload`,children:`Kronk.Unload`})})]})]}),(0,G.jsxs)(`div`,{className:`doc-index-section`,children:[(0,G.jsx)(`a`,{href:`#constants`,className:`doc-index-header`,children:`Constants`}),(0,G.jsxs)(`ul`,{children:[(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#const-logsilent`,children:`LogSilent`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#const-version`,children:`Version`})})]})]}),(0,G.jsxs)(`div`,{className:`doc-index-section`,children:[(0,G.jsx)(`a`,{href:`#variables`,className:`doc-index-header`,children:`Variables`}),(0,G.jsxs)(`ul`,{children:[(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#var-discardlogger`,children:`DiscardLogger`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#var-erradmissiontimeout`,children:`ErrAdmissionTimeout`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#var-errresponsecommitted`,children:`ErrResponseCommitted`})}),(0,G.jsx)(`li`,{children:(0,G.jsx)(`a`,{href:`#var-fmtlogger`,children:`FmtLogger`})})]})]})]})})]})]})}function Xv(){let e=ot();return(0,S.useEffect)(()=>{let t=document.querySelector(`.main-content`);if(!t)return;if(!e.hash){t.scrollTo({top:0});return}let n=e.hash.slice(1);requestAnimationFrame(()=>{let e=document.getElementById(n);if(!e)return;let r=t.getBoundingClientRect(),i=e.getBoundingClientRect().top-r.top+t.scrollTop;t.scrollTo({top:i-20,behavior:`smooth`})})},[e.key,e.hash]),(0,G.jsxs)(`div`,{children:[(0,G.jsxs)(`div`,{className:`page-header`,children:[(0,G.jsx)(`h2`,{children:`Model Package`}),(0,G.jsx)(`p`,{children:`Package model provides the low-level api for working with models. This is an internal package and should not be used directly. If you use this package directly you are on your own. The project reserves the right to break this API.`})]}),(0,G.jsxs)(`div`,{className:`doc-layout`,children:[(0,G.jsxs)(`div`,{className:`doc-content`,children:[(0,G.jsxs)(`div`,{className:`card`,children:[(0,G.jsx)(`h3`,{children:`Import`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`import "github.com/ardanlabs/kronk/sdk/kronk/model"`})})]}),(0,G.jsxs)(`div`,{className:`card`,id:`functions`,children:[(0,G.jsx)(`h3`,{children:`Functions`}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-addparams`,children:[(0,G.jsx)(`h4`,{children:`AddParams`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func AddParams(params Params, d D)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`AddParams adds the values from the Params struct into the provided D map. Only non-zero values are added.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-inityzmaworkarounds`,children:[(0,G.jsx)(`h4`,{children:`InitYzmaWorkarounds`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func InitYzmaWorkarounds(string) error`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`InitYzmaWorkarounds initializes Kronk-specific Yzma compatibility code.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-recurrentstatecopies`,children:[(0,G.jsx)(`h4`,{children:`RecurrentStateCopies`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func RecurrentStateCopies(cfg Config, embeddedMTP bool) int64`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`RecurrentStateCopies returns the number of current and rollback recurrent state planes allocated for the configured speculative-decoding mode. embeddedMTP selects the auto-detected MTP path; false selects an explicit separate drafter or companion MTP file.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-registerparser`,children:[(0,G.jsx)(`h4`,{children:`RegisterParser`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func RegisterParser(f ParserFactory)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`RegisterParser appends a parser factory to the registry. Call once per parser at server bootstrap, before any models are loaded. Order matters: the catch-all parser (fallback) must be registered last so the more specific parsers get first chance to claim.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-speculativecontextcount`,children:[(0,G.jsx)(`h4`,{children:`SpeculativeContextCount`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func SpeculativeContextCount(cfg Config) int64`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`SpeculativeContextCount returns the native contexts known from configuration before the target GGUF metadata is inspected. A companion MTP model creates a second target-shaped context. A separate classic drafter is estimated from its own GGUF, while embedded MTP is detected from the target's NextN metadata.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-validatechatrequest`,children:[(0,G.jsx)(`h4`,{children:`ValidateChatRequest`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func ValidateChatRequest(d D) error`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`ValidateChatRequest validates the fields in a chat request document.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-validatemessages`,children:[(0,G.jsx)(`h4`,{children:`ValidateMessages`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func ValidateMessages(d D) error`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`ValidateMessages validates the messages field of a chat document.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-newgrammarsampler`,children:[(0,G.jsx)(`h4`,{children:`NewGrammarSampler`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func NewGrammarSampler(vocab llama.Vocab, grammar string) *grammarSampler`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`NewGrammarSampler creates a grammar sampler that will be managed separately from the main sampler chain.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-verifyartifact`,children:[(0,G.jsx)(`h4`,{children:`VerifyArtifact`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func VerifyArtifact(modelFile string, digest ArtifactDigest, previous *ArtifactVerification, checkSHA bool) (ArtifactVerification, bool, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`VerifyArtifact checks modelFile against parsed integrity values. It reads the artifact itself but performs no sidecar I/O. The returned bool reports whether a new verification was produced and should be persisted by the caller.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-parsedecisionprotocol`,children:[(0,G.jsx)(`h4`,{children:`ParseDecisionProtocol`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func ParseDecisionProtocol(value string) (DecisionProtocol, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`ParseDecisionProtocol parses value and returns the corresponding DecisionProtocol when it exists.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-parseggmltype`,children:[(0,G.jsx)(`h4`,{children:`ParseGGMLType`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func ParseGGMLType(s string) (GGMLType, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`ParseGGMLType parses a string into a GGMLType. Supported values: "f32", "f16", "q4_0", "q4_1", "q5_0", "q5_1", "q8_0", "bf16", "auto".`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-parseloadmode`,children:[(0,G.jsx)(`h4`,{children:`ParseLoadMode`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func ParseLoadMode(s string) (LoadMode, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`ParseLoadMode parses a string into a LoadMode.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-parsemoemode`,children:[(0,G.jsx)(`h4`,{children:`ParseMoEMode`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func ParseMoEMode(value string) (MoEMode, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`ParseMoEMode parses value and returns the corresponding MoEMode when it exists.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-newmodel`,children:[(0,G.jsx)(`h4`,{children:`NewModel`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func NewModel(ctx context.Context, cfg Config) (*Model, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`NewModel loads a model from the GGUF files specified in cfg and returns a *Model ready to serve requests. It validates the configuration, builds llama.cpp model parameters, applies NUMA settings, performs the actual GGUF load, computes VRAM/KV diagnostics, retrieves the chat template, and initializes the per-model runtime — either the sequence-batch runtime or context-pool fallback for embed/rerank models, or a batch engine plus parser plugin and optional draft model for generation models.`}),(0,G.jsx)(`p`,{className:`doc-description`,children:`The returned *Model owns the underlying llama.Model, llama.Context, KV memory, batch engine, and (when configured) draft model; release them via Model.Unload when finished.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-detectmodeltypefromfiles`,children:[(0,G.jsx)(`h4`,{children:`DetectModelTypeFromFiles`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func DetectModelTypeFromFiles(modelFiles []string) (ModelType, string, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`DetectModelTypeFromFiles loads a model from the given GGUF files, determines the architecture type, and immediately frees the model. It returns the ModelType, the raw general.architecture string from the GGUF metadata, and any error encountered during loading.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-parseropescalingtype`,children:[(0,G.jsx)(`h4`,{children:`ParseRopeScalingType`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func ParseRopeScalingType(s string) (RopeScalingType, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`ParseRopeScalingType parses a string into a RopeScalingType. Supported values: "none", "linear", "yarn".`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`func-parsesplitmode`,children:[(0,G.jsx)(`h4`,{children:`ParseSplitMode`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`func ParseSplitMode(s string) (SplitMode, error)`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`ParseSplitMode parses a string into a SplitMode. Supported values are "none", "layer", "row", and "tensor".`})]})]}),(0,G.jsxs)(`div`,{className:`card`,id:`types`,children:[(0,G.jsx)(`h3`,{children:`Types`}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`type-adapterconfig`,children:[(0,G.jsx)(`h4`,{children:`AdapterConfig`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`type AdapterConfig struct {
Path string
Scale float32
}`})}),(0,G.jsx)(`p`,{className:`doc-description`,children:`AdapterConfig configures a local llama.cpp-compatible LoRA adapter GGUF. Scale is fixed for the lifetime of the loaded model.`})]}),(0,G.jsxs)(`div`,{className:`doc-section`,id:`type-artifactdigest`,children:[(0,G.jsx)(`h4`,{children:`ArtifactDigest`}),(0,G.jsx)(`pre`,{className:`code-block`,children:(0,G.jsx)(`code`,{children:`type ArtifactDigest struct {
diff --git a/sdk/kronk/kronk.go b/sdk/kronk/kronk.go
index 7dad48469..b5e38e218 100644
--- a/sdk/kronk/kronk.go
+++ b/sdk/kronk/kronk.go
@@ -18,7 +18,7 @@ import (
// release pipeline (.github/workflows/release.yaml and docker.yml, via
// .github/scripts/check-version.sh) and refuses to publish a tag whose
// value does not match this constant.
-const Version = "1.32.9-rc"
+const Version = "1.32.9"
// =============================================================================