Teknium
fd452e26e3
feat(tools): unicode-equivalent filename retry + near-miss suggestions in read_file
...
NFC/NFD, narrow no-break space (U+202F), and curly quotes render
identically in a terminal — a model retyping a visually-correct path
gets 'file not found' and can never discover the byte mismatch on its
own. On not-found, canonicalize the requested name and compare against
directory entries; exactly ONE equivalent spelling reads transparently
with an explanatory note. Zero or several matches (homoglyph twins)
fall through — never guess between collisions.
Also: difflib.SequenceMatcher >=0.8 fallback in _suggest_similar_files
catches near-miss typos (AGENT.md -> AGENTS.md) that substring scoring
misses entirely.
Measured (file-only arm, 3 reps, control=guard-only vs feature):
unicode task qwen3.8-max 31k->16k tok (-48%), turns 6.7->3.7;
opus-4.8 57k->33k tok (-42%), turns 8.3->5.0; accuracy held 1.00.
near-miss: opus mildly better, qwen flat, no regressions.
2026-08-09 23:35:07 -07:00
..
2026-08-02 20:21:59 -07:00
2026-08-09 14:35:02 -07:00
2026-07-28 07:58:16 -07:00
2026-07-17 04:53:38 -07:00
2026-08-08 14:56:38 +05:30
2026-08-02 15:11:37 -07:00
2026-07-28 11:52:44 -07:00
2026-08-07 17:45:06 +05:30
2026-08-02 00:11:50 -07:00
2026-07-27 14:32:05 -07:00
2026-07-29 10:54:04 -07:00
2026-08-02 11:18:41 +05:30
2026-07-29 10:14:11 -07:00
2026-07-26 17:46:55 -07:00
2026-07-29 10:14:00 -07:00
2026-08-06 19:35:47 -06:00
2026-08-09 14:35:02 -07:00
2026-07-29 12:19:37 -07:00
2026-08-08 05:44:18 -07:00
2026-08-08 13:48:00 +05:30
2026-07-02 04:20:43 -07:00
2026-08-09 14:35:02 -07:00
2026-07-20 06:50:31 -07:00
2026-08-07 09:07:42 -07:00
2026-07-22 12:13:01 -05:00
2026-08-02 00:11:50 -07:00
2026-08-02 00:36:03 -07:00
2026-08-01 21:17:51 -04:00
2026-08-09 23:35:07 -07:00
2026-08-09 23:30:02 -07:00
2026-07-31 10:17:55 -04:00
2026-08-06 19:35:47 -06:00
2026-08-02 15:51:43 -07:00
2026-08-02 00:11:50 -07:00
2026-07-29 09:33:48 -07:00
2026-08-08 19:59:12 -04:00
2026-08-08 04:19:38 -07:00
2026-07-06 04:58:42 -07:00
2026-08-06 03:16:26 +05:30
2026-08-08 14:06:48 -07:00
2026-08-08 12:32:23 -07:00
2026-07-17 04:50:47 -07:00
2026-07-28 00:53:16 -05:00
2026-07-29 10:02:03 -07:00
2026-08-03 14:24:37 +05:30
2026-07-18 04:15:13 -07:00
2026-08-08 23:56:46 -07:00
2026-08-08 12:32:23 -07:00
2026-07-29 10:13:50 -07:00
2026-07-28 14:07:21 -07:00
2026-08-06 19:35:47 -06:00
2026-08-02 10:02:33 -07:00
2026-08-01 10:47:20 -07:00
2026-08-04 14:34:24 +05:30
2026-07-29 10:14:00 -07:00
2026-08-09 21:43:32 +05:30
2026-08-06 19:35:47 -06:00
2026-08-08 05:51:33 -07:00
2026-08-06 19:35:47 -06:00
2026-08-06 19:35:47 -06:00
2026-08-08 22:17:38 -05:00
2026-08-08 14:56:38 +05:30
2026-08-07 08:58:25 -07:00
2026-08-08 14:56:38 +05:30
2026-08-02 10:01:16 -07:00
2026-08-03 17:50:58 +05:30
2026-08-08 11:12:27 -07:00
2026-08-08 11:12:27 -07:00
2026-07-31 07:30:30 -07:00
2026-08-03 09:56:36 +05:30
2026-08-09 23:14:18 -07:00
2026-07-30 22:31:42 -07:00
2026-07-28 04:24:50 -05:00
2026-08-08 12:32:23 -07:00
2026-08-02 15:08:35 -07:00
2026-08-09 14:35:02 -07:00
2026-07-01 01:05:28 -07:00
2026-08-02 10:04:48 -07:00
2026-07-22 06:56:53 -07:00
2026-08-02 10:04:48 -07:00
2026-06-30 16:39:41 -07:00
2026-08-03 19:11:30 +05:30
2026-08-07 19:26:12 +05:30
2026-07-28 22:31:40 -07:00
2026-07-28 11:55:01 -07:00
2026-08-08 22:54:20 +05:30
2026-07-28 14:17:45 -07:00
2026-08-08 19:59:12 -04:00
2026-08-08 03:59:39 -07:00
2026-08-07 14:38:02 +05:30
2026-08-08 13:49:24 +05:30
2026-07-29 11:53:39 -07:00
2026-07-04 15:08:49 -07:00
2026-08-08 12:34:46 -07:00
2026-07-23 21:06:47 -07:00
2026-08-08 12:32:23 -07:00