lct-hack/backend/tests
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Ivan Gerasimov 842a333d16 feat: уточнение адреса — место происшествия не равно адресу заявителя (lct-35)
Главный предмет проверки в билетах заказчика — адрес: названный заявителем
часто неверен, а настоящий добывается переспросом («ул. Станционная, 28»
оказывается Королёвом). Памятка АРМ-112 называет это обычным делом.

До этой правки оценка работала наоборот: ground_truth.address сравнивался
с единственным значением факта, поэтому курсант, правильно переспросивший
и записавший настоящий адрес, получал расхождение с эталоном, а записавший
ориентир — зачёт.

- Схема: у факта появились refined и refine_on, задаются только вместе.
- Слот-автомат различает уточнение и повтор: повтор раздражает звонящего,
  уточнение — нет, оператор спросил о другом и получил другое.
- Звонящий поправляется отдельной репликой, а не повторяет прежнее значение;
  офлайн-таблица получила секцию refine.
- Оценка: метрика address_refined (E1, опрос). Сделана отдельной, а не правкой
  метрики address: «записал не тот адрес» и «не спросил» — разные навыки
  и разные компетенции в радаре.
- Общие пункты чек-листа подключаются по требованию сценария: формулировки
  в checklists/common.yaml, сценарий объявляет пункт с тем же id без текста.
  Добавлять «уточните адрес» во все сценарии нельзя — неотработанный пункт
  штрафует за вопрос, которого сценарий не требовал.
- scenarios/fire-private-house-l3.yaml — первый сценарий из библиотеки
  заказчика (билет 3, вызов 1).

Риск механики проверен на живой модели: «Назовите адрес» и «Это точно Москва?»
эмбеддинги не путают, тест это фиксирует.

125 тестов зелёных (12 новых), make typecheck чистый.
2026-09-19 20:26:49 +03:00
..
test_db.py fix: test_db.py вешал make test, когда Postgres недоступен 2026-09-18 16:28:47 +03:00
test_domain.py lct-01: контракт закрыт — координаты, обязательные поля, коды ошибок 2026-09-15 19:48:56 +03:00
test_ekp.py feat: классификатор ЕКП — признаки вместо выбора службы (lct-32) 2026-09-19 20:11:50 +03:00
test_llm.py lct-07 и lct-19: звонящий на LLM, офлайн-таблица, предгенерация 2026-09-17 23:50:19 +03:00
test_profile.py lct-18: профиль курсанта — радар, история попыток, дельта 2026-09-17 21:42:12 +03:00
test_reference.py lct-16 и половина lct-19: разбор, отчёт, внешний монитор, эталон 2026-09-17 21:32:12 +03:00
test_refinement.py feat: уточнение адреса — место происшествия не равно адресу заявителя (lct-35) 2026-09-19 20:26:49 +03:00
test_scenarios.py lct-03 и lct-04: журнал сессий и библиотека сценариев 2026-09-15 20:10:05 +03:00
test_scoring.py feat: классификатор ЕКП — признаки вместо выбора службы (lct-32) 2026-09-19 20:11:50 +03:00
test_slots.py lct-07 и lct-19: звонящий на LLM, офлайн-таблица, предгенерация 2026-09-17 23:50:19 +03:00
test_slots_e5.py lct-07 (без LLM): слот-автомат, персона, звонящий на заготовках, make repl 2026-09-17 13:57:43 +03:00
test_station.py lct-20: АРМ диспетчера ДДС и цепочка 112 → ДДС 2026-09-17 21:45:47 +03:00
test_tree.py lct-07 и lct-19: звонящий на LLM, офлайн-таблица, предгенерация 2026-09-17 23:50:19 +03:00
test_voice_pipeline.py lct-06: голосовой контур VAD → STT → звонящий → TTS, с перебиванием 2026-09-17 15:04:17 +03:00
test_voice_text.py lct-06: голосовой контур VAD → STT → звонящий → TTS, с перебиванием 2026-09-17 15:04:17 +03:00
test_ws.py lct-22: пульт директив — преподаватель ведёт ситуацию 2026-09-17 21:38:43 +03:00