61 lines
4.2 KiB
Python
61 lines
4.2 KiB
Python
"""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()
|