- 2026-09-07-linear-e5-router-experiment: 136-example baseline (superseded) - 2026-09-07-expanded-corpus-linear-head-experiment: 3025-example expanded (live) - CLAUDE.md: index updates for both evals
52 KiB
Semantic Router Linear Head Experiment — Report
1. Exact e5 representation used
- Model: model_quantized@384/tok2
- Checkpoint: models/embedder/multilingual-e5-small/model_quantized.onnx
- Tokenizer: models/embedder/multilingual-e5-small/tokenizer.json
- Dimension: 384
- Pooling: mean-pool + L2-normalize
- Normalization: L2
- Input template: query:
2. Development/residual row counts
- Total corpus: 3025
- Frozen holdout: 535
- Development pool: 2490
- Fast-path resolved: 82
- Router-residual: 2943
Route distribution (full corpus):
- action: 990
- conversation: 103
- knowledge: 880
- memory_write: 705
- system: 226
- uncertain: 121
3. Grouped fold composition
Folds: 5
- Fold 0: eval=476 train=2014 routes={'action': 144, 'conversation': 30, 'knowledge': 150, 'memory_write': 74, 'system': 58, 'uncertain': 20}
- Fold 1: eval=341 train=2149 routes={'action': 201, 'conversation': 30, 'knowledge': 44, 'memory_write': 39, 'system': 9, 'uncertain': 18}
- Fold 2: eval=707 train=1783 routes={'action': 297, 'conversation': 12, 'knowledge': 210, 'memory_write': 125, 'system': 45, 'uncertain': 18}
- Fold 3: eval=506 train=1984 routes={'action': 86, 'conversation': 12, 'knowledge': 160, 'memory_write': 125, 'system': 90, 'uncertain': 33}
- Fold 4: eval=460 train=2030 routes={'action': 68, 'conversation': 9, 'knowledge': 151, 'memory_write': 190, 'system': 24, 'uncertain': 18}
4. Selected regularization
Experiment A: All development examples
- Best C: 10.0
- Mean accuracy: 69.2% ± 10.2%
- Mean macro F1: 0.616 ± 0.093
- Total false actions (CV): 390
Experiment B: Router-residual only
- Best C: 10.0
- Mean accuracy: 68.5% ± 10.2%
- Mean macro F1: 0.608 ± 0.089
- Total false actions (CV): 388
Stability across folds
C=0.01 acc=30.1%±18.1% f1=0.107±0.074 folds_acc=['33.6%', '21.4%', '63.8%', '17.0%', '14.8%'] C=0.1 acc=55.0%±16.8% f1=0.276±0.077 folds_acc=['63.4%', '70.7%', '71.6%', '35.2%', '34.3%'] C=1.0 acc=65.2%±10.7% f1=0.522±0.075 folds_acc=['75.4%', '76.0%', '68.9%', '56.9%', '48.7%'] C=10.0 acc=69.2%±10.2% f1=0.616±0.093 folds_acc=['79.8%', '79.5%', '66.8%', '67.8%', '52.0%'] C=100.0 acc=67.4%±9.0% f1=0.595±0.079 folds_acc=['74.4%', '77.4%', '66.5%', '67.2%', '51.3%']
5. All-example CV metrics
- Accuracy: 68.5%
- Macro F1: 0.675
- False-action count: 390
- False-action rate: 15.7%
- Action precision: 0.629
- Action recall: 0.832
- Uncertain precision: 0.618
- Uncertain recall: 0.589
Per-class metrics: action P=0.629 R=0.832 F1=0.716 (n=796) conversation P=0.825 R=0.710 F1=0.763 (n=93) knowledge P=0.721 R=0.610 F1=0.661 (n=715) memory_write P=0.748 R=0.635 F1=0.687 (n=553) system P=0.698 R=0.562 F1=0.623 (n=226) uncertain P=0.618 R=0.589 F1=0.603 (n=107)
Confusion matrix (rows=expected, cols=predicted): action conversation knowledge memory_write system uncertain action 662 4 65 45 4 16 conversation 2 66 8 4 4 9 knowledge 195 0 436 46 34 4 memory_write 135 0 49 351 13 5 system 33 4 42 15 127 5 uncertain 25 6 5 8 0 63
6. Residual-only CV metrics
- Accuracy: 67.9%
- Macro F1: 0.663
- False-action count: 388
- False-action rate: 16.0%
- Action precision: 0.620
- Action recall: 0.826
- Uncertain precision: 0.604
- Uncertain recall: 0.570
Per-class metrics: action P=0.620 R=0.826 F1=0.708 (n=766) conversation P=0.807 R=0.720 F1=0.761 (n=93) knowledge P=0.713 R=0.606 F1=0.655 (n=715) memory_write P=0.754 R=0.649 F1=0.698 (n=553) system P=0.685 R=0.484 F1=0.567 (n=184) uncertain P=0.604 R=0.570 F1=0.587 (n=107)
Confusion matrix (rows=expected, cols=predicted): action conversation knowledge memory_write system uncertain action 633 4 69 43 0 17 conversation 2 67 8 6 1 9 knowledge 198 1 433 44 35 4 memory_write 133 0 50 359 5 6 system 29 5 42 15 89 4 uncertain 26 6 5 9 0 61
7. Legacy-vs-linear comparison
All examples
metric legacy linear e5 delta
accuracy 52.2% 68.5% 16.3% macro F1 — 0.675 — action precision — 0.629 — false-action rate 19.9% 15.7% -4.2% uncertain F1 0.000 0.603 0.603
Router-residual only
metric legacy linear e5 delta
accuracy 40.8% 67.9% 27.1% macro F1 — 0.663 — false-action rate — 16.0% —
8. Fold variance
All-example CV: Fold 0: acc=79.8% f1=0.758 false_action=27 Fold 1: acc=79.5% f1=0.594 false_action=40 Fold 2: acc=66.8% f1=0.582 false_action=92 Fold 3: acc=67.8% f1=0.667 false_action=102 Fold 4: acc=52.0% f1=0.478 false_action=129
Residual-only CV: Fold 0: acc=78.7% f1=0.747 false_action=28 Fold 1: acc=78.7% f1=0.590 false_action=38 Fold 2: acc=67.6% f1=0.582 false_action=92 Fold 3: acc=66.2% f1=0.648 false_action=104 Fold 4: acc=51.0% f1=0.474 false_action=126
9. False-action repair/new-error analysis
Note: Legacy per-example predictions were not available for this experiment. The legacy baseline was measured in aggregate in the Go test suite.
Learned router false-action cases (out-of-fold): kq-deadline-1717: 'когда дедлайн по задаче, пожалуйста' (true=knowledge, proba(action)=0.559) kq-deadline-1720: 'я хочу я успеваю до дедлайна по задаче' (true=knowledge, proba(action)=0.491) kq-deadline-1724: 'я хочу когда дедлайн по задаче' (true=knowledge, proba(action)=0.566) kq-deadline-1725: 'надо бы когда дедлайн по задаче' (true=knowledge, proba(action)=0.526) kq-deadline-1729: 'по задаче когда дедлайн' (true=knowledge, proba(action)=0.361) mw-fact-pills-2224: 'принял таблетки сегодня' (true=memory_write, proba(action)=0.342) mw-fact-pills-2229: 'принял таблетки вечером, пожалуйста' (true=memory_write, proba(action)=0.416) mw-fact-pills-2230: 'принял таблетки сегодня, пожалуйста' (true=memory_write, proba(action)=0.282) mw-note-idea-2363: 'запиши идею: гидропоника на балконе, пожалуйста' (true=memory_write, proba(action)=0.395) mw-note-idea-2366: 'идея: гидропоника на балконе, пожалуйста' (true=memory_write, proba(action)=0.399) mw-note-idea-2367: 'идея: сервер в шкаф, пожалуйста' (true=memory_write, proba(action)=0.517) mw-note-idea-2369: '记住: гидропоника на балконе, пожалуйста' (true=memory_write, proba(action)=0.410) mw-note-idea-2370: '记住: сервер в шкаф, пожалуйста' (true=memory_write, proba(action)=0.539) mw-note-idea-2380: 'я хочу идея: сервер в шкаф' (true=memory_write, proba(action)=0.455) mw-note-idea-2386: 'я хочу 记住: сервер в шкаф' (true=memory_write, proba(action)=0.460) mw-note-idea-2393: 'гидропоника на балконе идея:' (true=memory_write, proba(action)=0.483) mw-note-idea-2396: 'гидропоника на балконе 记住:' (true=memory_write, proba(action)=0.464) sys-quiet-on-2577: 'я хочу режим тишина' (true=system, proba(action)=0.448) conv-goodbye-2869: 'до свидания, пожалуйста' (true=conversation, proba(action)=0.253) conv-goodbye-2875: 'я хочу до свидания' (true=conversation, proba(action)=0.213) unc-single-word-verb-2947: 'выключи' (true=uncertain, proba(action)=0.873) unc-single-word-verb-2948: 'включи' (true=uncertain, proba(action)=0.698) unc-single-word-verb-2949: 'перезапусти, пожалуйста' (true=uncertain, proba(action)=0.428) unc-single-word-verb-2950: 'выключи, пожалуйста' (true=uncertain, proba(action)=0.835) unc-single-word-verb-2951: 'включи, пожалуйста' (true=uncertain, proba(action)=0.691) unc-single-word-verb-2953: 'я хочу выключи' (true=uncertain, proba(action)=0.733) unc-single-word-verb-2954: 'я хочу включи' (true=uncertain, proba(action)=0.720) kq-homelab-disk-1494: 'хватает ли места на диске' (true=knowledge, proba(action)=0.635) kq-homelab-disk-1498: 'хватает ли места на диске, пожалуйста' (true=knowledge, proba(action)=0.664) kq-homelab-disk-1503: 'я хочу хватает ли места на диске' (true=knowledge, proba(action)=0.500) kq-homelab-disk-1504: 'надо бы хватает ли места на диске' (true=knowledge, proba(action)=0.630) kq-homelab-disk-1510: 'на диске хватает ли места' (true=knowledge, proba(action)=0.541) kq-task-check-1700: 'покажи задачи' (true=knowledge, proba(action)=0.859) kq-task-check-1702: 'какие задачи есть, пожалуйста' (true=knowledge, proba(action)=0.574) kq-task-check-1703: 'покажи задачи, пожалуйста' (true=knowledge, proba(action)=0.808) kq-task-check-1706: 'я хочу покажи задачи' (true=knowledge, proba(action)=0.715) kq-task-check-1709: 'покажи задачи?' (true=knowledge, proba(action)=0.514) mw-note-task-2429: 'добавь в задачи купить молоко' (true=memory_write, proba(action)=0.935) mw-note-task-2430: 'добавь в задачи починить кран' (true=memory_write, proba(action)=0.721) mw-note-task-2431: 'добавь в задачи обновить сервер' (true=memory_write, proba(action)=0.900) mw-note-task-2432: 'запиши задачу купить молоко' (true=memory_write, proba(action)=0.740) mw-note-task-2433: 'запиши задачу починить кран' (true=memory_write, proba(action)=0.548) mw-note-task-2434: 'запиши задачу обновить сервер' (true=memory_write, proba(action)=0.773) mw-note-task-2435: 'добавь в задачи купить молоко, пожалуйста' (true=memory_write, proba(action)=0.851) mw-note-task-2436: 'добавь в задачи починить кран, пожалуйста' (true=memory_write, proba(action)=0.743) mw-note-task-2437: 'добавь в задачи обновить сервер, пожалуйста' (true=memory_write, proba(action)=0.925) mw-note-task-2438: 'запиши задачу купить молоко, пожалуйста' (true=memory_write, proba(action)=0.617) mw-note-task-2439: 'запиши задачу починить кран, пожалуйста' (true=memory_write, proba(action)=0.549) mw-note-task-2440: 'запиши задачу обновить сервер, пожалуйста' (true=memory_write, proba(action)=0.739) mw-note-task-2441: 'я хочу добавь в задачи купить молоко' (true=memory_write, proba(action)=0.820) mw-note-task-2442: 'надо бы добавь в задачи купить молоко' (true=memory_write, proba(action)=0.791) mw-note-task-2443: 'я хочу добавь в задачи починить кран' (true=memory_write, proba(action)=0.568) mw-note-task-2444: 'надо бы добавь в задачи починить кран' (true=memory_write, proba(action)=0.503) mw-note-task-2445: 'я хочу добавь в задачи обновить сервер' (true=memory_write, proba(action)=0.870) mw-note-task-2446: 'надо бы добавь в задачи обновить сервер' (true=memory_write, proba(action)=0.724) mw-note-task-2447: 'я хочу запиши задачу купить молоко' (true=memory_write, proba(action)=0.658) mw-note-task-2448: 'надо бы запиши задачу купить молоко' (true=memory_write, proba(action)=0.676) mw-note-task-2449: 'я хочу запиши задачу починить кран' (true=memory_write, proba(action)=0.557) mw-note-task-2450: 'надо бы запиши задачу починить кран' (true=memory_write, proba(action)=0.458) mw-note-task-2451: 'я хочу запиши задачу обновить сервер' (true=memory_write, proba(action)=0.676) mw-note-task-2452: 'надо бы запиши задачу обновить сервер' (true=memory_write, proba(action)=0.495) mw-note-task-2453: 'купить молоко добавь в задачи' (true=memory_write, proba(action)=0.926) mw-note-task-2454: 'починить кран добавь в задачи' (true=memory_write, proba(action)=0.895) mw-note-task-2455: 'обновить сервер добавь в задачи' (true=memory_write, proba(action)=0.933) mw-note-task-2456: 'купить молоко запиши задачу' (true=memory_write, proba(action)=0.884) mw-note-task-2457: 'починить кран запиши задачу' (true=memory_write, proba(action)=0.701) mw-note-task-2458: 'обновить сервер запиши задачу' (true=memory_write, proba(action)=0.783) kq-cal-time-1063: 'когда планёрка, пожалуйста' (true=knowledge, proba(action)=0.499) kq-cal-time-1066: 'я хочу когда планёрка' (true=knowledge, proba(action)=0.457) kq-world-def-1205: 'что такое TCP' (true=knowledge, proba(action)=0.592) kq-world-def-1207: 'что такое Kubernetes' (true=knowledge, proba(action)=0.581) kq-world-def-1209: 'что такое React' (true=knowledge, proba(action)=0.396) kq-world-def-1210: 'кто такой TCP' (true=knowledge, proba(action)=0.428) kq-world-def-1215: 'что значит TCP' (true=knowledge, proba(action)=0.581) kq-world-def-1217: 'что значит Kubernetes' (true=knowledge, proba(action)=0.564) kq-world-def-1219: 'что значит React' (true=knowledge, proba(action)=0.441) kq-world-def-1220: 'что такое TCP, пожалуйста' (true=knowledge, proba(action)=0.785) kq-world-def-1221: 'что такое Docker, пожалуйста' (true=knowledge, proba(action)=0.456) kq-world-def-1222: 'что такое Kubernetes, пожалуйста' (true=knowledge, proba(action)=0.700) kq-world-def-1224: 'что такое React, пожалуйста' (true=knowledge, proba(action)=0.587) kq-world-def-1225: 'кто такой TCP, пожалуйста' (true=knowledge, proba(action)=0.615) kq-world-def-1227: 'кто такой Kubernetes, пожалуйста' (true=knowledge, proba(action)=0.687) kq-world-def-1229: 'кто такой React, пожалуйста' (true=knowledge, proba(action)=0.411) kq-world-def-1230: 'что значит TCP, пожалуйста' (true=knowledge, proba(action)=0.771) kq-world-def-1231: 'что значит Docker, пожалуйста' (true=knowledge, proba(action)=0.444) kq-world-def-1232: 'что значит Kubernetes, пожалуйста' (true=knowledge, proba(action)=0.639) kq-world-def-1234: 'что значит React, пожалуйста' (true=knowledge, proba(action)=0.561) kq-world-def-1235: 'я хочу что такое TCP' (true=knowledge, proba(action)=0.588) kq-world-def-1236: 'надо бы что такое TCP' (true=knowledge, proba(action)=0.415) kq-world-def-1239: 'я хочу что такое Kubernetes' (true=knowledge, proba(action)=0.442) kq-world-def-1240: 'надо бы что такое Kubernetes' (true=knowledge, proba(action)=0.460) kq-world-def-1243: 'я хочу что такое React' (true=knowledge, proba(action)=0.411) kq-world-def-1244: 'надо бы что такое React' (true=knowledge, proba(action)=0.331) kq-world-def-1245: 'я хочу кто такой TCP' (true=knowledge, proba(action)=0.350) kq-world-def-1249: 'я хочу кто такой Kubernetes' (true=knowledge, proba(action)=0.418) kq-world-def-1250: 'надо бы кто такой Kubernetes' (true=knowledge, proba(action)=0.358) kq-world-def-1255: 'я хочу что значит TCP' (true=knowledge, proba(action)=0.630) kq-world-def-1256: 'надо бы что значит TCP' (true=knowledge, proba(action)=0.442) kq-world-def-1259: 'я хочу что значит Kubernetes' (true=knowledge, proba(action)=0.576) kq-world-def-1263: 'я хочу что значит React' (true=knowledge, proba(action)=0.480) kq-world-def-1265: 'TCP что такое' (true=knowledge, proba(action)=0.510) kq-world-def-1267: 'Kubernetes что такое' (true=knowledge, proba(action)=0.483) kq-world-def-1269: 'React что такое' (true=knowledge, proba(action)=0.365) kq-world-def-1270: 'TCP кто такой' (true=knowledge, proba(action)=0.331) kq-world-def-1272: 'Kubernetes кто такой' (true=knowledge, proba(action)=0.406) kq-world-def-1275: 'TCP что значит' (true=knowledge, proba(action)=0.493) kq-world-def-1277: 'Kubernetes что значит' (true=knowledge, proba(action)=0.436) kq-world-def-1279: 'React что значит' (true=knowledge, proba(action)=0.358) kq-world-def-1280: 'что такое TCP?' (true=knowledge, proba(action)=0.624) kq-world-def-1282: 'что такое Kubernetes?' (true=knowledge, proba(action)=0.544) kq-world-def-1284: 'что такое React?' (true=knowledge, proba(action)=0.350) kq-world-def-1285: 'кто такой TCP?' (true=knowledge, proba(action)=0.407) kq-world-def-1289: 'кто такой React?' (true=knowledge, proba(action)=0.266) kq-world-def-1290: 'что значит TCP?' (true=knowledge, proba(action)=0.514) kq-world-def-1292: 'что значит Kubernetes?' (true=knowledge, proba(action)=0.509) kq-world-def-1294: 'что значит React?' (true=knowledge, proba(action)=0.356) kq-homelab-status-1429: 'как дела с бэкапами' (true=knowledge, proba(action)=0.442) kq-homelab-status-1431: 'как дела с доменом' (true=knowledge, proba(action)=0.518) kq-homelab-status-1433: 'есть новости по бэкапами, пожалуйста' (true=knowledge, proba(action)=0.389) kq-homelab-status-1435: 'есть новости по доменом, пожалуйста' (true=knowledge, proba(action)=0.497) kq-homelab-status-1439: 'что там с доменом, пожалуйста' (true=knowledge, proba(action)=0.418) kq-homelab-status-1441: 'как дела с бэкапами, пожалуйста' (true=knowledge, proba(action)=0.509) kq-homelab-status-1442: 'как дела с сервером, пожалуйста' (true=knowledge, proba(action)=0.569) kq-homelab-status-1443: 'как дела с доменом, пожалуйста' (true=knowledge, proba(action)=0.697) kq-homelab-status-1444: 'как дела с DNS, пожалуйста' (true=knowledge, proba(action)=0.452) kq-homelab-status-1461: 'я хочу как дела с бэкапами' (true=knowledge, proba(action)=0.434) kq-homelab-status-1462: 'надо бы как дела с бэкапами' (true=knowledge, proba(action)=0.437) kq-homelab-status-1465: 'я хочу как дела с доменом' (true=knowledge, proba(action)=0.427) kq-homelab-status-1471: 'доменом есть новости по' (true=knowledge, proba(action)=0.350) kq-homelab-status-1477: 'бэкапами как дела с' (true=knowledge, proba(action)=0.386) mw-fact-break-2172: 'час took a break' (true=memory_write, proba(action)=0.508) mw-fact-break-2173: 'пять минут took a break' (true=memory_write, proba(action)=0.416) sys-self-version-2739: 'текущая версия maven' (true=system, proba(action)=0.668) sys-self-version-2741: 'текущая версия праксиса' (true=system, proba(action)=0.363) sys-self-version-2742: 'what version maven' (true=system, proba(action)=0.750) sys-self-version-2743: 'what version нексуса' (true=system, proba(action)=0.395) sys-self-version-2744: 'what version праксиса' (true=system, proba(action)=0.570) sys-self-version-2745: 'какая версия maven, пожалуйста' (true=system, proba(action)=0.589) sys-self-version-2747: 'какая версия праксиса, пожалуйста' (true=system, proba(action)=0.396) sys-self-version-2748: 'текущая версия maven, пожалуйста' (true=system, proba(action)=0.737) sys-self-version-2749: 'текущая версия нексуса, пожалуйста' (true=system, proba(action)=0.384) sys-self-version-2750: 'текущая версия праксиса, пожалуйста' (true=system, proba(action)=0.486) sys-self-version-2751: 'what version maven, пожалуйста' (true=system, proba(action)=0.711) sys-self-version-2752: 'what version нексуса, пожалуйста' (true=system, proba(action)=0.394) sys-self-version-2753: 'what version праксиса, пожалуйста' (true=system, proba(action)=0.576) sys-self-version-2760: 'я хочу текущая версия maven' (true=system, proba(action)=0.601) sys-self-version-2761: 'надо бы текущая версия maven' (true=system, proba(action)=0.633) sys-self-version-2763: 'надо бы текущая версия нексуса' (true=system, proba(action)=0.409) sys-self-version-2764: 'я хочу текущая версия праксиса' (true=system, proba(action)=0.367) sys-self-version-2766: 'я хочу what version maven' (true=system, proba(action)=0.714) sys-self-version-2767: 'надо бы what version maven' (true=system, proba(action)=0.501) sys-self-version-2768: 'я хочу what version нексуса' (true=system, proba(action)=0.408) sys-self-version-2770: 'я хочу what version праксиса' (true=system, proba(action)=0.568) sys-self-version-2775: 'maven текущая версия' (true=system, proba(action)=0.734) sys-self-version-2776: 'нексуса текущая версия' (true=system, proba(action)=0.386) sys-self-version-2777: 'праксиса текущая версия' (true=system, proba(action)=0.557) sys-self-version-2778: 'maven what version' (true=system, proba(action)=0.712) sys-self-version-2779: 'нексуса what version' (true=system, proba(action)=0.441) sys-self-version-2780: 'праксиса what version' (true=system, proba(action)=0.582) kq-world-explain-1303: 'опиши машинное обучение' (true=knowledge, proba(action)=0.545) kq-world-explain-1309: 'объясни машинное обучение, пожалуйста' (true=knowledge, proba(action)=0.536) kq-world-explain-1312: 'опиши машинное обучение, пожалуйста' (true=knowledge, proba(action)=0.607) kq-world-explain-1330: 'надо бы опиши машинное обучение' (true=knowledge, proba(action)=0.376) kq-world-explain-1336: 'машинное обучение объясни' (true=knowledge, proba(action)=0.471) kq-world-explain-1339: 'машинное обучение опиши' (true=knowledge, proba(action)=0.587) kq-cap-ha-1734: 'ты можешь выключить свет' (true=knowledge, proba(action)=0.920) kq-cap-ha-1735: 'ты можешь выключить жалюзи' (true=knowledge, proba(action)=0.988) kq-cap-ha-1736: 'ты можешь выключить вытяжку' (true=knowledge, proba(action)=0.983) kq-cap-ha-1737: 'ты можешь выключить вентилятор' (true=knowledge, proba(action)=0.909) kq-cap-ha-1738: 'умеешь ли включить свет' (true=knowledge, proba(action)=0.779) kq-cap-ha-1739: 'умеешь ли включить жалюзи' (true=knowledge, proba(action)=0.942) kq-cap-ha-1740: 'умеешь ли включить вытяжку' (true=knowledge, proba(action)=0.898) kq-cap-ha-1741: 'умеешь ли включить вентилятор' (true=knowledge, proba(action)=0.508) kq-cap-ha-1742: 'сможешь открыть свет' (true=knowledge, proba(action)=0.919) kq-cap-ha-1743: 'сможешь открыть жалюзи' (true=knowledge, proba(action)=0.986) kq-cap-ha-1744: 'сможешь открыть вытяжку' (true=knowledge, proba(action)=0.981) kq-cap-ha-1745: 'сможешь открыть вентилятор' (true=knowledge, proba(action)=0.900) kq-cap-ha-1746: 'ты можешь выключить свет, пожалуйста' (true=knowledge, proba(action)=0.928) kq-cap-ha-1747: 'ты можешь выключить жалюзи, пожалуйста' (true=knowledge, proba(action)=0.988) kq-cap-ha-1748: 'ты можешь выключить вытяжку, пожалуйста' (true=knowledge, proba(action)=0.976) kq-cap-ha-1749: 'ты можешь выключить вентилятор, пожалуйста' (true=knowledge, proba(action)=0.938) kq-cap-ha-1750: 'умеешь ли включить свет, пожалуйста' (true=knowledge, proba(action)=0.846) kq-cap-ha-1751: 'умеешь ли включить жалюзи, пожалуйста' (true=knowledge, proba(action)=0.938) kq-cap-ha-1752: 'умеешь ли включить вытяжку, пожалуйста' (true=knowledge, proba(action)=0.902) kq-cap-ha-1753: 'умеешь ли включить вентилятор, пожалуйста' (true=knowledge, proba(action)=0.559) kq-cap-ha-1754: 'сможешь открыть свет, пожалуйста' (true=knowledge, proba(action)=0.892) kq-cap-ha-1755: 'сможешь открыть жалюзи, пожалуйста' (true=knowledge, proba(action)=0.978) kq-cap-ha-1756: 'сможешь открыть вытяжку, пожалуйста' (true=knowledge, proba(action)=0.975) kq-cap-ha-1757: 'сможешь открыть вентилятор, пожалуйста' (true=knowledge, proba(action)=0.929) kq-cap-ha-1758: 'я хочу ты можешь выключить свет' (true=knowledge, proba(action)=0.835) kq-cap-ha-1759: 'надо бы ты можешь выключить свет' (true=knowledge, proba(action)=0.746) kq-cap-ha-1760: 'я хочу ты можешь выключить жалюзи' (true=knowledge, proba(action)=0.951) kq-cap-ha-1761: 'надо бы ты можешь выключить жалюзи' (true=knowledge, proba(action)=0.961) kq-cap-ha-1762: 'я хочу ты можешь выключить вытяжку' (true=knowledge, proba(action)=0.932) kq-cap-ha-1763: 'надо бы ты можешь выключить вытяжку' (true=knowledge, proba(action)=0.952) kq-cap-ha-1764: 'я хочу ты можешь выключить вентилятор' (true=knowledge, proba(action)=0.837) kq-cap-ha-1765: 'надо бы ты можешь выключить вентилятор' (true=knowledge, proba(action)=0.754) kq-cap-ha-1766: 'я хочу умеешь ли включить свет' (true=knowledge, proba(action)=0.793) kq-cap-ha-1767: 'надо бы умеешь ли включить свет' (true=knowledge, proba(action)=0.640) kq-cap-ha-1768: 'я хочу умеешь ли включить жалюзи' (true=knowledge, proba(action)=0.892) kq-cap-ha-1769: 'надо бы умеешь ли включить жалюзи' (true=knowledge, proba(action)=0.784) kq-cap-ha-1770: 'я хочу умеешь ли включить вытяжку' (true=knowledge, proba(action)=0.822) kq-cap-ha-1771: 'надо бы умеешь ли включить вытяжку' (true=knowledge, proba(action)=0.798) kq-cap-ha-1774: 'я хочу сможешь открыть свет' (true=knowledge, proba(action)=0.840) kq-cap-ha-1775: 'надо бы сможешь открыть свет' (true=knowledge, proba(action)=0.838) kq-cap-ha-1776: 'я хочу сможешь открыть жалюзи' (true=knowledge, proba(action)=0.946) kq-cap-ha-1777: 'надо бы сможешь открыть жалюзи' (true=knowledge, proba(action)=0.940) kq-cap-ha-1778: 'я хочу сможешь открыть вытяжку' (true=knowledge, proba(action)=0.936) kq-cap-ha-1779: 'надо бы сможешь открыть вытяжку' (true=knowledge, proba(action)=0.933) kq-cap-ha-1780: 'я хочу сможешь открыть вентилятор' (true=knowledge, proba(action)=0.857) kq-cap-ha-1781: 'надо бы сможешь открыть вентилятор' (true=knowledge, proba(action)=0.700) kq-cap-ha-1782: 'свет ты можешь выключить' (true=knowledge, proba(action)=0.893) kq-cap-ha-1783: 'жалюзи ты можешь выключить' (true=knowledge, proba(action)=0.982) kq-cap-ha-1784: 'вытяжку ты можешь выключить' (true=knowledge, proba(action)=0.971) kq-cap-ha-1785: 'вентилятор ты можешь выключить' (true=knowledge, proba(action)=0.897) kq-cap-ha-1786: 'свет умеешь ли включить' (true=knowledge, proba(action)=0.786) kq-cap-ha-1787: 'жалюзи умеешь ли включить' (true=knowledge, proba(action)=0.946) kq-cap-ha-1788: 'вытяжку умеешь ли включить' (true=knowledge, proba(action)=0.924) kq-cap-ha-1789: 'вентилятор умеешь ли включить' (true=knowledge, proba(action)=0.674) kq-cap-ha-1790: 'свет сможешь открыть' (true=knowledge, proba(action)=0.931) kq-cap-ha-1791: 'жалюзи сможешь открыть' (true=knowledge, proba(action)=0.983) kq-cap-ha-1792: 'вытяжку сможешь открыть' (true=knowledge, proba(action)=0.967) kq-cap-ha-1793: 'вентилятор сможешь открыть' (true=knowledge, proba(action)=0.886) kq-cap-ha-1794: 'ты можешь выключить свет?' (true=knowledge, proba(action)=0.913) kq-cap-ha-1795: 'ты можешь выключить жалюзи?' (true=knowledge, proba(action)=0.980) kq-cap-ha-1796: 'ты можешь выключить вытяжку?' (true=knowledge, proba(action)=0.970) kq-cap-ha-1797: 'ты можешь выключить вентилятор?' (true=knowledge, proba(action)=0.862) kq-cap-ha-1798: 'умеешь ли включить свет?' (true=knowledge, proba(action)=0.709) kq-cap-ha-1799: 'умеешь ли включить жалюзи?' (true=knowledge, proba(action)=0.866) kq-cap-ha-1800: 'умеешь ли включить вытяжку?' (true=knowledge, proba(action)=0.862) kq-cap-ha-1802: 'сможешь открыть свет?' (true=knowledge, proba(action)=0.905) kq-cap-ha-1803: 'сможешь открыть жалюзи?' (true=knowledge, proba(action)=0.975) kq-cap-ha-1804: 'сможешь открыть вытяжку?' (true=knowledge, proba(action)=0.967) kq-cap-ha-1805: 'сможешь открыть вентилятор?' (true=knowledge, proba(action)=0.859) mw-fact-water-1881: 'воды попил стакан, пожалуйста' (true=memory_write, proba(action)=0.543) mw-fact-water-1882: 'воды попил литр, пожалуйста' (true=memory_write, proba(action)=0.444) mw-fact-water-1886: 'пил воду литр, пожалуйста' (true=memory_write, proba(action)=0.480) mw-fact-water-1894: 'я хочу выпил воды стакан' (true=memory_write, proba(action)=0.527) mw-fact-water-1896: 'я хочу выпил воды литр' (true=memory_write, proba(action)=0.465) mw-fact-water-1902: 'я хочу воды попил стакан' (true=memory_write, proba(action)=0.503) mw-fact-water-1904: 'я хочу воды попил литр' (true=memory_write, proba(action)=0.403) mw-fact-water-1910: 'я хочу пил воду стакан' (true=memory_write, proba(action)=0.468) mw-fact-water-1925: 'стакан выпил воды' (true=memory_write, proba(action)=0.575) mw-fact-water-1929: 'стакан воды попил' (true=memory_write, proba(action)=0.613) unc-ambiguous-noun-2892: 'вода' (true=uncertain, proba(action)=0.371) unc-ambiguous-noun-2893: 'бэкап' (true=uncertain, proba(action)=0.641) unc-ambiguous-noun-2894: 'сервер' (true=uncertain, proba(action)=0.505) unc-ambiguous-noun-2895: 'контейнер' (true=uncertain, proba(action)=0.978) unc-ambiguous-noun-2896: 'задача' (true=uncertain, proba(action)=0.746) unc-ambiguous-noun-2897: 'вода, пожалуйста' (true=uncertain, proba(action)=0.381) unc-ambiguous-noun-2898: 'бэкап, пожалуйста' (true=uncertain, proba(action)=0.636) unc-ambiguous-noun-2899: 'сервер, пожалуйста' (true=uncertain, proba(action)=0.720) unc-ambiguous-noun-2900: 'контейнер, пожалуйста' (true=uncertain, proba(action)=0.938) unc-ambiguous-noun-2901: 'задача, пожалуйста' (true=uncertain, proba(action)=0.742) unc-ambiguous-noun-2902: 'я хочу вода' (true=uncertain, proba(action)=0.476) unc-ambiguous-noun-2903: 'я хочу бэкап' (true=uncertain, proba(action)=0.731) unc-ambiguous-noun-2904: 'я хочу сервер' (true=uncertain, proba(action)=0.661) unc-ambiguous-noun-2905: 'я хочу контейнер' (true=uncertain, proba(action)=0.946) unc-ambiguous-noun-2906: 'я хочу задача' (true=uncertain, proba(action)=0.747) unc-multi-ambiguous-3001: 'всё ок' (true=uncertain, proba(action)=0.391) unc-multi-ambiguous-3007: 'я хочу всё ок' (true=uncertain, proba(action)=0.447) kq-cap-tool-1806: 'ты можешь перезапустить nginx' (true=knowledge, proba(action)=0.975) kq-cap-tool-1807: 'ты можешь перезапустить docker' (true=knowledge, proba(action)=0.936) kq-cap-tool-1808: 'ты можешь перезапустить сервер' (true=knowledge, proba(action)=0.736) kq-cap-tool-1809: 'сможешь остановить nginx' (true=knowledge, proba(action)=0.923) kq-cap-tool-1810: 'сможешь остановить docker' (true=knowledge, proba(action)=0.849) kq-cap-tool-1811: 'сможешь остановить сервер' (true=knowledge, proba(action)=0.802) kq-cap-tool-1812: 'умеешь ли проверить nginx' (true=knowledge, proba(action)=0.691) kq-cap-tool-1815: 'ты можешь перезапустить nginx, пожалуйста' (true=knowledge, proba(action)=0.975) kq-cap-tool-1816: 'ты можешь перезапустить docker, пожалуйста' (true=knowledge, proba(action)=0.942) kq-cap-tool-1817: 'ты можешь перезапустить сервер, пожалуйста' (true=knowledge, proba(action)=0.834) kq-cap-tool-1818: 'сможешь остановить nginx, пожалуйста' (true=knowledge, proba(action)=0.958) kq-cap-tool-1819: 'сможешь остановить docker, пожалуйста' (true=knowledge, proba(action)=0.890) kq-cap-tool-1820: 'сможешь остановить сервер, пожалуйста' (true=knowledge, proba(action)=0.877) kq-cap-tool-1821: 'умеешь ли проверить nginx, пожалуйста' (true=knowledge, proba(action)=0.761) kq-cap-tool-1824: 'я хочу ты можешь перезапустить nginx' (true=knowledge, proba(action)=0.937) kq-cap-tool-1825: 'надо бы ты можешь перезапустить nginx' (true=knowledge, proba(action)=0.934) kq-cap-tool-1826: 'я хочу ты можешь перезапустить docker' (true=knowledge, proba(action)=0.813) kq-cap-tool-1827: 'надо бы ты можешь перезапустить docker' (true=knowledge, proba(action)=0.787) kq-cap-tool-1828: 'я хочу ты можешь перезапустить сервер' (true=knowledge, proba(action)=0.676) kq-cap-tool-1829: 'надо бы ты можешь перезапустить сервер' (true=knowledge, proba(action)=0.570) kq-cap-tool-1830: 'я хочу сможешь остановить nginx' (true=knowledge, proba(action)=0.908) kq-cap-tool-1831: 'надо бы сможешь остановить nginx' (true=knowledge, proba(action)=0.918) kq-cap-tool-1832: 'я хочу сможешь остановить docker' (true=knowledge, proba(action)=0.806) kq-cap-tool-1833: 'надо бы сможешь остановить docker' (true=knowledge, proba(action)=0.789) kq-cap-tool-1834: 'я хочу сможешь остановить сервер' (true=knowledge, proba(action)=0.795) kq-cap-tool-1835: 'надо бы сможешь остановить сервер' (true=knowledge, proba(action)=0.721) kq-cap-tool-1836: 'я хочу умеешь ли проверить nginx' (true=knowledge, proba(action)=0.587) kq-cap-tool-1837: 'надо бы умеешь ли проверить nginx' (true=knowledge, proba(action)=0.505) kq-cap-tool-1842: 'nginx ты можешь перезапустить' (true=knowledge, proba(action)=0.943) kq-cap-tool-1843: 'docker ты можешь перезапустить' (true=knowledge, proba(action)=0.908) kq-cap-tool-1844: 'сервер ты можешь перезапустить' (true=knowledge, proba(action)=0.776) kq-cap-tool-1845: 'nginx сможешь остановить' (true=knowledge, proba(action)=0.880) kq-cap-tool-1846: 'docker сможешь остановить' (true=knowledge, proba(action)=0.790) kq-cap-tool-1847: 'сервер сможешь остановить' (true=knowledge, proba(action)=0.660) kq-cap-tool-1848: 'nginx умеешь ли проверить' (true=knowledge, proba(action)=0.633) kq-cap-tool-1851: 'ты можешь перезапустить nginx?' (true=knowledge, proba(action)=0.947) kq-cap-tool-1852: 'ты можешь перезапустить docker?' (true=knowledge, proba(action)=0.886) kq-cap-tool-1853: 'ты можешь перезапустить сервер?' (true=knowledge, proba(action)=0.661) kq-cap-tool-1854: 'сможешь остановить nginx?' (true=knowledge, proba(action)=0.916) kq-cap-tool-1855: 'сможешь остановить docker?' (true=knowledge, proba(action)=0.628) kq-cap-tool-1856: 'сможешь остановить сервер?' (true=knowledge, proba(action)=0.625) kq-cap-tool-1857: 'умеешь ли проверить nginx?' (true=knowledge, proba(action)=0.604) mw-fact-meal-1946: 'пообедал салатом' (true=memory_write, proba(action)=0.634) mw-fact-meal-1950: 'поужинал салатом' (true=memory_write, proba(action)=0.685) mw-fact-meal-1951: 'поужинал пиццей' (true=memory_write, proba(action)=0.493) mw-fact-meal-1955: 'ел пиццей' (true=memory_write, proba(action)=0.238) mw-fact-meal-1962: 'позавтракал салатом, пожалуйста' (true=memory_write, proba(action)=0.459) mw-fact-meal-1966: 'пообедал салатом, пожалуйста' (true=memory_write, proba(action)=0.656) mw-fact-meal-1968: 'поужинал овсянкой, пожалуйста' (true=memory_write, proba(action)=0.414) mw-fact-meal-1970: 'поужинал салатом, пожалуйста' (true=memory_write, proba(action)=0.662) mw-fact-meal-1974: 'ел салатом, пожалуйста' (true=memory_write, proba(action)=0.592) mw-fact-meal-1975: 'ел пиццей, пожалуйста' (true=memory_write, proba(action)=0.290) mw-fact-meal-1976: 'just ate овсянкой, пожалуйста' (true=memory_write, proba(action)=0.328) mw-fact-meal-1978: 'just ate салатом, пожалуйста' (true=memory_write, proba(action)=0.429) mw-fact-meal-1984: 'я хочу позавтракал салатом' (true=memory_write, proba(action)=0.483) mw-fact-meal-1992: 'я хочу пообедал салатом' (true=memory_write, proba(action)=0.626) mw-fact-meal-1993: 'надо бы пообедал салатом' (true=memory_write, proba(action)=0.528) mw-fact-meal-2000: 'я хочу поужинал салатом' (true=memory_write, proba(action)=0.675) mw-fact-meal-2001: 'надо бы поужинал салатом' (true=memory_write, proba(action)=0.483) mw-fact-meal-2010: 'я хочу ел пиццей' (true=memory_write, proba(action)=0.265) mw-fact-meal-2016: 'я хочу just ate салатом' (true=memory_write, proba(action)=0.561) mw-fact-meal-2024: 'овсянкой пообедал' (true=memory_write, proba(action)=0.385) mw-fact-meal-2026: 'салатом пообедал' (true=memory_write, proba(action)=0.612) mw-fact-meal-2027: 'пиццей пообедал' (true=memory_write, proba(action)=0.444) mw-fact-meal-2028: 'овсянкой поужинал' (true=memory_write, proba(action)=0.438) mw-fact-meal-2030: 'салатом поужинал' (true=memory_write, proba(action)=0.591) mw-fact-meal-2031: 'пиццей поужинал' (true=memory_write, proba(action)=0.571) mw-note-homelab-2401: 'заметка про 备份策略' (true=memory_write, proba(action)=0.633) mw-note-homelab-2404: 'запиши про настройку 备份策略' (true=memory_write, proba(action)=0.657) mw-note-homelab-2406: 'заметка про DNS записи, пожалуйста' (true=memory_write, proba(action)=0.442) mw-note-homelab-2407: 'заметка про 备份策略, пожалуйста' (true=memory_write, proba(action)=0.730) mw-note-homelab-2410: 'запиши про настройку 备份策略, пожалуйста' (true=memory_write, proba(action)=0.719) mw-note-homelab-2415: 'я хочу заметка про 备份策略' (true=memory_write, proba(action)=0.671) mw-note-homelab-2416: 'надо бы заметка про 备份策略' (true=memory_write, proba(action)=0.645) mw-note-homelab-2421: 'я хочу запиши про настройку 备份策略' (true=memory_write, proba(action)=0.561) mw-note-homelab-2422: 'надо бы запиши про настройку 备份策略' (true=memory_write, proba(action)=0.666) mw-note-homelab-2425: '备份策略 заметка про' (true=memory_write, proba(action)=0.742) mw-note-homelab-2428: '备份策略 запиши про настройку' (true=memory_write, proba(action)=0.633) mw-free-remember-2460: 'запомни пароль от wifi' (true=memory_write, proba(action)=0.836) mw-free-remember-2461: 'запомни адрес электрика' (true=memory_write, proba(action)=0.753) mw-free-remember-2462: 'сохрани что встреча в 3' (true=memory_write, proba(action)=0.457) mw-free-remember-2463: 'сохрани пароль от wifi' (true=memory_write, proba(action)=0.939) mw-free-remember-2464: 'сохрани адрес электрика' (true=memory_write, proba(action)=0.980) mw-free-remember-2466: 'занеси пароль от wifi' (true=memory_write, proba(action)=0.733) mw-free-remember-2467: 'занеси адрес электрика' (true=memory_write, proba(action)=0.734) mw-free-remember-2469: 'внеси пароль от wifi' (true=memory_write, proba(action)=0.847) mw-free-remember-2470: 'внеси адрес электрика' (true=memory_write, proba(action)=0.898) mw-free-remember-2472: 'запомни пароль от wifi, пожалуйста' (true=memory_write, proba(action)=0.866) mw-free-remember-2473: 'запомни адрес электрика, пожалуйста' (true=memory_write, proba(action)=0.734) mw-free-remember-2474: 'сохрани что встреча в 3, пожалуйста' (true=memory_write, proba(action)=0.595) mw-free-remember-2475: 'сохрани пароль от wifi, пожалуйста' (true=memory_write, proba(action)=0.942) mw-free-remember-2476: 'сохрани адрес электрика, пожалуйста' (true=memory_write, proba(action)=0.935) mw-free-remember-2478: 'занеси пароль от wifi, пожалуйста' (true=memory_write, proba(action)=0.830) mw-free-remember-2479: 'занеси адрес электрика, пожалуйста' (true=memory_write, proba(action)=0.807) mw-free-remember-2481: 'внеси пароль от wifi, пожалуйста' (true=memory_write, proba(action)=0.942) mw-free-remember-2482: 'внеси адрес электрика, пожалуйста' (true=memory_write, proba(action)=0.946) mw-free-remember-2485: 'я хочу запомни пароль от wifi' (true=memory_write, proba(action)=0.692) mw-free-remember-2486: 'надо бы запомни пароль от wifi' (true=memory_write, proba(action)=0.698) mw-free-remember-2487: 'я хочу запомни адрес электрика' (true=memory_write, proba(action)=0.768) mw-free-remember-2488: 'надо бы запомни адрес электрика' (true=memory_write, proba(action)=0.706) mw-free-remember-2489: 'я хочу сохрани что встреча в 3' (true=memory_write, proba(action)=0.585) mw-free-remember-2490: 'надо бы сохрани что встреча в 3' (true=memory_write, proba(action)=0.465) mw-free-remember-2491: 'я хочу сохрани пароль от wifi' (true=memory_write, proba(action)=0.826) mw-free-remember-2492: 'надо бы сохрани пароль от wifi' (true=memory_write, proba(action)=0.868) mw-free-remember-2493: 'я хочу сохрани адрес электрика' (true=memory_write, proba(action)=0.914) mw-free-remember-2494: 'надо бы сохрани адрес электрика' (true=memory_write, proba(action)=0.932) mw-free-remember-2497: 'я хочу занеси пароль от wifi' (true=memory_write, proba(action)=0.606) mw-free-remember-2498: 'надо бы занеси пароль от wifi' (true=memory_write, proba(action)=0.775) mw-free-remember-2499: 'я хочу занеси адрес электрика' (true=memory_write, proba(action)=0.723) mw-free-remember-2500: 'надо бы занеси адрес электрика' (true=memory_write, proba(action)=0.776) mw-free-remember-2503: 'я хочу внеси пароль от wifi' (true=memory_write, proba(action)=0.738) mw-free-remember-2504: 'надо бы внеси пароль от wifi' (true=memory_write, proba(action)=0.895) mw-free-remember-2505: 'я хочу внеси адрес электрика' (true=memory_write, proba(action)=0.946) mw-free-remember-2506: 'надо бы внеси адрес электрика' (true=memory_write, proba(action)=0.955) mw-free-remember-2508: 'пароль от wifi запомни' (true=memory_write, proba(action)=0.843) mw-free-remember-2509: 'адрес электрика запомни' (true=memory_write, proba(action)=0.817) mw-free-remember-2510: 'что встреча в 3 сохрани' (true=memory_write, proba(action)=0.582) mw-free-remember-2511: 'пароль от wifi сохрани' (true=memory_write, proba(action)=0.955) mw-free-remember-2512: 'адрес электрика сохрани' (true=memory_write, proba(action)=0.974) mw-free-remember-2514: 'пароль от wifi занеси' (true=memory_write, proba(action)=0.672) mw-free-remember-2515: 'адрес электрика занеси' (true=memory_write, proba(action)=0.541) mw-free-remember-2517: 'пароль от wifi внеси' (true=memory_write, proba(action)=0.838) mw-free-remember-2518: 'адрес электрика внеси' (true=memory_write, proba(action)=0.781) sys-quiet-off-2583: 'громкий режим' (true=system, proba(action)=0.559) sys-quiet-off-2584: 'выключи тихий' (true=system, proba(action)=0.372) sys-quiet-off-2588: 'громкий режим, пожалуйста' (true=system, proba(action)=0.528) sys-quiet-off-2589: 'выключи тихий, пожалуйста' (true=system, proba(action)=0.470) sys-quiet-off-2593: 'я хочу громкий режим' (true=system, proba(action)=0.381) unc-anaphora-2922: 'сделай это, пожалуйста' (true=uncertain, proba(action)=0.312)
10. Contrast-family results
Experiment A (all dev)
family count correct accuracy false_act
question 123 91 74.0% 27 capability_question 126 15 11.9% 111
Experiment B (residual only)
family count correct accuracy false_act
question 123 91 74.0% 27 capability_question 126 14 11.1% 112
11. Calibration metrics
Experiment A
- ECE: 0.045
- Brier score: 0.459
- Log loss: 0.929
Experiment B
- ECE: 0.046
- Brier score: 0.467
- Log loss: 0.946
12. Abstention curves
Experiment A (all dev)
threshold n_accepted coverage accuracy macro_f1 false_act
0.40 2293 92.1% 70.7% 0.706 351
0.50 1968 79.0% 74.5% 0.751 289
0.60 1584 63.6% 78.0% 0.781 227
0.70 1244 50.0% 80.9% 0.812 177
0.80 851 34.2% 84.1% 0.883 120
0.90 438 17.6% 83.3% 0.830 73
Experiment B (residual only)
threshold n_accepted coverage accuracy macro_f1 false_act
0.40 2244 92.8% 70.4% 0.700 346
0.50 1941 80.3% 73.6% 0.733 285
0.60 1571 65.0% 77.3% 0.771 229
0.70 1228 50.8% 79.9% 0.792 178
0.80 845 34.9% 83.6% 0.873 120
0.90 431 17.8% 81.9% 0.827 78
13. Action-threshold curve
Experiment A
threshold action_P action_R false_act
0.40 0.645 0.803 351
0.50 0.672 0.745 289
0.60 0.697 0.655 227
0.70 0.708 0.539 177
0.80 0.733 0.413 120
0.90 0.721 0.237 73
Experiment B
threshold action_P action_R false_act
0.40 0.640 0.803 346
0.50 0.664 0.736 285
0.60 0.687 0.655 229
0.70 0.698 0.537 178
0.80 0.722 0.407 120
0.90 0.690 0.227 78
14. Model artifact size and runtime cost
- Trainable parameters: 2310
- 6 classes × 384 features = 2304 weights
- 6 bias terms
- Serialized head size: 9240 bytes (9.0 KB)
- Additional inference FLOPs: 2304 multiply-accumulates
- Incremental cost (e5 already computed): ~2304 FLOPs, <1µs
- Cost if semantic router must trigger its own e5: full ONNX inference (~384 × 128 × 12 = ~590K FLOPs)
16. Recommendation
linear head sufficient
Residual macro F1 of 0.663 and accuracy of 67.9% exceed the legacy baseline (40.8% residual accuracy) by a meaningful margin. A linear head over frozen e5-small embeddings is a viable first production candidate.
17. Commit hash for experiment tooling
59a0a08d329fbcbefad4ec858cf8c6cc07014a36