agent: repoint roles to frank-medium/dankclaw-3090; sync niri tweaks, memories, managed skills

- config.yml: default/commit -> frank-medium (dankserver); task/tiny/smol/vision -> frank-small (dankclaw-3090); vision xhigh
- models.yml: add llamacpp (dankclaw-3090) provider; frank-large preserve_thinking + context notes
- niri: focus-ring/border/shadow layout, hot-corners off, re-add noctalia.kdl include; blankpad eDP-1 scale 1.0
- memories: flush rollouts; retire frank_large + marreta_authentik skills; add auth-chain/kv-pool/quadlet-log skills
- managed-skills: 40+ new fleet runbook skills
- agent/skills: import built-in skill set
This commit is contained in:
Frank
2026-09-17 12:27:08 -07:00
parent 83c9c92b3f
commit 135bb2194d
103 changed files with 5333 additions and 170 deletions
+100 -15
View File
@@ -2,19 +2,52 @@
# - 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-small
name: "frank-small (dankserver)"
contextWindow: 262144
maxTokens: 262144
- 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]
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)":
@@ -24,20 +57,25 @@ providers:
models:
- id: frank-large
name: "frank-large (dankclaw-gpu)"
contextWindow: 200000
# Halogen caps max_tokens at HALOGEN_MAX_TOKENS_CAP=65536 (a request
# above it is a 400). Admission reserves prompt + max_tokens against
# the KV pool (401,408 positions since 2026-09-13): 200,000 + 65,536
# = 265,536, comfortably inside. Overshooting the pool hangs for the
# 3600 s queue timeout before a 503.
# 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: 65536
reasoning: true
input: [text, image]
# 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, so without this the endpoint decodes greedy.
# 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
@@ -47,5 +85,52 @@ providers:
presence_penalty: 0.0
repetition_penalty: 1.0
# Keep prior thinking blocks in the rendered prompt across turns;
# halogen honours it top-level (verified: 275-token prompt delta vs false).
# 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)"
# 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