- task.agentModelOverrides.scout: "@smol" (frank-small, xhigh thinking) - task.maxConcurrency: 2 (semaphore on ACTIVE subagents; total instantiations uncapped) - compaction.remoteEndpoint -> frank-medium /v1/chat/completions (192.168.0.235:7770), methodOrder remote-first; compactionModel: frank-medium on every model so the wire model id is always valid - models.yml header: single source of truth (pi-era import retired) Verified: omp config get on all keys; omp -p startup probe passed; live POST in the remote-compaction wire format answered.
154 lines
7.8 KiB
YAML
154 lines
7.8 KiB
YAML
# OMP agent model registry — single source of truth (OMP is the primary
|
|
# harness; there is no second copy to keep in sync).
|
|
# Conversion notes from the pi-era import:
|
|
# - apiKey "EMPTY" -> auth: none (keyless local endpoint)
|
|
# - thinkingLevelMap {max: xhigh} -> compat.reasoningEffortMap
|
|
providers:
|
|
# The provider NAMES are historical (they were llama.cpp endpoints when the
|
|
# fleet ran llama.cpp): frank-medium is vllm-radiance now, and frank-large is
|
|
# halogen-flash-server again. Renaming is deliberately avoided because every
|
|
# modelRoles entry in config.yml embeds the provider name, and a partial
|
|
# rename fails at call time — the label is cosmetic, the references are not.
|
|
# One provider per HOST:PORT, so Dankclaw's second endpoint (:7771) is a
|
|
# separate block rather than a second model inside the :7770 one.
|
|
"llamacpp (dankserver)":
|
|
baseUrl: http://192.168.0.235:7770/v1
|
|
api: openai-completions
|
|
auth: none
|
|
models:
|
|
- id: frank-medium
|
|
name: "frank-medium (dankserver)"
|
|
# Dankserver: both Radeon AI PRO R9700 (gfx1201) serving one model —
|
|
# mainline llama.cpp, `--split-mode layer`, on
|
|
# ajgazin/Swift-Qwen3.8-27B-Uncensored-Dynamic-MTP at UD-Q8_K_XL with
|
|
# the z-lab DFlash2 Q8_0 drafter. Tensor parallelism is impossible on
|
|
# this host (the second card's chipset path has no PCIe atomic routing,
|
|
# so it cannot dispatch an RCCL collective — and vLLM's pipeline
|
|
# parallelism needs the same p2p primitive), which is why one process
|
|
# layer-splits across both cards instead. Since 2026-09-16 this is the
|
|
# box's only LLM runtime; the vllm-radiance replica pair is retired.
|
|
contextWindow: 196608
|
|
# The KV pool is 393216 positions over TWO slots, so one conversation
|
|
# carries 196608 -- the house rule (see frank-large) is to declare the
|
|
# per-conversation window, not the pool. The checkpoint's trained
|
|
# window is 262144 and the GGUF has no rope scaling, so the top 131k
|
|
# of a conversation extrapolates on the base rope. 32768 keeps prompt
|
|
# + budget comfortably inside it; thinking counts against the budget.
|
|
maxTokens: 32768
|
|
reasoning: true
|
|
input: [text, image]
|
|
compat:
|
|
# Qwen3.8's chat template accepts ONLY xhigh, medium and low for
|
|
# reasoning_effort and RAISES on anything else — verified against this
|
|
# endpoint on 2026-09-16: low/medium/xhigh answer 200, `high` returns
|
|
# a 500 from the template. The harness's levels must therefore be
|
|
# folded onto that set, exactly as the sibling frank-small entry does,
|
|
# or any role whose level is unmapped fails on its first request
|
|
# (subagents run at `high`).
|
|
reasoningEffortMap:
|
|
minimal: low
|
|
low: low
|
|
medium: medium
|
|
high: xhigh
|
|
max: xhigh
|
|
|
|
"llamacpp (dankclaw)":
|
|
baseUrl: http://192.168.0.143:7770/v1
|
|
api: openai-completions
|
|
auth: none
|
|
models:
|
|
- id: frank-large
|
|
name: "frank-large (dankclaw-gpu)"
|
|
# Server-side compaction always runs on frank-medium (see
|
|
# compaction.remoteEndpoint in config.yml); this steers the
|
|
# compaction model candidate so the wire model id stays valid
|
|
# on the frank-medium endpoint even from a frank-large session.
|
|
compactionModel: llamacpp (dankserver)/frank-medium
|
|
# halogen-flash-server. The model's native window is 262,144, but this
|
|
# deployment caps a conversation at 200,192 — exactly half of its
|
|
# 400,384-position KV pool, so two 200k conversations are resident at
|
|
# once. Declaring the half rather than the native window is what keeps
|
|
# prompt + budget inside one conversation's region of the pool.
|
|
contextWindow: 200192
|
|
# HALOGEN_MAX_TOKENS_CAP: above this a request is a 400 rather than a
|
|
# silent truncation, and thinking counts against the budget.
|
|
# maxTokens must also survive the harness compaction gap: OMP compacts at
|
|
# 70% of contextWindow = 140,134, so a pre-compaction prompt can legally
|
|
# reach that height. 140,134 + 57,344 = 197,478 <= 200,192, which closes
|
|
# the dead zone that 400'd a request on 2026-09-17 (prompt 138,898 +
|
|
# budget 64,000 = 202,898 > 200,192: above the server's fit check, below
|
|
# the compaction trigger). Any budget > 60,058 reopens the zone.
|
|
maxTokens: 57344
|
|
reasoning: true
|
|
# Text only as of 2026-09-16: the vision tower moved to frank-small and
|
|
# this server refuses image content parts.
|
|
input: [text]
|
|
compat:
|
|
reasoningEffortMap:
|
|
max: xhigh
|
|
# Qwen3.8-Flash-Next recommended sampling. Halogen has no server-side
|
|
# sampler defaults (a request that sends no temperature decodes
|
|
# greedily), so this override is what makes ordinary calls sample.
|
|
# extraBody is merged last (after compat policy) and wins.
|
|
extraBody:
|
|
temperature: 1.0
|
|
top_p: 0.95
|
|
top_k: 20
|
|
min_p: 0.0
|
|
presence_penalty: 0.0
|
|
repetition_penalty: 1.0
|
|
# Keep prior thinking blocks in the rendered prompt across turns;
|
|
# halogen honours this key top-level (verified: 275-token prompt
|
|
# delta with it false).
|
|
preserve_thinking: true
|
|
|
|
"llamacpp (dankclaw-3090)":
|
|
baseUrl: http://192.168.0.143:7771/v1
|
|
api: openai-completions
|
|
auth: none
|
|
models:
|
|
- id: frank-small
|
|
name: "frank-small (dankclaw-3090)"
|
|
# See frank-large: server-side compaction always runs on
|
|
# frank-medium, so the wire model id stays valid from a
|
|
# frank-small session.
|
|
compactionModel: llamacpp (dankserver)/frank-medium
|
|
# Dankclaw's RTX 3090: mainline llama.cpp serving
|
|
# HauhauCS/Gemma4-12B-QAT-Uncensored-HauhauCS-Balanced at Q4_K_M.
|
|
# The MTP head ships as a separate assistant sidecar
|
|
# (mtp-gemma-4-12B-it.gguf) loaded via --model-draft and chained
|
|
# behind the draftless ngram-mod matcher; q8_0 KV with the model's
|
|
# sliding-window pattern keeps each full 262144-token window cheap,
|
|
# and the explicit CTX_SIZE=1048576 / PARALLEL=4 gives FOUR full
|
|
# windows (measured 22.3 GiB of the 24 GiB card at load; a 5th slot
|
|
# does not fit). The BF16 projector (with audio encoder) is loaded
|
|
# too, so this stays multimodal (frank-medium gained vision on
|
|
# 2026-09-17 as well; frank-large has no vision tower).
|
|
contextWindow: 262144
|
|
# Each slot IS the full trained window: prompt + budget must fit
|
|
# inside it, and thinking counts against the budget.
|
|
maxTokens: 32768
|
|
reasoning: true
|
|
input: [text, image]
|
|
compat:
|
|
# Gemma4's chat template accepts every reasoning_effort level as of
|
|
# 2026-09-17 (all seven probed: 200), so this map is inert. Kept
|
|
# anyway: it cost nothing, and it is the safety net if the template
|
|
# ever gates again the way Qwen3.8's did (subagents run at `high`).
|
|
reasoningEffortMap:
|
|
minimal: low
|
|
low: low
|
|
medium: medium
|
|
high: xhigh
|
|
max: xhigh
|
|
# Gemma's reference local-recipe sampling (temp 1.0 / top_p 0.95);
|
|
# the server's own default is greedy for clients that stay silent.
|
|
# Thinking is already retained across turns by the server's
|
|
# --reasoning-preserve default, and the key below is accepted
|
|
# top-level (verified 200, not a 400), so it is passed to pin the
|
|
# behaviour at the request rather than rely on a server default.
|
|
extraBody:
|
|
temperature: 1.0
|
|
top_p: 0.95
|
|
preserve_thinking: true
|