"""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()