Files
model-training/llm/build_route_eval.py
2026-07-19 23:52:25 +04:00

61 lines
4.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Build the small, human-labelled route holdout set.
These utterances are not consumed by gen_route_data.py and must never be added
to route_train.jsonl. Labels follow the daemon's current JSON-array contract.
"""
import json
from pathlib import Path
from gen_route_data import ROUTE_SYSTEM, valid_actions
OUT = Path(__file__).resolve().parent / "data" / "route_eval.jsonl"
CASES = [
("напомни завтра позвонить врачу", [{"intent":"reminder","text":"позвонить врачу"}]),
("запиши купить новые батарейки", [{"intent":"note","text":"купить новые батарейки"}]),
("я только что полил цветы", [{"intent":"fact","key":"flowers","value":"полил"}]),
("что такое обратный прокси", [{"intent":"query","text":"что такое обратный прокси"}]),
("перезапусти медиасервер", [{"intent":"act","verb":"перезапустить медиасервер"}]),
("который сейчас час", [{"intent":"system"}]),
("как у тебя дела", [{"intent":"chat","text":"как у тебя дела"}]),
("сохрани адрес мастерской", [{"intent":"note","text":"адрес мастерской"}]),
("напомни проверить резервную копию вечером", [{"intent":"reminder","text":"проверить резервную копию"}]),
("сервер снова доступен", [{"intent":"fact","key":"server","value":"доступен"}]),
("почему контейнер постоянно перезапускается", [{"intent":"query","text":"почему контейнер постоянно перезапускается"}]),
("выключи свет на кухне", [{"intent":"act","verb":"выключить свет на кухне"}]),
("очисти свою память", [{"intent":"system"}]),
("ну и денёк сегодня", [{"intent":"chat","text":"ну и денёк сегодня"}]),
("запомни, что код от калитки изменился", [{"intent":"note","text":"код от калитки изменился"}]),
("я закончил отчёт", [{"intent":"fact","key":"report","value":"закончил"}]),
("покажи свободное место на диске", [{"intent":"act","verb":"показать свободное место на диске"}]),
("какая погода ожидается утром", [{"intent":"query","text":"какая погода ожидается утром"}]),
("напомни через час достать бельё", [{"intent":"reminder","text":"достать бельё"}]),
("приятно снова тебя слышать", [{"intent":"chat","text":"приятно снова тебя слышать"}]),
("напомни купить молоко и запиши что кофе закончился", [
{"intent":"reminder","text":"купить молоко"},
{"intent":"note","text":"кофе закончился"}]),
("проверь диск и потом напомни посмотреть результат", [
{"intent":"act","verb":"проверить диск"},
{"intent":"reminder","text":"посмотреть результат"}]),
("я принял лекарство, запиши дозировку пять миллиграммов", [
{"intent":"fact","key":"medicine","value":"принял"},
{"intent":"note","text":"дозировка пять миллиграммов"}]),
]
def main() -> None:
lines = []
for utterance, actions in CASES:
assert valid_actions(actions)
lines.append(json.dumps({"messages": [
{"role":"system","content":ROUTE_SYSTEM},
{"role":"user","content":utterance},
{"role":"assistant","content":json.dumps(actions, ensure_ascii=False)},
], "intents":[a["intent"] for a in actions], "source":"human/route-eval"},
ensure_ascii=False))
OUT.write_text("\n".join(lines) + "\n", encoding="utf-8")
print(f"wrote {len(lines)} held-out route cases -> {OUT}")
if __name__ == "__main__":
main()