# Skippy configuration setting matrix This matrix turns the `report.md:144-339` inventory into the checked-in operator reference for future schema and runtime wiring work. `report.md` remains the authoritative inventory source, while this page defines the stable config key paths, ownership expectations, mode support, validation intent, and explicit rejection boundaries that later tasks must preserve. The config file is a future-start and owner-control reload artifact, not a live session mutation layer. Request defaults are merged only at the OpenAI frontend boundary when request fields are absent or null, explicit request values win, and the merged defaults never enter `StageConfig`, runtime load structs, protobuf, or lower runtime layers. ## How to read this matrix - `Config key path` is the canonical path later schema and wiring work must use. - `Supported modes` only uses `single-stage`, `staged`, `request-only`, and `documented-rejected`. - `Live-apply behavior` is either `request-time` or `restart/reload only`. - `documented-rejected` means the key is intentionally reserved or the report row is intentionally excluded; operators should never expect a silent no-op. - `Test evidence` points at the checker outputs that originally validated this matrix; the durable, currently-run checks are the compile-time tests in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` and `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`. - `Wiring status` is one of `wired`, `partial`, `unwired`, or `rejected`, and must agree with the `Status` column for the same key path in `website/src/docs/pages/config-reference.md`. A compile-time test in `mesh-llm-config` fails the build when the two disagree. ## Operator semantics - Precedence is request values, then per-model config, then `[defaults.*]`, then family or topology policy, then built-in runtime defaults. - Staged-only controls are gated at translation boundaries. Prefill controls, speculative draft controls, and manual stage layer ranges only execute in staged mode. - Unsupported or deferred rows are intentionally marked `documented-rejected` or excluded from the matrix. Logprobs, backend sampling bags, adaptive sampling, and operational or security exclusions live in that `documented-rejected` bucket. ## Deterministic throughput macro mappings - `throughput.tuning_profile=throughput` biases toward larger batch or ubatch, enables continuous batching when safe, and raises `parallel` if the estimator says memory permits it. - `throughput.tuning_profile=balanced` preserves today’s runtime defaults. - `throughput.tuning_profile=saver` biases toward smaller batch or ubatch, and lower `parallel`. - `safety_margin_gb` is not a saved key here. Later wiring should derive `hardware.fit_target_mib` by subtracting reserved MiB from detected allocatable memory and must never write the resolved MiB value back into TOML. ## Coverage guarantee `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs` asserts that a fixed set of representative key paths (`model_fit.ctx_size`, `model_fit.prefix_cache.max_entries`, `hardware.stage_layer_start`, `hardware.stage_layer_end`, `skippy.prefill_chunk_schedule`, `speculative.draft_gpu_layers`, `request_defaults.reasoning_budget`, `multimodal.mmproj`, `advanced.server.alias`) appears exactly once in this matrix. `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` separately asserts that every key path documented here also appears in the public website configuration reference, with the same `Wiring status`. ## Node-local disk prompt cache | Report section | Report setting name | Config key path | Priority | Owner module | Translation target | Supported modes | Live-apply behavior | Default source | Validation rule | Docs anchor | Test evidence | Notes | Wiring status | |---|---|---|---|---|---|---|---|---|---|---|---|---|---| | #1576 | Disk cache mode | `runtime.kv_cache.disk.mode` | P0 | `mesh-llm-config` / host runtime | node-scoped `L3CacheManager` | single-stage, staged | process restart | `off` | enum `off`, `auto`, or `fixed` | `#node-local-disk-prompt-cache` | `mesh-llm-config` schema and validation tests | Turning off never deletes existing cache data | wired | | #1576 | Disk cache directory | `runtime.kv_cache.disk.directory` | P0 | host runtime | node-scoped cache root | single-stage, staged | process restart | `$MESH_LLM_HOME/kv-cache` | explicit values must be absolute | `#node-local-disk-prompt-cache` | `mesh-llm-config` validation tests | Directory changes do not migrate or delete old data | wired | | #1576 | Fixed disk budget | `runtime.kv_cache.disk.budget_mib` | P0 | host runtime / `skippy-cache` | manager hard byte budget | single-stage, staged | applies dynamically | unset | required and > 0 only in fixed mode | `#node-local-disk-prompt-cache` | config precedence and manager limit tests | One shared physical cap per node root; never unbounded | wired | | #1576 | Minimum free storage | `runtime.kv_cache.disk.minimum_free_mib` | P0 | host runtime / `skippy-cache` | manager free-space reserve | single-stage, staged | applies dynamically | `16384` MiB | at least `1024` MiB | `#node-local-disk-prompt-cache` | config precedence and low-space transition tests | Writes decline while fills remain available | wired | | #1652 | Disk cache codec | `runtime.kv_cache.disk.codec` | P1 | host runtime / `skippy-cache` / native runtime | per-stage durable write and restore | single-stage, staged | process restart | `native` | enum `native` or `cachegen`; CacheGen activates only for qualified Metal KV layouts | `#node-local-disk-prompt-cache` | config, archive, serving-worker, and native import tests | Unqualified or failed encodes write exact native pages | wired | ## Model fit, context, and KV cache | Report section | Report setting name | Config key path | Priority | Owner module | Translation target | Supported modes | Live-apply behavior | Default source | Validation rule | Docs anchor | Test evidence | Notes | Wiring status | |---|---|---|---|---|---|---|---|---|---|---|---|---|---| | 5.1 | Context size | `model_fit.ctx_size` | P0 | `plugin/config.rs` | SkippyModelLoadOptions, StageConfig | single-stage, staged | restart/reload only | llama.cpp or stage runtime default | integer >= 1; size must fit estimated KV memory budget | `#model-fit-context-and-kv-cache` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | ctx size control for model and stage load | wired | | 5.1 | Batch size | `model_fit.batch` | P0 | `plugin/config.rs` | SkippyModelLoadOptions, StageConfig, RuntimeConfig | single-stage, staged | restart/reload only | runtime family default unless tuning profile overrides | integer >= 1; should be >= ubatch when operator pins both | `#model-fit-context-and-kv-cache` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | maps to n_batch | wired | | 5.1 | Micro-batch size | `model_fit.ubatch` | P0 | `plugin/config.rs` | SkippyModelLoadOptions, StageConfig, RuntimeConfig | single-stage, staged | restart/reload only | runtime family default unless tuning profile overrides | integer >= 1; should be <= batch to avoid contradictory sizing | `#model-fit-context-and-kv-cache` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | maps to n_ubatch | wired | | 5.1 | KV cache K dtype | `model_fit.cache_type_k` | P0 | `plugin/config.rs` | SkippyModelLoadOptions, StageConfig | single-stage, staged | restart/reload only | package-validated publisher KV declaration, then compute dtype, then F16 | enum value accepted by embedded llama runtime; explicit value wins | `#model-fit-context-and-kv-cache` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | explicit K cache dtype override | wired | | 5.1 | KV cache V dtype | `model_fit.cache_type_v` | P0 | `plugin/config.rs` | SkippyModelLoadOptions, StageConfig | single-stage, staged | restart/reload only | package-validated publisher KV declaration, then compute dtype, then F16 | enum value accepted by embedded llama runtime; explicit value wins | `#model-fit-context-and-kv-cache` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | explicit V cache dtype override | wired | | 5.1 | KV offload | `model_fit.kv_offload` | P1 | `plugin/config.rs` | SkippyModelLoadOptions, StageConfig, native `skippy_runtime_config.kv_offload` tri-state | single-stage, staged | restart/reload only | backend runtime default | boolean or auto; auto preserves llama.cpp's derived `offload_kqv` default | `#model-fit-context-and-kv-cache` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; capture tests in `skippy/crates/skippy-runtime/src/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | controls KV residency and offload policy | wired | | 5.1 | Unified KV cache | `model_fit.kv_unified` | P1 | `plugin/config.rs` | SkippyModelLoadOptions, StageConfig, native `skippy_runtime_config.kv_unified` tri-state | single-stage, staged | restart/reload only | derived from lane count | auto derives from lane count; true and false override it (recurrent/hybrid models force true and multi-lane activation exports require true) | `#model-fit-context-and-kv-cache` | `plugin::config` tests in `mesh/crates/mesh-llm-config/src/model_validation.rs` and `skippy/crates/skippy-runtime/src/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | KV layout selection preserved from v0.78.0 | wired | | 5.1 | Cache RAM budget | `model_fit.cache_ram_mib` | P1 | `plugin/config.rs`, `skippy-serving`, `skippy-cache` | `StageKvCacheConfig.l2_max_bytes` and bounded host-RAM L2 exact-state tier | single-stage, staged | restart/reload only | disabled by default | integer >= 0 MiB; zero or unset disables L2; positive values require prefix caching and active L3 | `#model-fit-context-and-kv-cache` | resolver propagation tests in `mesh/crates/mesh-llm-host-runtime/src/inference/skippy/resolver/tests.rs`; promotion and admission tests in `skippy-serving` and `skippy-cache`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | repeated or high-value L3 fills promote to L2; L2 hits restore before disk and asynchronously rewarm L1 | wired | | 5.1 | Cache idle slots | `model_fit.cache_idle_slots` | P1 | `plugin/config.rs` | SkippyModelLoadOptions, StageConfig, `skippy-serving::RuntimeState::max_idle_sessions` idle-pool bound | single-stage, staged | restart/reload only | runtime default (unbounded, capped only by `lane_count`) | integer >= 0; bounds the idle session pool size | `#model-fit-context-and-kv-cache` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; `skippy/crates/skippy-serving/src/runtime_state.rs` and `skippy/crates/skippy-serving/src/runtime_state/lane_lifecycle.rs` unit tests; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | bounds retained idle sessions so `drop_session_timed` discards lanes past the configured cap instead of growing the pool unbounded | wired | | 5.1 | Prompt cache / cache prompt | `model_fit.prompt_cache` | P1 | `plugin/config.rs` | cache config or request adapter defaults when executable | single-stage, staged | restart/reload only | disabled unless operator enables reuse | boolean only; reject when selected runtime does not expose prompt-cache behavior | `#model-fit-context-and-kv-cache` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | request prompt reuse toggle | wired | | 5.1 | Prefix cache enable | `model_fit.prefix_cache.enabled` | P1 | `plugin/config.rs` | cache config or SKIPPY_PREFIX_CACHE bridge | single-stage, staged | restart/reload only | cache env default or disabled | boolean only; when false, ignore remaining prefix_cache fields | `#model-fit-context-and-kv-cache` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | top-level exact-prefix cache toggle | wired | | 5.1 | Prefix cache max entries | `model_fit.prefix_cache.max_entries` | P1 | `plugin/config.rs` | cache config or SKIPPY_KV_CACHE_MAX_ENTRIES bridge | single-stage, staged | restart/reload only | runtime cache default | integer >= 1 when prefix_cache.enabled is true | `#model-fit-context-and-kv-cache` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | entry-count cap for exact-prefix cache | wired | | 5.1 | Prefix cache max bytes | `model_fit.prefix_cache.max_bytes` | P1 | `plugin/config.rs` | cache config or SKIPPY_KV_CACHE_MAX_BYTES bridge | single-stage, staged | restart/reload only | 0 or unset means no explicit byte cap | integer >= 0 bytes; keep within host memory policy | `#model-fit-context-and-kv-cache` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | byte cap for exact-prefix cache | wired | | 5.1 | Prefix cache min tokens | `model_fit.prefix_cache.min_tokens` | P2 | `plugin/config.rs` | cache config or SKIPPY_KV_CACHE_MIN_TOKENS bridge | single-stage, staged | restart/reload only | runtime cache default | integer >= 1 when prefix cache is enabled | `#model-fit-context-and-kv-cache` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | minimum prompt length to cache | wired | | 5.1 | Shared prefix stride | `model_fit.prefix_cache.shared_stride_tokens` | P2 | `plugin/config.rs` | cache config or SKIPPY_KV_CACHE_SHARED_STRIDE_TOKENS bridge | single-stage, staged | restart/reload only | runtime cache default | integer >= 1; meaningful only for shared-prefix record mode | `#model-fit-context-and-kv-cache` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | shared-prefix matching stride | wired | | 5.1 | Shared record limit | `model_fit.prefix_cache.shared_record_limit` | P2 | `plugin/config.rs` | cache config or SKIPPY_KV_CACHE_SHARED_RECORD_LIMIT bridge | single-stage, staged | restart/reload only | runtime cache default | integer >= 1; meaningful only for shared-prefix record mode | `#model-fit-context-and-kv-cache` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | limit for shared-prefix retained records | wired | | 5.1 | Keep tokens | `model_fit.keep_tokens` | P2 | `plugin/config.rs` | Schema-reserved only; resolver fail-closed today | single-stage, staged | restart/reload only | runtime default | integer >= 0 and <= ctx_size when both are set; not executable today | `#model-fit-context-and-kv-cache` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | session prompt retention control; schema-reserved until a real executable surface exists | unwired | | 5.1 | Context shift | `model_fit.context_shift` | P2 | `plugin/config.rs` | Schema-reserved only; resolver fail-closed today | single-stage, staged | restart/reload only | runtime default | boolean toggle only; not executable today | `#model-fit-context-and-kv-cache` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | long-running chat context-shift behavior; schema-reserved until a real executable surface exists | unwired | | 5.1 | SWA full | `model_fit.swa_full` | P2 | `plugin/config.rs` | SkippyModelLoadOptions, StageConfig, native `skippy_runtime_config.swa_full` tri-state | single-stage, staged | restart/reload only | family default | boolean or unset; unset preserves llama.cpp's built-in default (full) | `#model-fit-context-and-kv-cache` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; capture tests in `skippy/crates/skippy-runtime/src/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | model-specific sliding-window attention behavior | wired | | 5.1 | Checkpoints | `model_fit.checkpoint_interval
model_fit.checkpoint_count` | P2 | `plugin/config.rs` | Schema-reserved only; resolver fail-closed today | single-stage, staged | restart/reload only | disabled unless operator requests checkpointing | interval integer >= 1 and count integer >= 1 when either field is set; not executable today | `#model-fit-context-and-kv-cache` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | advanced checkpoint interval and retention controls; schema-reserved until a real executable surface exists | unwired | | 5.1 | Lookup caches | `model_fit.lookup_cache_static
model_fit.lookup_cache_dynamic` | P2 | `plugin/config.rs` | Schema-reserved only; resolver fail-closed today | single-stage, staged | restart/reload only | disabled unless operator opts in | path or identifier strings must resolve to runtime-supported lookup cache assets; not executable today | `#model-fit-context-and-kv-cache` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | niche static and dynamic lookup-cache wiring; schema-reserved until a real executable surface exists | unwired | ## Hardware allocation and model loading | Report section | Report setting name | Config key path | Priority | Owner module | Translation target | Supported modes | Live-apply behavior | Default source | Validation rule | Docs anchor | Test evidence | Notes | Wiring status | |---|---|---|---|---|---|---|---|---|---|---|---|---|---| | 5.2 | Runtime/backend flavor | `hardware.model_runtime` | P1 | `plugin/config.rs` | none | documented-rejected | restart/reload only | auto-detected host backend | reject when set | `#hardware-allocation-and-model-loading` | `exact_head_blockers::every_silent_no_op_and_false_mmap_control_fails_static_validation` | host backend selection is not model config | rejected | | 5.2 | Device selection | `hardware.device` | P0 | `plugin/config.rs` | StageConfig selected_device or local runtime device selector | single-stage, staged | restart/reload only | planner default chooses best local device | backend-specific device id or index string must resolve on target host | `#hardware-allocation-and-model-loading` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | multi-GPU and mixed-backend pinning | wired | | 5.2 | GPU layers | `hardware.gpu_layers` | P0 | `plugin/config.rs` | StageConfig n_gpu_layers or local llama offload field | single-stage, staged | restart/reload only | runtime default or auto | integer >= -1; -1 means auto or all where backend supports it | `#hardware-allocation-and-model-loading` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | core offload depth control | wired | | 5.2 | Skippy layer ranges | see 5.4 Stage layer start/end row | P0 | `plugin/config.rs` | topology planner and StageConfig layer ownership | staged | restart/reload only | planner-generated unless operator pins manual split | same validation as the canonical stage layer start/end row | `#hardware-allocation-and-model-loading` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | report row points at the same canonical staged split keys without duplicating them | wired | | 5.4 | Stage layer start/end | `hardware.stage_layer_start
hardware.stage_layer_end` | P0 | `plugin/config.rs` | topology planner and StageConfig layer ownership | staged | restart/reload only | planner-generated unless operator pins manual split | start >= 0; end > start; ranges must be contiguous in manual staged mode | `#hardware-allocation-and-model-loading` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | manual contiguous layer-range ownership | wired | | 5.2 | Placement mode | `hardware.placement` | P0 | `plugin/config.rs` | topology planner placement strategy | single-stage, staged | restart/reload only | mesh placement policy default | enum must match supported planner strategies | `#hardware-allocation-and-model-loading` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | pooled vs separated placement strategy | unwired | | 5.2 | Tensor split | `hardware.tensor_split` | P0 | `plugin/config.rs` | local llama tensor-split field | single-stage, staged | restart/reload only | unset unless multi-GPU operator pins ratios | comma-separated ratios or backend-native split spec; total must be parseable and non-negative | `#hardware-allocation-and-model-loading` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | local multi-GPU tensor split ratios | unwired | | 5.2 | Split mode | `hardware.split_mode` | P0 | `plugin/config.rs` | `llama_model_params.split_mode` via `skippy_runtime_config.split_mode` | single-stage, staged | restart/reload only | runtime default | enum accepted by embedded llama runtime | `#hardware-allocation-and-model-loading` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; resolver: `hardware_split_mode_variants_reach_different_stage_configs`, `hardware_split_mode_per_model_override_beats_default`, `hardware_split_mode_rejects_invalid_value` in `mesh/crates/mesh-llm-host-runtime/src/inference/skippy/resolver/tests.rs`; native mapping: `runtime_config_raw_split_mode_variants_are_distinct` in `skippy/crates/skippy-runtime/src/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | row or layer split behavior for multi-GPU load | partial | | 5.2 | Main GPU | `hardware.main_gpu` | P1 | `plugin/config.rs` | `llama_model_params.main_gpu` via `skippy_runtime_config.main_gpu`/`has_main_gpu_override` | single-stage, staged | restart/reload only | backend runtime default | integer >= 0; overridden by `selected_backend_device` when both are set | `#hardware-allocation-and-model-loading` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; resolver: `hardware_main_gpu_variants_reach_different_stage_configs`, `hardware_main_gpu_per_model_override_beats_default` in `mesh/crates/mesh-llm-host-runtime/src/inference/skippy/resolver/tests.rs`; native mapping: `runtime_config_raw_main_gpu_override_and_unset_are_distinct` in `skippy/crates/skippy-runtime/src/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | primary device for split-mode tuning | partial | | 5.2 | CPU MoE / n-cpu-moe | `hardware.cpu_moe
hardware.n_cpu_moe` | P1 | `plugin/config.rs` | `llama_model_params.tensor_buft_overrides` via `skippy_runtime_config.host_expert_layer_start/end` | single-stage, staged | restart/reload only | every routed expert on the accelerator (`auto`) | `cpu_moe` boolean or `"auto"`; `n_cpu_moe` integer >= 0 counts model blocks from block 0, mirroring llama.cpp `--n-cpu-moe`; `cpu_moe = false` wins over `n_cpu_moe`; the two fields resolve per source (model beats defaults), so a defaults-level `cpu_moe = true` overrides a model-level `n_cpu_moe = N` and places every routed expert on the host | `#hardware-allocation-and-model-loading` | resolver: `hardware_cpu_moe_policy_reaches_stage_config` in `mesh/crates/mesh-llm-skippy-adapter/src/config/hardware_translation_tests.rs`; native mapping: `runtime_config_raw_carries_host_expert_layer_range` in `skippy/crates/skippy-runtime/src/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | host-resident routed experts for MoE families on discrete-GPU hosts | wired | | 5.2 | RPC backend | `hardware.rpc_backend` | P2 | `plugin/config.rs` | none; documented as lower-layer transport choice | documented-rejected | restart/reload only | not exposed in operator model config | reject if set; mesh abstracts lower-layer RPC backend selection | `#hardware-allocation-and-model-loading` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | reserved only for future lower-layer runtime ownership | rejected | | 5.2 | Fit params | — | P1 | `plugin/config.rs` | implicit planner behavior via safety_margin_gb and fit_target_mib | documented-rejected | restart/reload only | planner internal default | document only; there is no standalone checked-in config key for fit params | `#hardware-allocation-and-model-loading` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | covered indirectly by fit target and safety margin mapping | rejected | | 5.2 | Fit target | `hardware.fit_target_mib` | P0 | `plugin/config.rs` | GPU tuner and Skippy resolver | wired | restart/reload only | derived from allocatable memory | preserve or tune explicitly | `#hardware-allocation-and-model-loading` | `gpus::tune::apply_write_tests`; `inference::skippy::resolver::tests` | tuner-authored values feed live fit planning | wired | | 5.2 | Fit context | `hardware.fit_context` | P1 | `plugin/config.rs` | none | documented-rejected | restart/reload only | planner internal | reject when set | `#hardware-allocation-and-model-loading` | `exact_head_blockers::every_silent_no_op_and_false_mmap_control_fails_static_validation` | no serving planner consumer | rejected | | 5.2 | Override tensor | — | P3 | `plugin/config.rs` | none; dangerous raw override is intentionally not modeled | documented-rejected | restart/reload only | not supported in operator model config | reject if documented key ever appears; lower-layer override-tensor stays raw or debug only | `#hardware-allocation-and-model-loading` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | dangerous tensor override remains outside checked-in model settings | rejected | | 5.2 | Override KV | — | P3 | `plugin/config.rs` | none; dangerous raw override is intentionally not modeled | documented-rejected | restart/reload only | not supported in operator model config | reject if documented key ever appears; lower-layer override-kv stays raw or debug only | `#hardware-allocation-and-model-loading` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | dangerous KV override remains outside checked-in model settings | rejected | | 5.2 | Model path / URL / HF repo/file | `hardware.model_path
hardware.hf_repo
hardware.hf_file` | P1 | `plugin/config.rs` | model resolver and StageConfig model_path materialization | single-stage, staged | restart/reload only | unset until operator or deployment flow selects artifacts | set model_path directly or provide hf_repo plus hf_file for remote resolution; avoid private host-specific paths in docs | `#hardware-allocation-and-model-loading` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | deployment flow model source selection | wired | | 5.2 | HF token / docker model fetch | — | P3 | `none` | none; credentials stay outside Skippy model config | documented-rejected | restart/reload only | operator secret store or deployment environment only | never persist credentials or fetch secrets in checked-in model settings | `#hardware-allocation-and-model-loading` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | matrix-only credential exclusion with security rationale | rejected | | 5.2 | LoRA adapters | `hardware.lora_adapters` | P2 | `plugin/config.rs` | none | documented-rejected | restart/reload only | unset | reject non-empty lists | `#hardware-allocation-and-model-loading` | `exact_head_blockers::every_silent_no_op_and_false_mmap_control_fails_static_validation` | no native adapter load/apply path | rejected | | 5.2 | Control vectors | `hardware.control_vectors` | P2 | `plugin/config.rs` | none | documented-rejected | restart/reload only | unset | reject non-empty lists | `#hardware-allocation-and-model-loading` | `exact_head_blockers::every_silent_no_op_and_false_mmap_control_fails_static_validation` | no native control-vector path | rejected | | 5.2 | Check tensors | `hardware.check_tensors` | P3 | `plugin/config.rs` | `llama_model_params.check_tensors` via `skippy_runtime_config.check_tensors` | single-stage, staged | restart/reload only | disabled unless operator requests validation | boolean toggle only | `#hardware-allocation-and-model-loading` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; resolver: `hardware_check_tensors_true_and_false_reach_different_stage_configs`, `hardware_check_tensors_per_model_override_beats_default` in `mesh/crates/mesh-llm-host-runtime/src/inference/skippy/resolver/tests.rs`; native mapping: `runtime_config_raw_check_tensors_true_and_false_are_distinct` in `skippy/crates/skippy-runtime/src/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | debug or safety validation at load time | partial | | 5.2 | mmap | `hardware.mmap` | P1 | `plugin/config.rs` | runtime file-loading option | single-stage, staged | restart/reload only | runtime default | boolean toggle only | `#hardware-allocation-and-model-loading` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | memory-mapped model load behavior | wired | | 5.2 | mmap prefetch | `hardware.use_mmap_prefetch` | P1 | `plugin/config.rs` | none in native model loading | documented-rejected | restart/reload only | disabled | reject when set | `#hardware-allocation-and-model-loading` | `exact_head_blockers::every_silent_no_op_and_false_mmap_control_fails_static_validation` | Rust propagation is not a native consumer | rejected | | 5.2 | mmap buffer | `hardware.use_mmap_buffer` | P1 | `plugin/config.rs` | none in native model loading | documented-rejected | restart/reload only | disabled | reject when set | `#hardware-allocation-and-model-loading` | `exact_head_blockers::every_silent_no_op_and_false_mmap_control_fails_static_validation` | Rust propagation is not a native consumer | rejected | | 5.2 | mlock | `hardware.mlock` | P1 | `plugin/config.rs` | runtime memory-residency option | single-stage, staged | restart/reload only | disabled unless operator pins residency | boolean toggle only; reject when platform lacks permission | `#hardware-allocation-and-model-loading` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | page-locking residency control | wired | | 5.2 | Direct I/O | `hardware.direct_io` | P2 | `plugin/config.rs` | `llama_model_params.load_mode = LLAMA_LOAD_MODE_DIRECT_IO` via `skippy_runtime_config.use_direct_io`, taking precedence over `mmap`/`mlock` | single-stage, staged | restart/reload only | runtime default | boolean toggle only | `#hardware-allocation-and-model-loading` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; resolver: `hardware_direct_io_true_and_false_reach_different_stage_configs`, `hardware_direct_io_per_model_override_beats_default` in `mesh/crates/mesh-llm-host-runtime/src/inference/skippy/resolver/tests.rs`; native mapping: `runtime_config_raw_direct_io_true_and_false_are_distinct` in `skippy/crates/skippy-runtime/src/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | bypass page cache for model reads | partial | | 5.2 | Repack | `hardware.repack` | P2 | `plugin/config.rs` | `skippy_runtime::RuntimeConfig::as_raw` inverts into the native `disable_repack` control | single-stage, staged | restart/reload only | `false` (repack disabled) | boolean toggle only | `#hardware-allocation-and-model-loading` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; resolver: `hardware_repack_true_and_false_reach_different_stage_configs`, `hardware_repack_per_model_override_beats_default` in `mesh/crates/mesh-llm-host-runtime/src/inference/skippy/resolver/tests.rs`; native mapping: `runtime_config_raw_inverts_repack_into_disable_repack` in `skippy/crates/skippy-runtime/src/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | quantized-tensor repack toggle for the single-node and stage-0 model load path | partial | | 5.2 | Op offload / no host buffer | `hardware.op_offload
hardware.no_host_buffer` | P2 | `plugin/config.rs` | `llama_context_params.op_offload` (tri-state) and `llama_model_params.no_host` via `skippy_runtime_config.op_offload`/`no_host_buffer` | single-stage, staged | restart/reload only | backend runtime defaults | boolean toggles only | `#hardware-allocation-and-model-loading` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; resolver: `hardware_op_offload_true_and_false_reach_different_stage_configs`, `hardware_no_host_buffer_true_and_false_reach_different_stage_configs` in `mesh/crates/mesh-llm-host-runtime/src/inference/skippy/resolver/tests.rs`; native mapping: `runtime_config_raw_forces_op_offload_when_configured`, `runtime_config_raw_no_host_buffer_true_and_false_are_distinct` in `skippy/crates/skippy-runtime/src/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | backend-specific performance flags grouped as one advanced row | partial | | 5.2 | Warmup | `hardware.warmup` | P2 | `plugin/config.rs` | none | documented-rejected | restart/reload only | runtime-owned | reject when set | `#hardware-allocation-and-model-loading` | `exact_head_blockers::every_silent_no_op_and_false_mmap_control_fails_static_validation` | no resolver or warmup-path reader | rejected | ## Throughput, scheduling, and CPU behavior | Report section | Report setting name | Config key path | Priority | Owner module | Translation target | Supported modes | Live-apply behavior | Default source | Validation rule | Docs anchor | Test evidence | Notes | Wiring status | |---|---|---|---|---|---|---|---|---|---|---|---|---|---| | 5.3 | Parallel slots | `throughput.parallel` | P1 | `plugin/config.rs` | EmbeddedOpenAiArgs slots or server concurrency limit | single-stage, staged | restart/reload only | runtime default or tuning profile expansion | integer >= 1; should stay within estimator memory envelope | `#throughput-scheduling-and-cpu-behavior` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | slot or request concurrency control | wired | | 5.3 | Continuous batching | `throughput.continuous_batching` | P1 | `resolver/translation.rs`, `skippy-serving/frontend/iteration_scheduler.rs` | `EmbeddedOpenAiArgs.continuous_batching` and effective scheduler lane count | single-stage, staged | restart/reload only | runtime default or tuning profile expansion | boolean or supported auto policy only | `#throughput-scheduling-and-cpu-behavior` | `continuous_batching_reaches_embedded_scheduler_boundary`; `continuous_batching_controls_multi_request_direct_iterations`; parity: `website_docs_parity` | false serializes scheduler iterations; true/auto uses available lanes | wired | | 5.3 | Runtime threads | `throughput.threads` | P1 | `plugin/config.rs` | RuntimeConfig n_threads | single-stage, staged | restart/reload only | auto from host CPU count unless operator pins it | integer >= 1 | `#throughput-scheduling-and-cpu-behavior` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | CPU inference thread count | wired | | 5.3 | Batch threads | `throughput.threads_batch` | P1 | `plugin/config.rs` | RuntimeConfig n_threads_batch | single-stage, staged | restart/reload only | defaults to threads or runtime default | integer >= 1 | `#throughput-scheduling-and-cpu-behavior` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | CPU batch-processing thread count | wired | | 5.3 | HTTP/server threads | `throughput.threads_http` | P2 | `plugin/config.rs` | EmbeddedOpenAiArgs HTTP worker count | documented-rejected | restart/reload only | host runtime default | reject in model config; thread pool ownership stays with host service settings | `#throughput-scheduling-and-cpu-behavior` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | operational HTTP server tuning stays outside model config | rejected | | 5.3 | Priority | `throughput.priority` | P2 | `plugin/config.rs` | none | documented-rejected | restart/reload only | OS scheduler default | reject; no model-scoped runtime or OS-priority consumer exists | `#throughput-scheduling-and-cpu-behavior` | `pr4_fields_without_runtime_consumers_are_rejected`; parity: `website_docs_parity` | host process priority is not a model setting | rejected | | 5.3 | Polling | `throughput.poll` | P3 | `plugin/config.rs` | none | documented-rejected | restart/reload only | runtime default | reject; embedded native polling policy is unavailable | `#throughput-scheduling-and-cpu-behavior` | `pr4_fields_without_runtime_consumers_are_rejected`; parity: `website_docs_parity` | reserved until a native consumer exists | rejected | | 5.3 | CPU affinity | `throughput.cpu_affinity` | P2 | `plugin/config.rs` | none | documented-rejected | restart/reload only | unset | reject; inference-thread affinity is unavailable | `#throughput-scheduling-and-cpu-behavior` | `pr4_fields_without_runtime_consumers_are_rejected`; parity: `website_docs_parity` | host affinity remains operational configuration | rejected | | 5.3 | NUMA | `throughput.numa` | P2 | `plugin/config.rs` | none | documented-rejected | restart/reload only | runtime default | reject; embedded native NUMA policy is unavailable | `#throughput-scheduling-and-cpu-behavior` | `pr4_fields_without_runtime_consumers_are_rejected`; parity: `website_docs_parity` | reserved until a native consumer exists | rejected | | 5.3 | Slot prompt similarity | `throughput.slot_prompt_similarity` | P2 | `plugin/config.rs` | none | documented-rejected | restart/reload only | runtime prefix-cache policy | reject; Skippy has no configurable similarity threshold | `#throughput-scheduling-and-cpu-behavior` | `pr4_fields_without_runtime_consumers_are_rejected`; parity: `website_docs_parity` | exact-prefix cache affinity remains automatic | rejected | | 5.3 | Sleep idle seconds | `throughput.sleep_idle_seconds` | P2 | `plugin/config.rs` | server idle sleep policy | documented-rejected | restart/reload only | host runtime default | reject in model config; power-management idle sleep stays operational | `#throughput-scheduling-and-cpu-behavior` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | operational power behavior stays outside model settings | rejected | | 5.3 | Tuning profile | `throughput.tuning_profile` | P1 | `resolver/resolution.rs` | policy expander into batch, ubatch, continuous batching, parallel, and memory-saving defaults | single-stage, staged | restart/reload only | balanced policy default | enum throughput, balanced, saver; explicit low-level fields always win over macro expansion | `#throughput-scheduling-and-cpu-behavior` | `resolver_macro_expands_kv_cache_tuning_profile_and_safety_margin`; `per_model_throughput_macro_beats_global_explicit_fields_unless_model_explicit_exists`; parity: `website_docs_parity` | every expanded runtime field now reaches its consumer | wired | ## Skippy staged serving and transport | Report section | Report setting name | Config key path | Priority | Owner module | Translation target | Supported modes | Live-apply behavior | Default source | Validation rule | Docs anchor | Test evidence | Notes | Wiring status | |---|---|---|---|---|---|---|---|---|---|---|---|---|---| | 5.4 | Stage model path | `skippy.stage_model_path` | P1 | `plugin/config.rs` | none | documented-rejected | restart/reload only | canonical model source and verified package | reject; a second stage path would bypass package verification | `#skippy-staged-serving-and-transport` | `pr4_fields_without_runtime_consumers_are_rejected`; parity: `website_docs_parity` | stage artifacts come from the planner | rejected | | 5.4 | Split source policy | `skippy.source_policy` | P0 | `runtime/startup_models.rs`, `runtime/model_lifecycle/load.rs`, `runtime/local_split/attestation.rs` | strict local source admission and content attestation | staged | model reload | `fallback` | enum `fallback` or `local-required`; strict mode requires an already-present GGUF whose SHA-256 matches the advertised content identity | `#skippy-staged-serving-and-transport` | `runtime::tests::startup_models::local_required`; `runtime::model_lifecycle::load::tests`; `runtime::local_split::tests::content_attestation`; parity: `website_docs_parity` | omitted policy preserves resolver fallback; strict mode never downloads replacement bytes | wired | | 5.4 | Stage role/topology metadata | `skippy.stage_role
skippy.stage_topology` | P1 | `plugin/config.rs` | none | documented-rejected | restart/reload only | typed planner output | reject untyped strings; use typed per-model `topology` | `#skippy-staged-serving-and-transport` | `pr4_fields_without_runtime_consumers_are_rejected`; parity: `website_docs_parity` | the hidden lock-file flag remains a maintainer compatibility surface | rejected | | 5.4 | Locked stage topology | `topology.mode
topology.manifest_sha256
topology.stages` | P0 | `runtime/split_topology_lock.rs` | fail-closed locked topology planner | staged | model reload | unset | immutable model revision; verified manifest SHA-256; exactly one endpoint ID or hostname per stage; unique nodes; contiguous half-open full-layer coverage; capacity must pass | `#skippy-staged-serving-and-transport` | `topology_contract`; `configured_topology_reaches_fail_closed_locked_planner` | explicit `--model` and `--gguf` bypass configured topology; model values override defaults | wired | | 5.4 | Stage context | shared model_fit.ctx_size control | P0 | `plugin/config.rs` | StageConfig ctx_size reuse from model_fit namespace | staged | restart/reload only | inherits model_fit.ctx_size | same validation as the canonical model_fit.ctx_size row | `#skippy-staged-serving-and-transport` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | staged serving uses the same context key as single-stage load | wired | | 5.4 | Stage batch settings | shared model_fit.batch and model_fit.ubatch controls | P0 | `plugin/config.rs` | StageConfig n_batch and n_ubatch reuse from model_fit namespace | staged | restart/reload only | inherits model_fit batch defaults | same validation as the canonical model_fit.batch and model_fit.ubatch rows | `#skippy-staged-serving-and-transport` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | staged serving reuses the same batch and ubatch keys | wired | | 5.4 | Stage GPU settings | shared hardware allocation controls | P0 | `plugin/config.rs` | StageConfig GPU placement fields reused from hardware namespace | staged | restart/reload only | inherits hardware namespace defaults | same validation as the canonical hardware allocation rows | `#skippy-staged-serving-and-transport` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | staged serving reuses common device and offload keys | partial | | 5.4 | Binary stage transport mode | `skippy.binary_stage_transport` | P2 | `plugin/config.rs` | none | documented-rejected | restart/reload only | binary transport selected automatically | reject; no alternate staged transport exists | `#skippy-staged-serving-and-transport` | `pr4_fields_without_runtime_consumers_are_rejected`; parity: `website_docs_parity` | binary transport is unconditional | rejected | | 5.4 | OpenAI frontend mode | `skippy.openai_frontend_mode` | P3 | `plugin/config.rs` | none; product service mode stays outside model config | documented-rejected | restart/reload only | host service default | reject if set; frontend surface mode belongs to deployment or service config, not model config | `#skippy-staged-serving-and-transport` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | reserved key path only, not a model setting | rejected | | 5.4 | Lifecycle startup timeout | `skippy.lifecycle_startup_timeout_ms` | P2 | `runtime/local_split/loading.rs` | timeout around downstream stage load | staged | restart/reload only | 900000 ms | integer >= 1 milliseconds | `#skippy-staged-serving-and-transport` | `staged_lifecycle_intervals_use_model_over_defaults`; parity: `website_docs_parity` | bounds staged bring-up | wired | | 5.4 | Lifecycle health interval | `skippy.lifecycle_health_interval_ms` | P2 | `runtime/local_split/coordinator.rs` | coordinator health interval | staged | restart/reload only | 30000 ms | integer >= 1 millisecond | `#skippy-staged-serving-and-transport` | `staged_lifecycle_intervals_use_model_over_defaults`; parity: `website_docs_parity` | per-model values override defaults | wired | | 5.4 | Telemetry / OTLP endpoint | — | P3 | `none` | none; observability endpoint stays in telemetry or deployment config | documented-rejected | restart/reload only | operator observability config only | never store telemetry credentials or endpoints in model settings matrix rows | `#skippy-staged-serving-and-transport` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | matrix-only observability exclusion with rationale | rejected | | 5.4 | Prefill chunking mode | `skippy.prefill_chunking` | P1 | `plugin/config.rs` | embedded OpenAI frontend prefill scheduler mode | staged | restart/reload only | fixed or planner default | enum fixed, schedule, adaptive-ramp or later certified modes only; legacy `auto` normalizes to `fixed` and is not the public operator mode | `#skippy-staged-serving-and-transport` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | prefill scheduler policy for staged serving | wired | | 5.4 | Prefill chunk size/schedule | `skippy.prefill_chunk_size
skippy.prefill_chunk_schedule` | P1 | `plugin/config.rs` | embedded OpenAI frontend prefill scheduler parameters | staged | restart/reload only | chunk size runtime default and schedule unset by default | chunk size integer >= 1; schedule must parse as monotonic comma-separated positive integers when mode=schedule; otherwise the size is ignored | `#skippy-staged-serving-and-transport` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | size and schedule values paired with prefill chunking mode | wired | ## Speculative decoding | Report section | Report setting name | Config key path | Priority | Owner module | Translation target | Supported modes | Live-apply behavior | Default source | Validation rule | Docs anchor | Test evidence | Notes | Wiring status | |---|---|---|---|---|---|---|---|---|---|---|---|---|---| | 5.5 | Speculative strategy override | `speculative.strategy` | P1 | `resolver/speculative.rs` | resolved `SpeculativeDecodeConfig` for the embedded frontend | staged | restart/reload only | `auto`, using package/runtime defaults | `auto`, `disabled`, `mtp`, `dflash` with a DFlash draft model, built-in `ngram-cache` / `ngram-suffix` with valid bounds, or a selected package strategy id; `disabled` turns off target speculation, and DFlash is only selected by `dflash` | `#speculative-decoding` | the `resolver/speculative.rs` unit test suite; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | CLI override wins, then the selected model, then defaults; a named package strategy must be declared by that package | wired | | 5.5 | Speculation mode/type | `speculative.mode` | P1 | `resolver/speculative.rs` | legacy draft-model and standalone N-gram compatibility selection | staged | restart/reload only | `auto` | `auto`, `disabled`, `draft`, or `ngram`; use `strategy` for package and native-MTP selection | `#speculative-decoding` | the `resolver/speculative.rs` unit test suite; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | Kept for draft-model compatibility. New native-MTP and package configurations should use `strategy`. | wired | | 5.5 | Draft model identifier / HF source | `speculative.draft_model
speculative.draft_hf_repo
speculative.draft_hf_file` | P1 | `inference/skippy/resolver/speculative.rs` | draft model resolver | single-stage, staged | restart/reload only | unset until operator or planner chooses a draft model | set a local/HF-style identifier or provide `draft_hf_repo` plus `draft_hf_file` | `#speculative-decoding` | resolver production-translation tests | explicit draft model source selection | wired | | 5.5 | Draft model auto-selection | `speculative.draft_selection_policy` | P1 | `inference/skippy/resolver/speculative.rs` | sibling draft resolver policy | single-stage, staged | restart/reload only | `auto` | `manual` or `auto` | `#speculative-decoding` | resolver production-translation tests | automatic sibling draft/EAGLE selection | wired | | 5.5 | Pairing fault behavior | `speculative.pairing_fault` | P1 | `plugin/config.rs` | draft pairing safety handler | single-stage, staged | restart/reload only | safe fallback policy default | enum fail-open, fail-closed, or later certified policies only | `#speculative-decoding` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | what to do when draft pairing is invalid | wired | | 5.5 | Draft max tokens | `speculative.draft_max_tokens` | P1 | `resolver/speculative.rs` | native-MTP or draft-model proposal window | staged | restart/reload only | native MTP uses one token unless the package/setting provides another bound | non-negative integer; when set with `draft_min_tokens`, the minimum must not exceed the resolved maximum | `#speculative-decoding` | the `resolver/speculative.rs` unit test suite; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | Applies to native MTP as well as a compatible external draft model. | wired | | 5.5 | Draft min tokens | `speculative.draft_min_tokens` | P2 | `resolver/speculative.rs` | native-MTP or draft-model minimum proposal window | staged | restart/reload only | `0` | non-negative integer no greater than the resolved maximum | `#speculative-decoding` | the `resolver/speculative.rs` unit test suite; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | A lower bound, not an acceptance-rate control. | wired | | 5.5 | Draft probability/accept threshold | `speculative.draft_acceptance_threshold` | P2 | `inference/skippy/resolver/speculative.rs` | Resolved into the embedded frontend verifier | single-stage, staged | restart/reload only | `0.0` | float in `0.0..1.0` | `#speculative-decoding` | resolver and `skippy-serving` speculative tests | minimum accepted fraction for a proposed draft window | wired | | 5.5 | Draft split probability | `speculative.draft_split_probability` | P2 | `inference/skippy/resolver/speculative.rs` | Resolved into deterministic draft-window splitting | single-stage, staged | restart/reload only | `0.0` | float in `0.0..1.0` | `#speculative-decoding` | resolver and `skippy-serving` speculative tests | probability that a draft verification span splits at each boundary | wired | | 5.5 | Draft GPU layers/device/threads | `speculative.draft_gpu_layers
speculative.draft_device
speculative.draft_threads` | P1 | `skippy-serving/frontend/generation/draft_runner.rs` | draft native `RuntimeConfig` | single-stage, staged | restart/reload only | target device and runtime thread defaults | device must name an available backend; threads must be positive | `#speculative-decoding` | draft runtime mapper and resolver translation tests | separate draft-model allocation controls | wired | | 5.5 | Draft KV cache type | `speculative.draft_cache_type_k
speculative.draft_cache_type_v` | P1 | `skippy-serving/frontend/generation/draft_runner.rs` | draft native `RuntimeConfig` | single-stage, staged | restart/reload only | `f16` | `f16`, `q8_0`, or `q4_0` | `#speculative-decoding` | draft runtime mapper and resolver translation tests | draft-model KV cache dtype overrides | wired | | 5.5 | N-gram match range | `speculative.ngram_min
speculative.ngram_max` | P1 | `resolver/speculative.rs` | `NgramProposalConfig` | staged | restart/reload only | package proposer bounds, otherwise required for a direct N-gram plan | both values are required for a direct N-gram proposer and must satisfy `0 < min <= max`; request-local `cache` requires `max <= 4`; `suffix` requires `3 <= min <= max <= 64` | `#speculative-decoding` | the `resolver/speculative.rs` unit test suite; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | Match range controls lookup context, not the number of proposed tokens. | wired | | 5.5 | N-gram proposer kind | `speculative.ngram_proposer` | P1 | `resolver/speculative.rs` | `NgramProposalConfig.kind` | staged | restart/reload only | package strategy kind, otherwise `cache` | `cache` or `suffix` | `#speculative-decoding` | the `resolver/speculative.rs` unit test suite; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | `cache` owns request-local target-committed history and can extend an MTP prefix; `suffix` is a pure-Rust longest-suffix (prompt-lookup) matcher allowing `ngram_max <= 64` for long verbatim drafts on repetitive contexts. | wired | | 5.5 | N-gram output budget | `speculative.ngram_max_proposal_tokens` | P1 | `resolver/speculative.rs` | `NgramProposalConfig.max_proposal_tokens` | staged | restart/reload only | package value, otherwise N-gram maximum | positive integer | `#speculative-decoding` | the `resolver/speculative.rs` unit test suite; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | Independent from the N-gram match range. | wired | | 5.5 | MTP N-gram continuation horizon | `speculative.extension_max_tokens` | P1 | `resolver/speculative.rs` | `NgramExtensionConfig` | staged | restart/reload only | package extension policy or N-gram output budget | positive integer; requires native MTP and an N-gram proposer | `#speculative-decoding` | the `resolver/speculative.rs` unit test suite; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | Bounds the request-local N-gram suffix used to fill fixed-width target verification chunks. | wired | | 5.5 | Native MTP recovery | `speculative.native_mtp_reject_cooldown_tokens
speculative.native_mtp_suppress_cooldown_drafts
speculative.native_mtp_suppress_cooldown_draft_limit` | P2 | `resolver/speculative.rs` | `NativeMtpProposalConfig` | staged | restart/reload only | runtime defaults | non-negative integer bounds and boolean suppression flag | `#speculative-decoding` | the `resolver/speculative.rs` unit test suite; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | Limits low-value MTP work after rejection without affecting target correctness. | wired | | 5.5 | VerifyWindow bounds and parallelism | `speculative.verify_window_min_tokens
speculative.verify_window_max_tokens
speculative.verify_window_pipeline_depth` | P1 | `resolver/speculative.rs` | `VerifyWindowConfig` | staged | restart/reload only | package policy or runtime defaults | `min_tokens <= max_tokens`; frontend validates the complete resolved plan | `#speculative-decoding` | the `resolver/speculative.rs` unit test suite; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | Pipeline depth is the fixed per-request FIFO capacity. Eligible MTP + N-gram continuations fill it without adaptive suppression or a global speculative-credit pool. It is not a separate candidate source. | wired | | 5.5 | Speculative default | `speculative.spec_default` | P2 | `inference/skippy/resolver/speculative.rs` | automatic strategy gate | single-stage, staged | restart/reload only | `auto` | boolean or `auto`; `false` disables automatic speculation | `#speculative-decoding` | native-MTP resolver tests | controls whether supported automatic speculative defaults activate | wired | ## Sampling and request defaults | Report section | Report setting name | Config key path | Priority | Owner module | Translation target | Supported modes | Live-apply behavior | Default source | Validation rule | Docs anchor | Test evidence | Notes | Wiring status | |---|---|---|---|---|---|---|---|---|---|---|---|---|---| | 5.6 | Max tokens / n predict | `request_defaults.max_tokens` | P2 | `plugin/config.rs` | request merge layer in skippy-serving frontend or host request adapter | request-only | request-time | request payload wins; config only supplies fallback default | integer >= 1 when configured | `#sampling-and-request-defaults` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | fallback max_tokens for clients that omit it | wired | | 5.6 | Stop sequences | `request_defaults.stop` | P2 | `plugin/config.rs` | request merge layer in skippy-serving frontend or host request adapter | request-only | request-time | request payload wins; config fallback may be unset | string or list of strings only | `#sampling-and-request-defaults` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | fallback stop sequence list | wired | | 5.6 | Temperature | `request_defaults.temperature` | P2 | `plugin/config.rs` | request merge layer in skippy-serving frontend or host request adapter | request-only | request-time | request payload wins over config default | float >= 0.0 within backend-supported range | `#sampling-and-request-defaults` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | fallback temperature only, not a load-time field | wired | | 5.6 | Top-p | `request_defaults.top_p` | P2 | `plugin/config.rs` | request merge layer in skippy-serving frontend or host request adapter | request-only | request-time | request payload wins over config default | float 0.0..1.0 | `#sampling-and-request-defaults` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | fallback nucleus sampling threshold | wired | | 5.6 | Top-k | `request_defaults.top_k` | P3 | `plugin/config.rs` | request merge layer in skippy-serving frontend or host request adapter | request-only | request-time | request payload wins over config default | integer >= 0 | `#sampling-and-request-defaults` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | fallback top-k sampler bound | wired | | 5.6 | Min-p | `request_defaults.min_p` | P3 | `plugin/config.rs` | request merge layer in skippy-serving frontend or host request adapter | request-only | request-time | request payload wins over config default | float 0.0..1.0 | `#sampling-and-request-defaults` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | fallback minimum-probability threshold | wired | | 5.6 | Typical-p | `request_defaults.typical_p` | P3 | `frontend/request.rs` | native sampler chain | request-only | request-time | request payload wins over config default | float 0.0..1.0 | `#sampling-and-request-defaults` | skippy-serving request-default and sampling tests; parity: `website_docs_parity` | fallback typical-p sampler control | wired | | 5.6 | Top-nsigma | `request_defaults.top_nsigma` | P3 | `frontend/request.rs` | native sampler chain | request-only | request-time | request payload wins over config default | float in backend-supported range | `#sampling-and-request-defaults` | skippy-serving request-default and sampling tests; parity: `website_docs_parity` | fallback top-nsigma sampler control | wired | | 5.6 | Dynamic temperature range | `request_defaults.dynatemp_range` | P3 | `frontend/request.rs` | native sampler chain | request-only | request-time | request payload wins over config default | float >= 0.0 | `#sampling-and-request-defaults` | skippy-serving request-default and sampling tests; parity: `website_docs_parity` | fallback dynamic temperature range | wired | | 5.6 | Dynamic temperature exponent | `request_defaults.dynatemp_exponent` | P3 | `frontend/request.rs` | native sampler chain | request-only | request-time | request payload wins over config default | float >= 0.0 | `#sampling-and-request-defaults` | skippy-serving request-default and sampling tests; parity: `website_docs_parity` | fallback dynamic temperature exponent | wired | | 5.6 | Repeat penalty | `request_defaults.repeat_penalty` | P3 | `plugin/config.rs` | request merge layer in skippy-serving frontend or host request adapter | request-only | request-time | request payload wins over config default | float >= 0.0 | `#sampling-and-request-defaults` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | fallback repeat penalty for clients that omit it | wired | | 5.6 | Repeat last-N | `request_defaults.repeat_last_n` | P3 | `plugin/config.rs` | request merge layer in skippy-serving frontend or host request adapter | request-only | request-time | request payload wins over config default | integer >= -1; `-1` is legacy and uses the default window of 64 tokens (0 disables) | `#sampling-and-request-defaults` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | fallback repeat window for clients that omit it | wired | | 5.6 | Presence penalty | `request_defaults.presence_penalty` | P3 | `plugin/config.rs` | request merge layer in skippy-serving frontend or host request adapter | request-only | request-time | request payload wins over config default | float in backend-supported penalty range | `#sampling-and-request-defaults` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | fallback presence penalty | wired | | 5.6 | Frequency penalty | `request_defaults.frequency_penalty` | P3 | `plugin/config.rs` | request merge layer in skippy-serving frontend or host request adapter | request-only | request-time | request payload wins over config default | float in backend-supported penalty range | `#sampling-and-request-defaults` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | fallback frequency penalty | wired | | 5.6 | DRY sampler | `request_defaults.dry.*` | P3 | `frontend/request.rs` | native sampler chain | request-only | request-time | unset unless operator supplies a DRY sampler object | typed multiplier, base, allowed-length, penalty-window, and sequence-breaker fields | `#sampling-and-request-defaults` | skippy-serving request-default and sampling tests; parity: `website_docs_parity` | configurable DRY repetition control | wired | | 5.6 | XTC sampler | `request_defaults.xtc.*` | P3 | `frontend/request.rs` | native sampler chain | request-only | request-time | unset unless operator supplies an XTC sampler object | probability and threshold floats | `#sampling-and-request-defaults` | skippy-serving request-default and sampling tests; parity: `website_docs_parity` | configurable XTC probability filtering | wired | | 5.6 | Adaptive sampler | `request_defaults.adaptive.*` | P3 | `plugin/config.rs` | none | documented-rejected | request-time | unset | rejected until an adaptive sampler is implemented end to end | `#sampling-and-request-defaults` | config validation and parity tests | reserved adaptive sampler namespace | rejected | | 5.6 | Mirostat mode | `request_defaults.mirostat_mode` | P3 | `frontend/request.rs` | native sampler chain | request-only | request-time | request payload wins over config default | enum disabled, 1, or 2 | `#sampling-and-request-defaults` | skippy-serving sampling tests; parity: `website_docs_parity` | fallback Mirostat mode | wired | | 5.6 | Mirostat entropy | `request_defaults.mirostat_entropy` | P3 | `frontend/request.rs` | native sampler chain | request-only | request-time | request payload wins over config default | float > 0.0 | `#sampling-and-request-defaults` | skippy-serving sampling tests; parity: `website_docs_parity` | fallback Mirostat entropy target | wired | | 5.6 | Mirostat learning rate | `request_defaults.mirostat_learning_rate` | P3 | `frontend/request.rs` | native sampler chain | request-only | request-time | request payload wins over config default | float > 0.0 | `#sampling-and-request-defaults` | skippy-serving sampling tests; parity: `website_docs_parity` | fallback Mirostat learning rate | wired | | 5.6 | Sampler sequence | `request_defaults.samplers
request_defaults.sampler_sequence` | P3 | `frontend/request.rs` | native sampler chain | request-only | request-time | request payload wins over config default | sampler list or named sequence must contain supported sampler names | `#sampling-and-request-defaults` | skippy-serving sampling tests; parity: `website_docs_parity` | expert sampler ordering controls | wired | | 5.6 | Seed | `request_defaults.seed` | P3 | `plugin/config.rs` | request merge layer in skippy-serving frontend or host request adapter | request-only | request-time | request payload wins over config default | integer in backend-supported seed range | `#sampling-and-request-defaults` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | fallback reproducibility seed | wired | | 5.6 | Logit bias | `request_defaults.logit_bias` | P3 | `frontend/request.rs` | native sampler chain | request-only | request-time | request payload wins over config default | token-id to bias map within backend-supported range | `#sampling-and-request-defaults` | skippy-serving sampling tests; parity: `website_docs_parity` | fallback token bias adjustments | wired | | 5.6 | Ignore EOS | `request_defaults.ignore_eos` | P3 | `frontend/request.rs` | native logit-bias sampler | request-only | request-time | disabled by default | boolean toggle | `#sampling-and-request-defaults` | skippy-serving sampling tests; parity: `website_docs_parity` | suppresses EOS by adding a negative-infinity bias | wired | | 5.6 | Backend sampling | `request_defaults.backend_sampling` | P3 | `plugin/config.rs` | none until backend sampling ownership is real | documented-rejected | request-time | not exposed by default | reject if set until backend-specific sampling toggle is implemented end to end | `#sampling-and-request-defaults` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | reserved request-default key that is not currently executable | rejected | ## Structured output, templates, and reasoning | Report section | Report setting name | Config key path | Priority | Owner module | Translation target | Supported modes | Live-apply behavior | Default source | Validation rule | Docs anchor | Test evidence | Notes | Wiring status | |---|---|---|---|---|---|---|---|---|---|---|---|---|---| | 5.7 | Reasoning format | `request_defaults.reasoning_format` | P2 | `frontend/request.rs` | native chat template options | request-only | request-time | request payload wins over config default | `auto`, `none`, `deepseek`, `deepseek-legacy`, or `hidden` | `#structured-output-templates-and-reasoning` | skippy-serving request-default tests; parity: `website_docs_parity` | fallback reasoning output format | wired | | 5.7 | Reasoning on/off/auto | `request_defaults.reasoning_enabled` | P2 | `plugin/config.rs` | request merge layer in skippy-serving frontend or host request adapter | request-only | request-time | auto or backend default | enum or boolean must normalize to auto, off, on semantics | `#structured-output-templates-and-reasoning` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | fallback reasoning enablement state | wired | | 5.7 | Reasoning budget | `request_defaults.reasoning_budget` | P2 | `frontend/request.rs` | native chat template kwargs | request-only | request-time | request payload wins over config default | integer >= 0 or supported effort enum only | `#structured-output-templates-and-reasoning` | skippy-serving reasoning-default tests; parity: `website_docs_parity` | fallback reasoning token or effort budget | wired | | 5.7 | Chat template | `request_defaults.chat_template
request_defaults.chat_template_file` | P2 | `frontend/request.rs` | native chat template options | request-only | request-time | inline template wins over file content, then backend auto-detection | inline template string or readable file path | `#structured-output-templates-and-reasoning` | skippy-serving request-default tests; parity: `website_docs_parity` | inline or file-based chat template override | wired | | 5.7 | Jinja rendering | `request_defaults.jinja` | P2 | `frontend/request.rs` | native chat template options | request-only | request-time | enabled by default | boolean toggle | `#structured-output-templates-and-reasoning` | skippy-serving request-default tests; parity: `website_docs_parity` | controls Jinja rendering for template processing | wired | | 5.7 | Chat template kwargs | `request_defaults.chat_template_kwargs` | P3 | `frontend/request.rs` | native chat template options | request-only | request-time | request kwargs override configured defaults | object | `#structured-output-templates-and-reasoning` | skippy-serving request-default tests; parity: `website_docs_parity` | expert template kwargs bag | wired | | 5.7 | Skip chat parsing | `request_defaults.skip_chat_parsing` | P3 | `frontend/request.rs` | native chat metadata | request-only | request-time | disabled by default | boolean toggle | `#structured-output-templates-and-reasoning` | skippy-serving request-default tests; parity: `website_docs_parity` | compatibility escape hatch for raw prompt handling | wired | | 5.7 | Prefill assistant | `request_defaults.prefill_assistant` | P2 | `frontend/request.rs` | chat message normalization | request-only | request-time | request value wins over config default | string or assistant message object | `#structured-output-templates-and-reasoning` | skippy-serving request-default tests; parity: `website_docs_parity` | assistant prefill content inserted before generation | wired | | 5.7 | System prompt | `request_defaults.system_prompt` | P2 | `frontend/request.rs` | chat message normalization | request-only | request-time | used only when the request has no system message | string | `#structured-output-templates-and-reasoning` | skippy-serving request-default tests; parity: `website_docs_parity` | fallback system prompt | wired | | 5.7 | Grammar | `request_defaults.grammar` | P2 | `frontend/request.rs` | native chat grammar | request-only | request-time | request payload wins over config default | grammar string; mutually exclusive with JSON schema | `#structured-output-templates-and-reasoning` | skippy-serving structured-output tests; parity: `website_docs_parity` | native grammar constraint | wired | | 5.7 | JSON schema | `request_defaults.json_schema` | P2 | `frontend/request.rs` | native chat JSON schema | request-only | request-time | request payload wins over config default | JSON object; mutually exclusive with grammar | `#structured-output-templates-and-reasoning` | skippy-serving structured-output tests; parity: `website_docs_parity` | native schema-derived output constraint | wired | | 5.7 | Logprobs | `request_defaults.logprobs` | P3 | `plugin/config.rs` | none until logprobs response support is implemented | documented-rejected | request-time | backend currently does not return logprobs | reject if set until logprobs are implemented end to end | `#structured-output-templates-and-reasoning` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | reserved response-detail key for future logprobs support | rejected | ## Multimodal, embeddings, and specialized modes | Report section | Report setting name | Config key path | Priority | Owner module | Translation target | Supported modes | Live-apply behavior | Default source | Validation rule | Docs anchor | Test evidence | Notes | Wiring status | |---|---|---|---|---|---|---|---|---|---|---|---|---|---| | 5.8 | mmproj path/URL | `multimodal.mmproj
multimodal.mmproj_url
hardware.mmproj` | P1 | `plugin/config.rs` | projector resolver and StageConfig projector_path materialization | single-stage, staged | restart/reload only | unset until operator or deployment flow selects a projector | set a local path or a remote URL or resolver ref; do not store private host paths in shared examples | `#multimodal-embeddings-and-specialized-modes` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | multimodal projector selection plus hardware-level override | wired | | 5.8 | mmproj auto/offload | `multimodal.mmproj_offload
hardware.mmproj_offload` | P1 | `inference/skippy/resolver` | projector allocation policy and projector offload behavior | single-stage, staged | restart/reload only | backend default or planner default | boolean or supported auto policy only | `#multimodal-embeddings-and-specialized-modes` | resolver and runtime construction tests | projector offload policy at multimodal and hardware override layers | wired | | 5.8 | Projector URL | `multimodal.mmproj_url` | P1 | `models/resolve` | direct Hugging Face file materializer | single-stage, staged | restart/reload only | unset | Hugging Face file URL | `#multimodal-embeddings-and-specialized-modes` | direct projector materialization test | downloads only the named projector file | wired | | 5.8 | Image min tokens | `multimodal.image_min_tokens` | P2 | `inference/skippy/resolver` | native mtmd context | single-stage, staged | restart/reload only | family or backend default | integer `1..=10,000,000` and <= image_max_tokens when both set | `#multimodal-embeddings-and-specialized-modes` | resolver and runtime construction tests | lower bound for image token allocation | wired | | 5.8 | Image max tokens | `multimodal.image_max_tokens` | P2 | `inference/skippy/resolver` | native mtmd context | single-stage, staged | restart/reload only | family or backend default | integer `1..=10,000,000` and >= image_min_tokens when both set | `#multimodal-embeddings-and-specialized-modes` | resolver and runtime construction tests | upper bound for image token allocation | wired | | 5.8 | Image marker | `multimodal.image_marker` | P2 | `mesh-llm-config` | static validation | single-stage, staged | restart/reload only | unsupported | rejected because mtmd removed custom image markers | `#multimodal-embeddings-and-specialized-modes` | model validation tests | legacy image marker override | rejected | | 5.8 | Media marker | `multimodal.media_marker` | P2 | `inference/skippy/resolver` | media prompt adapter | single-stage, staged | restart/reload only | mtmd default | non-empty string | `#multimodal-embeddings-and-specialized-modes` | resolver and runtime construction tests | marker inserted at media positions | wired | | 5.8 | Encoder batch tokens | `multimodal.batch_max_tokens` | P2 | `inference/skippy/resolver` | native mtmd context | single-stage, staged | restart/reload only | mtmd default | integer 1..=2147483647 | `#multimodal-embeddings-and-specialized-modes` | resolver and runtime construction tests | encoder output tokens per batch | wired | | 5.8 | GLM-DSA policy | `multimodal.glm_dsa_policy` | P2 | `inference/skippy/resolver` | native graph policy | single-stage, staged | restart/reload only | auto | `auto` or `v1` | `#multimodal-embeddings-and-specialized-modes` | resolver and runtime construction tests | GLM sparse-attention policy | wired | | 5.8 | Generation signal window | `multimodal.generation_signal_window` | P2 | `inference/skippy/resolver` | generation signal aggregation | single-stage, staged | restart/reload only | 16 | integer 1..=4096 | `#multimodal-embeddings-and-specialized-modes` | resolver and runtime construction tests | media generation-signal aggregation window | wired | | 5.8 | Embeddings mode | `multimodal.embeddings` | P2 | `plugin/config.rs` | none; product capability toggle is not part of model-load tuning yet | documented-rejected | restart/reload only | service capability default | reject if set until embeddings mode is modeled as an executable backend capability | `#multimodal-embeddings-and-specialized-modes` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | specialized product mode reserved but not wired as model config | rejected | | 5.8 | Reranking mode | `multimodal.reranking` | P2 | `plugin/config.rs` | none; product capability toggle is not part of model-load tuning yet | documented-rejected | restart/reload only | service capability default | reject if set until reranking mode is modeled as an executable backend capability | `#multimodal-embeddings-and-specialized-modes` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | specialized product mode reserved but not wired as model config | rejected | | 5.8 | Pooling | `multimodal.pooling` | P2 | `plugin/config.rs` | none until embedding-specific pooling config is executable | documented-rejected | restart/reload only | backend pooling default | reject if set until pooling mode is modeled end to end | `#multimodal-embeddings-and-specialized-modes` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | embedding-specific pooling remains reserved | rejected | | 5.8 | Vocoder | `multimodal.vocoder` | P3 | `plugin/config.rs` | none until specialized audio modality support is executable | documented-rejected | restart/reload only | backend default | reject if set until vocoder support is real | `#multimodal-embeddings-and-specialized-modes` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | specialized modality knob remains reserved | rejected | ## Server and operational settings | Report section | Report setting name | Config key path | Priority | Owner module | Translation target | Supported modes | Live-apply behavior | Default source | Validation rule | Docs anchor | Test evidence | Notes | Wiring status | |---|---|---|---|---|---|---|---|---|---|---|---|---|---| | 5.9 | Host / port | `advanced.server.host
advanced.server.port` | P3 | `plugin/config.rs` | none; deployment listen address stays host-local and outside model config | documented-rejected | restart/reload only | service runtime default | reject if set in model config; network listen address belongs to deployment or service settings | `#server-and-operational-settings` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | operational listen address stays outside Skippy model settings | rejected | | 5.9 | Reuse port | `advanced.server.reuse_port` | P3 | `plugin/config.rs` | none; server socket tuning stays operational | documented-rejected | restart/reload only | service runtime default | reject if set in model config | `#server-and-operational-settings` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | operational socket tuning stays outside model settings | rejected | | 5.9 | API key / key file | — | P3 | `none` | none; security credentials are matrix-only exclusions | documented-rejected | restart/reload only | secret store or deployment environment only | never accept or persist API credentials in Skippy model config | `#server-and-operational-settings` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | matrix-only security exclusion for API auth material | rejected | | 5.9 | SSL cert/key | — | P3 | `none` | none; TLS material is a matrix-only exclusion | documented-rejected | restart/reload only | secret store or deployment environment only | never accept or persist TLS private material in Skippy model config | `#server-and-operational-settings` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | matrix-only security exclusion for TLS material | rejected | | 5.9 | Timeout | `advanced.server.timeout` | P3 | `plugin/config.rs` | mesh routing or frontend timeout only if later promoted to model-adjacent host config | documented-rejected | restart/reload only | service runtime default | reject in model config for now; timeout ownership stays operational | `#server-and-operational-settings` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | host-local timeout remains outside model settings | rejected | | 5.9 | Metrics endpoint | `advanced.server.metrics` | P3 | `plugin/config.rs` | none; observability endpoint stays outside model config | documented-rejected | restart/reload only | service observability default | reject in model config; metrics exposure is operational | `#server-and-operational-settings` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | host-local metrics exposure remains outside model settings | rejected | | 5.9 | Slots endpoint | `advanced.server.slots` | P3 | `plugin/config.rs` | none; debug endpoint stays outside model config | documented-rejected | restart/reload only | service debug default | reject in model config; slots endpoint is operational or debug only | `#server-and-operational-settings` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | host-local slots endpoint remains outside model settings | rejected | | 5.9 | Props endpoint | `advanced.server.props` | P3 | `plugin/config.rs` | none; debug endpoint stays outside model config | documented-rejected | restart/reload only | service debug default | reject in model config; props endpoint is operational or debug only | `#server-and-operational-settings` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | host-local props endpoint remains outside model settings | rejected | | 5.9 | Alias | `advanced.server.alias` | P2 | `runtime/startup_models.rs` | served model identity used by routing and `/v1/models` | single-stage, staged | restart/reload only | unset unless operator publishes an alias | non-empty model alias; unique across defaults-expanded profiles after trimming whitespace; per-model value overrides defaults | `#server-and-operational-settings` | `configured_server_alias_becomes_the_served_model_identity` in `runtime/tests/startup_models.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | model-relevant alias is the only server-adjacent field kept executable | wired | | 5.9 | API prefix | `advanced.server.api_prefix` | P3 | `plugin/config.rs` | none; route prefix stays deployment-owned | documented-rejected | restart/reload only | service runtime default | reject in model config; API prefix is routing or deployment scope | `#server-and-operational-settings` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | host-local API prefix remains outside model settings | rejected | | 5.9 | Static/media paths | — | P3 | `none` | none; static and media paths are matrix-only exclusions | documented-rejected | restart/reload only | deployment filesystem only | never accept or persist static or media filesystem paths in model config | `#server-and-operational-settings` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | matrix-only filesystem exclusion with rationale | rejected | | 5.9 | Models router UI/tools | — | P3 | `none` | none; product routing and admin tools stay outside model config | documented-rejected | restart/reload only | service product default | document only; do not create a Skippy model-setting key for UI or tools routing | `#server-and-operational-settings` | `plugin::config` tests in `mesh/crates/mesh-llm-host-runtime/src/plugin/config.rs`; parity: `website_docs_parity` in `mesh/crates/mesh-llm-config/src/website_docs_parity.rs` | matrix-only product-admin exclusion with rationale | rejected |