Interface ModelExecutor
public interface ModelExecutor
Low-level execution surface used by
InferenceEngine.
Continuous batching uses bind(int[], int)/prefill(int, int[], int)/decodeStep(int[], int[], int[])
instead of monolithic LanguageModel.generate(int[], int, double, double, boolean, long, GenerationListener). Offline callers may
still use LanguageModel.generate(int[], int, double, double, boolean, long, GenerationListener).
-
Method Summary
Modifier and TypeMethodDescriptionintbind(int[] prompt, int totalCapacity) Binds one request into the KV pool (multi-request safe).decode(int[] tokens) Decodes token ids to UTF-8 text.decodeStep(int[] requestIds, int[] lastTokens, int[] positions) One decode step for an active set (same or mixed positions; engine may cohort by position).voidevict(int requestId) Instant Eviction without radix insert.voidfinish(int requestId, int[] sequenceTokens) Inserts into the radix tree (when enabled) and unbinds the request.default voidAdvances pending decode-graph prefetch when the scheduler is idle but KV remains bound (e.g.Primary KV cache pool (rank 0 for TP).default intMax sequence length for this model (prompt + completion).model()Returns the underlying language-model façade.intpadToken()Returns the pad token id.prefill(int requestId, int[] prompt, int prefixLen) Prefills the unbound suffix of a prompt (activates this request alone).default TensorprefillChunk(int requestId, int[] prompt, int from, int to) Prefillsprompt[from, to)(chunked Continuous Batching).default TensorprefillMultimodal(int requestId, QwenVlProcessor.ProcessedMultimodal multimodal, int from, int to) Prefills a multimodal prompt using vision embeds + interleaved mRoPE.intprefixLen(int requestId) Page-aligned matched prefix length for a bound request.default int[][]speculateStep(int[] requestIds, int[] lastTokens, int[] positions, int numDrafts, double[] temperatures, double[] topps) Same asspeculateStep(int[], int[], int[], int, double, double)with per-request sampling parameters, so a cohort whose requests sample differently is still verified in one batched forward.default int[][]speculateStep(int[] requestIds, int[] lastTokens, int[] positions, int numDrafts, double temperature, double topp) One speculative MTP round for a uniform draft depth.int[]Returns stop / EOS token ids.default booleanWhenfalse,InferenceEngineuses serialLanguageModel.generate(int[], int, double, double, boolean, long, GenerationListener)(test stubs without tensors / KV).tryDecode(int[] tokens, boolean skipSpecial) Attempts a streaming decode; returns empty on incomplete UTF-8.default voidwarmPrefix(int requestId, int[] prompt, int prefixLen) After a radix KV prefix hit of lengthprefixLen, restores any non-KV state required before suffix prefill may start atprefixLen.
-
Method Details
-
model
-
kvCachePool
KvCachePool kvCachePool()Primary KV cache pool (rank 0 for TP). May benullonly for models without full-attention layers.- Returns:
- KV cache pool, or
null.
-
padToken
int padToken()Returns the pad token id.- Returns:
- pad token id.
-
stopTokens
int[] stopTokens()Returns stop / EOS token ids.- Returns:
- stop token ids.
-
decode
Decodes token ids to UTF-8 text.- Parameters:
tokens- token ids.- Returns:
- decoded text.
-
tryDecode
Attempts a streaming decode; returns empty on incomplete UTF-8.- Parameters:
tokens- token ids.skipSpecial- whether to skip special tokens.- Returns:
- decoded text, or empty on incomplete UTF-8.
- Throws:
CharacterCodingException- when the sequence is incomplete.
-
supportsStepApi
default boolean supportsStepApi()Whenfalse,InferenceEngineuses serialLanguageModel.generate(int[], int, double, double, boolean, long, GenerationListener)(test stubs without tensors / KV).- Returns:
truewhen bind/prefill/decodeStep are supported.
-
bind
int bind(int[] prompt, int totalCapacity) Binds one request into the KV pool (multi-request safe).- Parameters:
prompt- prompt token ids.totalCapacity- desired slots (prompt + generation).- Returns:
- request id (
> 0).
-
prefixLen
int prefixLen(int requestId) Page-aligned matched prefix length for a bound request.- Parameters:
requestId- id frombind(int[], int).- Returns:
- prefix length (
>= 0).
-
prefill
Prefills the unbound suffix of a prompt (activates this request alone).- Parameters:
requestId- request id.prompt- full prompt tokens.prefixLen- cached prefix to skip (fromprefixLen(int)).- Returns:
- last-position logits shaped
[1, vocab](caller owns).
-
prefillChunk
Prefillsprompt[from, to)(chunked Continuous Batching). Returns last-token logits only whento == prompt.length.- Parameters:
requestId- request id.prompt- full prompt tokens.from- inclusive start position in the prompt.to- exclusive end position.- Returns:
- logits
[1, vocab]when the prompt is fully prefilled; otherwisenull.
-
warmPrefix
default void warmPrefix(int requestId, int[] prompt, int prefixLen) After a radix KV prefix hit of lengthprefixLen, restores any non-KV state required before suffix prefill may start atprefixLen.Default is a no-op (pure Transformer KV reuse). Hybrid models that keep DeltaNet (or similar) state must replay or restore that state here when prefix reuse is enabled.
- Parameters:
requestId- request id frombind(int[], int).prompt- full prompt tokens.prefixLen- page-aligned matched prefix (>= 0).
-
prefillMultimodal
default Tensor prefillMultimodal(int requestId, QwenVlProcessor.ProcessedMultimodal multimodal, int from, int to) Prefills a multimodal prompt using vision embeds + interleaved mRoPE. Default throws; Qwen overrides.- Parameters:
requestId- request id.multimodal- preprocess result.from- inclusive start (normally 0; prefix reuse disabled for VL).to- exclusive end.- Returns:
- logits when
to == inputIds.length, else null.
-
decodeStep
One decode step for an active set (same or mixed positions; engine may cohort by position). Tokens are[B]last tokens; positions are the write index for each row.- Parameters:
requestIds- active KV request ids (order = batch).lastTokens- token id per request.positions- absolute position per request.- Returns:
- logits
[B, vocab](caller owns).
-
speculateStep
default int[][] speculateStep(int[] requestIds, int[] lastTokens, int[] positions, int numDrafts, double temperature, double topp) One speculative MTP round for a uniform draft depth.Default throws; Qwen overrides when MTP weights are loaded.
- Parameters:
requestIds- active KV request ids (order = batch).lastTokens- last committed token per request.positions- absolute position oflastTokens[i](write of next is+1).numDrafts- draft depth (same for every request in this call).temperature- sampling temperature (verify).topp- nucleus top-p (verify).- Returns:
- accepted token ids per request (each length
>= 1; caller owns arrays).
-
speculateStep
default int[][] speculateStep(int[] requestIds, int[] lastTokens, int[] positions, int numDrafts, double[] temperatures, double[] topps) Same asspeculateStep(int[], int[], int[], int, double, double)with per-request sampling parameters, so a cohort whose requests sample differently is still verified in one batched forward. The default delegates to the scalar overload when every request shares the same parameters and otherwise runs the requests one at a time.- Parameters:
requestIds- active KV request ids (order = batch).lastTokens- last committed token per request.positions- absolute position oflastTokens[i](write of next is+1).numDrafts- draft depth (same for every request in this call).temperatures- per-request sampling temperature (verify).topps- per-request nucleus top-p (verify).- Returns:
- accepted token ids per request (each length
>= 1; caller owns arrays).
-
idleDecodeGraphPrefetch
default void idleDecodeGraphPrefetch()Advances pending decode-graph prefetch when the scheduler is idle but KV remains bound (e.g. between continuous-batching waves). -
finish
void finish(int requestId, int[] sequenceTokens) Inserts into the radix tree (when enabled) and unbinds the request.- Parameters:
requestId- request id.sequenceTokens- prompt + completion (no pad).
-
evict
void evict(int requestId) Instant Eviction without radix insert.- Parameters:
requestId- request id.
-
maxSeqLen
default int maxSeqLen()Max sequence length for this model (prompt + completion).- Returns:
- max seq len.
-