Files
odysseus/docs/TYPO_ROUTING_AUDIT_20260909.md
T

3.8 KiB

Typo-tolerant tool routing audit

The 9B SFT model was not retrained. This audit targets the earlier harness stage that decides which complete tool families the model is allowed to see.

Method

  • Source prompts: real sft_alex_creator sessions from a37dcb3b-... onward.
  • Labels: recorded single-family tool calls, excluding mixed/ambiguous traces.
  • Variants: deletion, adjacent transposition, duplicated character, keyboard-neighbor substitution, and accidental word split.
  • Split: deterministic SHA-256 assignment before scoring (75% dev, 25% blind).
  • Safety: static routing only; no historical mutation or send action is replayed.
  • Acceptance: at least 95% blind exact-family accuracy and below 1% blind wrong-family authorization. Abstention is measured separately.

Results

Router Dev family supplied Blind family supplied Blind exact Blind wrong-family
Previous exact rules 63.64% 65.69%
Conservative fuzzy fallback r4 96.31% 98.31% 96.62% 0.00%
Final router + safe-read repair 98.31% 98.73% 97.05% 0.00%

The fallback runs only for action/lookup-shaped requests, resolves exactly one nearby family term, and abstains on ambiguity. Conceptual questions remain tool-free. Complete family schemas are still selected by the immutable turn contract; fuzzy matching never chooses an individual tool or its arguments.

Authoritative machine reports:

  • reports/typo-tool-routing-baseline-20260909.json
  • reports/typo-tool-routing-fuzzy-r4-20260909.json
  • reports/typo-tool-routing-final-20260909.json
  • reports/post-followup-agent-80-20260909.json
  • reports/post-typo-routing-agent-80-20260909.json
  • reports/live-typo-agent-20-20260909.json
  • reports/live-typo-unresolved-r3-20260909.json
  • reports/live-typo-agent-final-20-20260909.json
  • reports/post-typo-safe-read-agent-final-80-20260909.json

Live 7011 findings

The post-deployment standard matrix passed 80/80 through the real Agent UI. The first read-only typo matrix then attempted 17 of 20 planned turns before its total-time limit. Initial Notes, Calendar, Email, Tasks, Documents, and Cookbook calls passed. Completed failing turns still had the correct family and required tool in turn_contract.offered; the 9B model sometimes answered without calling that offered tool. Memory and Search also exposed timeouts.

This separates three failure classes:

  1. Tool injection: addressed by conservative fuzzy family routing; blind exact routing is 96.62% with zero blind wrong-family authorizations.
  2. Required read execution: a correctly offered safe list/refresh tool can still be skipped by the model, especially after a typo or on “list those again” follow-ups. This should be handled by the generic deterministic safe-read path, not additional prompt-specific hints.
  3. Runtime timeout: Search and one Memory follow-up require loop/backend diagnosis. A timeout is not counted as a model-accuracy or routing result.

The generic safe-read parser and search-family precedence were then repaired. The previously unresolved Calendar, Email, Search, and Shell/Files cases passed 8/8. The complete typo matrix passed 20/20, including initial requests and follow-ups for all ten families. The final standard Agent UI compatibility matrix passed 80/80 across family, Web-toggle, and follow-up combinations.

The broad routing regression suite passed 458 tests. The model was not retrained and no DeepSeek API was used: the measured defect was in harness family selection and deterministic safe-read execution, upstream of the model. All 1,535 unique labeled historical turns were statically audited to mine failure categories. Historical write/send/delete actions were not replayed against live data; live verification used the deduplicated read-only matrices.