Inference context with KV cache.
Option ownership
This module is the single source of truth for the options create/2 accepts.
Callers that forward user options into a context (LlamaCppEx,
LlamaCppEx.Server, LlamaCppEx.MTP) must select them with
tuning_option_keys/0 rather than keeping their own copy of the list — three
hand-maintained copies had already drifted, silently dropping :n_threads,
:n_threads_batch and :n_ubatch on LlamaCppEx.Server.
The keys are split by kind:
tuning_option_keys/0— performance knobs that are safe to forward from any caller. They never change what the context is.structural_option_keys/0— options that decide the context's purpose or size (:embeddings,:pooling_type,:ctx_type,:n_ctx, ...). Each caller sets these explicitly; forwarding them blindly would let, say,embeddings: trueturn a generation server into an embedding context.
Callers pass their own values as [n_ctx: computed] ++ forwarded_opts, which
wins because Keyword.get/3 returns the first match.
Summary
Functions
Clears the KV cache.
Creates a new inference context for the given model.
Decodes a list of tokens through the model.
Runs the generation loop: decodes prompt tokens and generates up to max_tokens new tokens.
Returns the context size.
Returns the number of recurrent-state snapshots per sequence available for partial rollback of speculative drafts.
Returns the max number of sequences.
Options a caller must set explicitly rather than forward blindly.
Options that are safe for a caller to forward from user-supplied opts.
Types
@type t() :: %LlamaCppEx.Context{model: LlamaCppEx.Model.t(), ref: reference()}
Functions
@spec clear(t()) :: :ok
Clears the KV cache.
@spec create( LlamaCppEx.Model.t(), keyword() ) :: {:ok, t()} | {:error, String.t()}
Creates a new inference context for the given model.
Options
Core
:n_ctx- Context size (max tokens). Defaults to2048.:n_batch- Max tokens per decode batch. Defaults ton_ctx.:n_ubatch- Max tokens per micro-batch. Defaults to512.:n_threads- Number of threads for generation. Defaults to system CPU count.:n_threads_batch- Number of threads for prompt processing. Defaults to:n_threads.:n_seq_max- Max number of concurrent sequences. Defaults to1.:embeddings- Enable embedding extraction. Defaults tofalse.:pooling_type- Pooling type for embeddings::unspecified,:none,:mean,:cls,:last,:rank. Defaults to:unspecified.
KV Cache Quantization
:type_k- Data type for K cache. Reduces memory at the cost of precision. Values::f16(default),:f32,:q8_0,:q4_0,:q4_1,:q5_0,:q5_1,:bf16.:type_v- Data type for V cache. Same values as:type_k. Defaults to:f16.
Flash Attention & GPU Offload
:flash_attn- Flash Attention mode::auto(default),:enabled,:disabled.:offload_kqv- Offload KQV ops and KV cache to GPU. Defaults totrue.:op_offload- Offload host tensor operations to device. Defaults totrue.
RoPE Scaling (Context Extension)
:rope_scaling_type- RoPE scaling mode::unspecified(default),:none,:linear,:yarn,:longrope.:rope_freq_base- RoPE base frequency.0.0uses model default.:rope_freq_scale- RoPE frequency scale.0.0uses model default.:yarn_ext_factor- YaRN extrapolation mix factor.-1.0to disable.:yarn_attn_factor- YaRN magnitude scaling.-1.0to disable.:yarn_beta_fast- YaRN low correction dimension.-1.0to disable.:yarn_beta_slow- YaRN high correction dimension.-1.0to disable.:yarn_orig_ctx- YaRN original context length.0to disable.
Misc
:attention_type- Attention type::unspecified(default),:causal,:non_causal. Use:non_causalfor embedding models.:no_perf- Disable performance timing. Defaults totrue.:swa_full- Use full-size sliding window attention cache. Defaults totrue.:kv_unified- Share one KV buffer across all sequences instead of splittingn_ctxevenly between them. Required for cheap cross-sequencememory_seq_cp(prefix sharing); sequences then compete for the sharedn_ctxbudget. Defaults tofalse(llama.cpp default).
Speculative decoding / MTP
:ctx_type- Context kind.:default(the main target context, default) or:mtp(a draft context that consumes MTP heads from the same model). Use:mtptogether with a separate:defaultcontext to drive multi-token-prediction speculative decoding viaLlamaCppEx.MTP.:n_rs_seq- Number of recurrent-state snapshots per sequence to retain for partial rollback of speculative drafts.0(default) disables rollback. For an MTP draft context, set this to your intended max draft length (e.g.3).
Decodes a list of tokens through the model.
@spec generate(t(), LlamaCppEx.Sampler.t(), [integer()], keyword()) :: {:ok, String.t()} | {:error, String.t()}
Runs the generation loop: decodes prompt tokens and generates up to max_tokens new tokens.
Returns the generated text (not including the prompt).
Options
:max_tokens- Maximum tokens to generate. Defaults to256.
Returns the context size.
@spec n_rs_seq(t()) :: non_neg_integer()
Returns the number of recurrent-state snapshots per sequence available for partial rollback of speculative drafts.
0 means the context does not support partial rollback (e.g. a regular target
context with n_rs_seq: 0). For an MTP draft context created with
n_rs_seq: N, this returns at most N.
Returns the max number of sequences.
@spec structural_option_keys() :: [atom()]
Options a caller must set explicitly rather than forward blindly.
See the "Option ownership" section in the module doc.
@spec tuning_option_keys() :: [atom()]
Options that are safe for a caller to forward from user-supplied opts.
See the "Option ownership" section in the module doc.