Captured from this session's cutover: reference-grep list, the YAML cross-check regex (the provider label contains a space and parentheses, so a whitespace split yields false unresolved hits), the per-endpoint 4-token probe that proves a harness-side id rename is wire-safe, the fit check against the served window, and the commit shape.
2.8 KiB
name, description
| name | description |
|---|---|
| omp-model-id-rename-cutover | Rename an OMP fleet model id in models.yml and prove every reference and endpoint still resolves before commit/push. |
OMP model id rename cutover
Renaming a model id in ~/.omp/agent/models.yml touches three layers: the registry, every
reference in agent/config.yml, and the wire contract with the serving endpoint.
1. Find every reference
Provider names are labels; ids are referenced from config.yml (modelRoles.*,
task.agentModelOverrides.*, compaction.modes), from other models' compactionModel,
and from docs/memory. Grep the tracked set:
git ls-files -z | xargs -0 grep -ln 'OLD_ID'
agent/memories/** and omp-docs/log.md are historical records: leave them alone.
agent/models.yml comments that name the service (e.g. frank-large.env) stay — the
systemd unit names do not change with the harness id.
2. Prove reference integrity (throwaway, do not commit)
Parse both YAMLs and cross-check. The provider label contains a space and parentheses
(llamacpp (dankserver)), so use an explicit pattern; a split(/\s+/) yields false
unresolved hits like (dankclaw)/frank-dragoon.
pat = re.compile(r"llamacpp \([^)]+\)/[A-Za-z0-9._-]+")
known = {f"{n}/{m['id']}" for n, pv in models["providers"].items() for m in pv["models"]}
# walk cfg.modelRoles / cfg.task / compactionModel, flag tokens not in known
Expect: zero unresolved refs, and every compactionModel present in known.
3. Prove the endpoint accepts the new id
/v1/models reports the SERVED name (radiance echoes the request id, halogen and
llama.cpp echo their own). Then send a 4-token completion with the NEW id against each
provider baseUrl:
curl -s http://HOST:PORT/v1/chat/completions -H 'content-type: application/json' \
-d '{"model":"NEW_ID","messages":[{"role":"user","content":"say OK"}],"max_tokens":4}'
200 + reasoning_content = the rename is harness-side only. All three engines on the
Dank fleet ignore the request model field.
4. Fit check against the served window
Read the served window (/v1/models → context_length / meta.n_ctx) and confirm the
declared contextWindow + maxTokens fits the slot/pool the engine admits against.
Compaction fires at compaction.thresholdPercent of contextWindow; the clamp is
max_tokens = min(maxTokens, contextWindow − est − 4096) and the chars/4 estimate
under-runs ~3 % on code.
5. Commit shape
One commit for models.yml (ids + windows + sampling), one for config.yml (role map,
compaction endpoint). Note in the message which wire names stay unchanged, and record
the rename in omp-docs/log.md (newest section first). Run scripts/kb-lint.sh before
committing docs. The .githooks/pre-commit secret gate runs automatically; never
--no-verify.