AAYMA
RU
Войти

Voice Router (фронтенд Neonic Samurais)

Голосовой агент контакт-центра страховой компании: STT для казахской, русской и смешанной речи, маршрутизатор сценариев на Go с LLM и TTS на двух…

Доведённый продукт
Команда «Latex» 22💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: Latex
Кейс HackAlem.ai: Коммуникации — Halyk Bank · кейс 2
Стадия: Доведённый продукт

Задача кейса: «Voice Router»: голосовой AI, маршрутизирующий звонки в контакт-центре страховой компании

Суть

Голосовой агент контакт-центра страховой компании: STT для казахской, русской и смешанной речи, маршрутизатор сценариев на Go с LLM и TTS на двух языках. Есть панель трассировки решений и передача разговора оператору.

Как устроено

Браузер отправляет PCM 16 кГц по WebSocket в шлюз, шлюз передаёт звук в STT (wav2vec2+CTC) и получает текст с меткой языка. Go-маршрутизатор обрабатывает реплику так: сначала детерминированный пре-роутер для слотов и ответов «да/нет», затем TF-IDF по символьным n-граммам отбирает 8 кандидатов, затем быстрый путь (gpt-4.1-nano) или полный (gpt-4.1-mini) со Structured Outputs. После этого оценивается неопределённость с порогами 0,25/0,55 (выполнить, уточнить или передать оператору), а исполнитель собирает слоты и требует подтверждения перед необратимыми действиями. Ответ собирается из шаблонов и озвучивается Silero (ru) или KazakhTTS (kk).

Ключевые решения

  • TF-IDF char n-gram retrieval
  • cosine similarity shortlist
  • Structured Outputs JSON schema
  • uncertainty thresholds
  • fallback ladder
  • scenario stack / multi-intent queue
  • VAD
  • SQLite checkpoints
  • idempotency by request_id

Особенности

Гибридная маршрутизация: лексический поиск только сужает выбор, LLM выбирает из шорт-листа, а решение «выполнить/уточнить/оператор» принимается по составной оценке неопределённости. Работает «лестница» отказоустойчивости (резервная модель, затем уточнение, затем оператор). STT и TTS локальные, язык ответа выбирается для каждого предложения. Есть Go-харнес оценки маршрутизации.

Стек

Go · SQLite (modernc) · Python · FastAPI · PyTorch · ESPnet · WebSocket · HTML/CSS/JS · Docker Compose · Makefile

Модели

gpt-4.1-mini · gpt-4.1-nano · wav2vec2 alibiserikbay/kazakh-russian-mixed-stt · Silero TTS v5 · ISSAI KazakhTTS (Tacotron2 + ParallelWaveGAN)


Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-509d7f64-latex.

README

README.md

Voice Router — гибридный голосовой AI-агент с LLM-слоем выбора сценария

Проект для HackAlem (кейс 2): голосовой агент контакт-центра страховой компании Saqta Insurance (компания вымышленная, все данные синтетические). Агент понимает русскую, казахскую и смешанную речь, с помощью LLM выбирает один из 40 бизнес-сценариев, собирает недостающие данные, выполняет действия и отвечает голосом. Фронтенд называется Neonic Samurais.

1. Какую проблему решает проект

В звонки страховой компании приходят похожие друг на друга запросы: «авария» может быть ДТП, которое только что произошло (SC11), обращением пострадавшего (SC12) или страховым случаем по КАСКО (SC13). Клиенты переходят с русского на казахский посреди фразы, меняют тему и задают несколько вопросов сразу. Многие действия, например оформление или расторжение полиса и регистрация страхового случая, необратимы.

Проект показывает, как автоматизировать первую линию такого контакт-центра. Нужно правильно выбрать сценарий, объяснить этот выбор, не выполнять необратимых действий без явного «да» и передать разговор оператору вместе с контекстом, если бот не уверен.

Для кого: контакт-центры, которые обслуживают клиентов на русском и казахском языках, и супервизоры, которым нужно видеть, почему бот принял то или иное решение.

2. Что реализовано

  • Голосовой чат в браузере (chat/): удержание кнопки или Space для разговора, режим hands-free, промежуточная расшифровка во время речи, ввод текстом, выбор языка ответа (Auto / Русский / Қазақша).
  • Панель трассировки после каждой реплики: язык, выбранные сценарии с уверенностью, причина выбора, альтернативы, выполненные действия, задержка по этапам (stt / router / tts / total).
  • Распознавание речи (stt/): локальная модель для казахского, русского и смешанной речи, VAD, тестовая консоль с подсчётом WER/CER.
  • Синтез речи (tts/): русский голос Silero v5 и казахский ISSAI KazakhTTS. Язык выбирается для каждого предложения отдельно.
  • LLM-маршрутизатор (backend/, Go), основная часть решения:
    • гибридный конвейер: детерминированный пре-роутер → лексический поиск кандидатов → быстрый или полный маршрут через LLM → оценка неопределённости → исполнение сценария;
    • несколько намерений в одной фразе: срочные сценарии (SC11, SC15, SC38) идут первыми, остальные ставятся в очередь;
    • смена темы с возвратом к прерванному сценарию (стек сценариев, у каждого свои слоты);
    • уточняющий вопрос вместо угадывания при низкой уверенности;
    • предпросмотр и явное подтверждение («Да» / «Иә») на следующей реплике перед каждым необратимым действием;
    • перевод на оператора с кодом причины и контекстом (последние реплики, слоты, альтернативы, компоненты неопределённости), API для операторской консоли и необязательный webhook;
    • необязательная проверка намерения пользователем или оператором (intent review);
    • «лестница» отказоустойчивости: при ошибке модели запрос уходит на резервную модель, затем на уточнение только по результатам поиска, затем на оператора;
    • синтетический бэкенд: все 31 действие из actions.json реализованы как моки поверх данных датасета;
    • хранение сессий, реплик и контрольных точек в SQLite, идемпотентность по request_id, восстановление после перезапуска.
  • Харнес оценки (backend/cmd/evaluate): прогон dev-набора, многоходовых диалогов, проб и офлайн-оценка поиска кандидатов, вывод точности и задержек.
  • Запуск одной командой через Docker Compose (CPU, опционально GPU).

3. Как работает решение

Основной сценарий: клиент говорит в микрофон и получает голосовой ответ.

  1. Браузер записывает PCM 16 кГц и передаёт его по WebSocket в шлюз чата (:9102).
  2. Шлюз отправляет аудио в STT (:9100) и получает текст и подсказку о языке (ru / kk / mixed).
  3. Шлюз отправляет текст в Go-маршрутизатор: POST /v1/turns (:8080).
  4. Маршрутизатор обрабатывает реплику:
    • Пре-роутер (без LLM): если бот ждал слот (телефон, ИИН, дату) или «да/нет» и реплика точно является таким ответом, сценарий продолжается без вызова модели.
    • Поиск кандидатов: TF-IDF по символьным n-граммам сравнивает фразу с примерами сценариев и формирует шорт-лист из 8 сценариев. Поиск только сужает выбор и никогда не выбирает сценарий сам.
    • Шлюз быстрого пути: если лидер шорт-листа явно впереди и помечен в датасете fast_path_eligible, вызывается быстрая модель (gpt-4.1-nano) с тремя кандидатами. Иначе вызывается основная модель (gpt-4.1-mini) с шорт-листом, границами not_this_if, состоянием диалога и последними 10 репликами.
    • Ответ модели (Structured Outputs, строгая JSON-схема) проверяется в Go по каталогу.
    • Оценка неопределённости строится по наблюдаемым сигналам: уверенность модели, согласие с поиском, отрыв лидера, конфликт с правилами not_this_if. По порогам (0.25 / 0.55) принимается решение: выполнить, уточнить или перевести на оператора.
    • Исполнитель идентифицирует клиента, по одному запрашивает слоты, выполняет действия сценария. Необратимые действия проходят через предпросмотр и подтверждение.
    • Ответ собирается из шаблонов датасета. LLM формулирует текст только там, где шаблона нет: уточнения, ответы по базе знаний, ошибки.
  5. Шлюз отправляет ответ в TTS (:9101), и браузер воспроизводит аудио вместе с трассировкой.

4. Технологии

СлойТехнологии
МаршрутизаторGo 1.25, стандартный net/http, modernc.org/sqlite (SQLite без cgo)
LLMOpenAI Responses API, Structured Outputs, store: false; модели по умолчанию gpt-4.1-mini (основная) и gpt-4.1-nano (быстрая и резервная), настраиваются через переменные окружения
STTPython, FastAPI, PyTorch, модель wav2vec2 + CTC alibiserikbay/kazakh-russian-mixed-stt, VAD, ffmpeg
TTSPython, FastAPI, Silero TTS v5 (русский), ISSAI KazakhTTS: ESPnet Tacotron2 + ParallelWaveGAN (казахский)
Чат и шлюзPython, FastAPI, WebSocket, HTML/CSS/JavaScript без сборки, AudioWorklet
ИнфраструктураDocker, Docker Compose (CPU и NVIDIA GPU), Makefile, bash-скрипт запуска
ОценкаGo-харнес cmd/evaluate, эталонный скрипт voice_router_dataset/evaluate.py

5. Архитектура

браузер ──ws──▶ chat gateway (:9102) ──▶ STT (:9100)                 текст + язык
                                     ──▶ Go-маршрутизатор (:8080)     POST /v1/turns ──▶ ответ + trace
                                     ──▶ TTS (:9101)                  аудио ответа ──▶ браузер
КаталогКомпонентПорт
backend/Слой 2: LLM-маршрутизатор, исполнитель сценариев, синтетический бэкенд, SQLite, операторский API8080
stt/Слой 1: распознавание речи и тестовая консоль9100
tts/Слой 3: синтез речи9101
chat/Фронтенд Neonic Samurais и шлюз, который связывает STT, маршрутизатор и TTS9102
voice_router_dataset/Датасет организаторов: сценарии, слоты, действия, база знаний, мок-данные, dev-набор. Встраивается в бинарник Go
docker/, docker-compose*.ymlКонтейнеры четырёх сервисов
scripts/Запуск Python-сервисов без Docker, загрузка весов моделей в Docker-том
docs/Справочник API (api.md) и визуализация цикла обработки реплики (agentic-loop.html)

Основные модули маршрутизатора (backend/internal/router/):

ФайлНазначение
catalog.goЗагрузка и валидация каталога сценариев, слотов и действий из датасета
prerouter.goПродолжение сценария без LLM (слот или да/нет)
retrieval.goШорт-лист кандидатов: TF-IDF по n-граммам, косинусная близость
openai.go, context.goЗапросы к OpenAI и сборка промпта
uncertainty.goВердикт «выполнить / уточнить / оператор»
engine.go, workflow.goЦикл обработки реплики, фреймы сценариев, стек и очередь, лимиты
backend.goМоки бизнес-действий
templates.goШаблонные ответы из датасета
operator.goТикеты перевода на оператора и webhook
store.go, repository.goSQLite, контрольные точки, идемпотентность
http.goHTTP API

Шлюз чата умеет работать без Go-маршрутизатора: в режиме ROUTER_MODE=auto при недоступном маршрутизаторе он использует простой mock по ключевым словам, и такие ответы помечаются mock router.

6. Установка и запуск

Вариант А: Docker (рекомендуется)

Нужны Docker с Compose и ключ OpenAI API.

  1. В корне репозитория создайте файл .env:

    OPENAI_API_KEY=sk-...
    # необязательно:
    # OPENAI_MODEL=gpt-4.1-mini
    # API_TOKEN=...          # bearer-токен маршрутизатора; чат передаёт его сам
    # HF_TOKEN=hf_...        # если Hugging Face отвечает 401 при загрузке весов
    
  2. Соберите и запустите:

    docker compose up --build -d      # или: make up
    

    При первом запуске в том speech-models скачивается около 1 ГБ весов моделей речи.

  3. Откройте:

  4. Логи и остановка:

    docker compose logs -f router
    docker compose down               # веса остаются в томе
    

С NVIDIA GPU и NVIDIA Container Toolkit:

docker compose -f docker-compose.yml -f docker-compose.gpu.yml up --build -d

Если порт 8080 занят, задайте ROUTER_PORT=18080 в .env.

Вариант Б: локально, без Docker

Маршрутизатор (Go 1.25+):

cd backend
cp .env.example .env              # укажите OPENAI_API_KEY; файл .env читается при старте
go run ./cmd/router               # http://127.0.0.1:8080, база voice_router.db создаётся автоматически

STT, TTS и чат (Python, ffmpeg). Нужны два виртуальных окружения: .venv для STT и чата, .venv-tts на Python 3.12/3.13 для TTS. Первичная установка описана в stt/README.md и tts/README.md. Затем:

.venv/bin/pip install -r chat/requirements.txt
scripts/speech_services.sh start          # STT + TTS + чат; --ui дополнительно включает консоль STT
scripts/speech_services.sh status | stop | logs

Скрипт написан для bash в Linux (использует ss, setsid). На Windows удобнее вариант с Docker.

7. Как проверить решение

Автотесты (ключ API не нужен, модель подменяется фейком):

cd backend
go test ./...

Голосом в браузере (после запуска по варианту А):

  1. Откройте http://localhost:9102, разрешите доступ к микрофону и убедитесь, что индикатор ROUTER показывает go, а не mock.
  2. Удерживая кнопку или Space, скажите: «Скажите, почём сейчас ОГПО на машину в Астане?» Ожидаемый сценарий: SC01 (расчёт стоимости ОГПО).
  3. Откройте панель ⌁ trace: там видны сценарий, причина, альтернативы, путь (fast / full) и задержки по этапам.
  4. Смешанная речь с двумя намерениями: «Сәлеметсіз бе, Түркияға баруға сақтандыру керек, и ещё скажите, где ваш офис в Астане». Ожидаются SC06 (страховка для путешествий) и SC33 (адреса офисов).
  5. Идентификация и подтверждение: попросите оформить полис ОГПО и на вопрос о телефоне назовите номер клиента из мок-данных, например +77010000001. Перед оформлением бот озвучит данные и подождёт явного «Да» / «Иә».
  6. Скажите «соедините с оператором»: ответ получит статус handoff, в трассировке появится код причины и номер тикета.

Через API (без голоса):

curl -s http://localhost:8080/v1/scenarios | head -c 300
curl -s http://localhost:8080/v1/turns -H "Content-Type: application/json" -d '{
  "session_id": "demo-1", "request_id": "t1",
  "text": "Подскажите адрес офиса в Алматы", "language": "ru"}'

Ожидаемый сценарий: SC33. Если в .env задан API_TOKEN, добавьте заголовок Authorization: Bearer <API_TOKEN>. Полный контракт API описан в docs/api.md (на английском, часть разделов о PostgreSQL устарела: сейчас используется SQLite).

Оценка точности маршрутизации на dev-наборе (104 фразы, платные запросы к OpenAI, нужен Python для evaluate.py):

cd backend
go run ./cmd/evaluate -limit 5                  # пробный прогон
go run ./cmd/evaluate                           # весь dev-набор + evaluate.py
go run ./cmd/evaluate -mode dialogs             # 10 многоходовых диалогов
go run ./cmd/evaluate -mode retrieval           # офлайн, без API: качество шорт-листа

8. Данные и интеграции

  • Датасет организаторов (voice_router_dataset/): 40 сценариев и 3 системных намерения, каталог слотов, 31 действие, база знаний (офисы, продукты, формулы цен, клиники, правила), мок-бэкенд (11 клиентов, 11 полисов, 4 страховых случая, 2 платежа), 10 размеченных диалогов, 104 dev-фразы. Дата среза данных — 2026-10-01, она считается «сегодняшней». Dev-фразы и их метки в модель не передаются.
  • OpenAI API (Responses API): выбор сценария и формулировка ответов, где нет шаблона. Это единственный внешний сервис во время работы.
  • Hugging Face и сервер ISSAI: однократная загрузка весов STT и TTS. После загрузки распознавание и синтез речи работают локально.
  • Operator webhook (необязательно, OPERATOR_WEBHOOK_URL): уведомление о новом тикете, телефон, ИИН и e-mail маскируются.
  • Реальных интеграций со страховыми системами, SMS, платежами или телефонией нет. Все действия выполняются над синтетическими данными, результаты помечены mock: true.

9. Ограничения

  • Компания, клиенты, цены и правила вымышлены. Идентификация по телефону или ИИН демонстрационная и не является настоящей аутентификацией.
  • В моках есть упрощения: КАСКО рассчитывается только по тарифу Standard, один слот записи в день на локацию, условные цены продления.
  • Без ключа OpenAI маршрутизатор не запускается, а чат переключается на упрощённый mock по ключевым словам.
  • STT выдаёт текст без пунктуации и регистра, числа словами. Потоковое распознавание не реализовано, аудио отправляется после окончания фразы.
  • Казахский TTS произносит русские слова внутри казахских предложений с акцентом. Цифры в тексте ответа нужно писать словами.
  • SQLite рассчитан на один процесс маршрутизатора. Горизонтальное масштабирование не предусмотрено.
  • Сценарии фиксированы датасетом, API для их редактирования нет.
  • Реальная телефония и живой перевод звонка оператору не реализованы: есть только тикет, API операторской консоли и webhook. Отдельного интерфейса оператора нет, каталог frontend/ пуст.
  • Целевые задержки (500 мс на выбор сценария, 1,5 с до начала ответа) заложены в дизайн, но в репозитории нет зафиксированных результатов замеров. Точность маршрутизации также не зафиксирована. Её можно измерить командой go run ./cmd/evaluate.
  • Микрофон в браузере работает только на localhost или по HTTPS.

10. Deployed-версия

В репозитории нет ссылки на развёрнутую версию. Решение запускается локально (см. раздел 6).

Дополнительные материалы

Звёзды
⭐ 0
Форки
0
Язык
Go
Последний push
в прошлом месяце
Коммиты
42
Авторы
4
Файлы
113
Ветки
3

Авторы коммитов

STECH Agent 23ayatskii a 7sserzhan 7Sanzhar 6

История коммитов

  • 2026-09-23 17:55Build compose images locally instead of pulling themayatskii a
  • 2026-09-23 17:55Pin matching torch and torchaudio in the TTS imageayatskii a
  • 2026-09-23 17:53Merge remote-tracking branch 'origin/main'STECH Agent
  • 2026-09-23 17:52Fix regressions from the re-run: slot JSON, fast model, Docker envSTECH Agent
  • 2026-09-23 17:51Merge branch 'worktree-wf_04e92431-b12-3'STECH Agent
  • 2026-09-23 17:49Seed the mock backend as a recorded SQLite migration with inspection viewsSTECH Agent
  • 2026-09-23 17:48Update docs for the hybrid router, SQLite store and operator handoffSTECH Agent
  • 2026-09-23 17:46Build compose images locally instead of pulling themayatskii a
Все коммиты (42)
  • 2026-09-23 17:43Merge pull request #7 from BAITC-Hacks/sanzhik_branchSanzhar
  • 2026-09-23 17:43final versionsserzhan
  • 2026-09-23 17:36Wire baseline fixes and SQLite operator queue; make tests greenSTECH Agent
  • 2026-09-23 17:35Add end-to-end operator takeover with reason-coded handoffsSTECH Agent
  • 2026-09-23 17:33Give the router container a writable SQLite volumeSTECH Agent
  • 2026-09-23 17:32Add one-command Docker launch (Dockerfile, compose, Makefile)STECH Agent
  • 2026-09-23 17:32Keep model handoffs and date sides in the pre-routerSTECH Agent
  • 2026-09-23 17:32Stop lexical retrieval from vetoing confident routing decisionsSTECH Agent
  • 2026-09-23 17:32Add turn-loop contracts: route options, trace fields, fallback ladderSTECH Agent
  • 2026-09-23 17:32Add text-mode evaluation harness and in-memory repositorySTECH Agent
  • 2026-09-23 17:32Report action inputs and extracted slots per turn in the harnessSTECH Agent
  • 2026-09-23 17:32Add slot sanitisation and answer masking helpersSTECH Agent
  • 2026-09-23 17:32Replace PostgreSQL store with SQLite (modernc, pure Go)STECH Agent
  • 2026-09-23 17:32Implement retrieval shortlist (stage 03)STECH Agent
  • 2026-09-23 17:32Implement deterministic pre-router (stage 02)STECH Agent
  • 2026-09-23 17:32Route with candidate details: compact index prompt and fast routeSTECH Agent
  • 2026-09-23 17:32Implement uncertainty assessment (stage 06)STECH Agent
  • 2026-09-23 17:32Fix uncertainty review findings: short shortlists, weak secondaries, follow-upsSTECH Agent
  • 2026-09-23 17:32Template completed answers from dataset closingsSTECH Agent
  • 2026-09-23 17:14Neonic Samurais chat redesign and answer-language pickerayatskii a
  • 2026-09-23 16:57Merge remote-tracking branch 'origin/main' into ayatskiiayatskii a
  • 2026-09-23 16:53Merge speech services and chat frontend; Docker stack with the Go routerayatskii a
  • 2026-09-23 16:46Add turn-loop design walkthrough (docs/agentic-loop.html)STECH Agent
  • 2026-09-23 16:44Merge pull request #5 from BAITC-Hacks/sanzhik_branchSanzhar
  • 2026-09-23 16:43nearly final versionsserzhan
  • 2026-09-23 16:10Merge pull request #4 from BAITC-Hacks/sanzhik_branchSanzhar
  • 2026-09-23 16:09folder correctionssserzhan
  • 2026-09-23 15:52Merge pull request #3 from BAITC-Hacks/sanzhik_branchSanzhar
  • 2026-09-23 15:51first versionsserzhan
  • 2026-09-23 14:54Merge pull request #2 from BAITC-Hacks/sanzhik_branchSanzhar
  • 2026-09-23 14:53dividing worksserzhan
  • 2026-09-23 14:50technical requirmentsserzhan
  • 2026-09-23 13:54Merge pull request #1 from BAITC-Hacks/sanzhik_branchSanzhar
  • 2026-09-23 13:51summarysserzhan
Структура репозитория (113 файлов)
.dockerignore
.gitignore
CLAUDE.md
DESIGN.md
HackAlem AI_ Voice Router - гибридный голосовой AI-робот с LLM-слоем выбора сценария.pdf
Makefile
README.md
backend/.env.example
backend/.gitignore
backend/cmd/evaluate/cases.go
backend/cmd/evaluate/main.go
backend/cmd/evaluate/metrics.go
backend/cmd/evaluate/retrieval.go
backend/cmd/evaluate/run.go
backend/cmd/evaluate/testdata/probes.json
backend/cmd/migrate/main.go
backend/cmd/migrate/main_test.go
backend/cmd/router/main.go
backend/go.mod
backend/go.sum
backend/internal/router/backend.go
backend/internal/router/backend_test.go
backend/internal/router/catalog.go
backend/internal/router/context.go
backend/internal/router/dotenv.go
backend/internal/router/engine.go
backend/internal/router/engine_sqlite_test.go
backend/internal/router/engine_test.go
backend/internal/router/http.go
backend/internal/router/http_test.go
backend/internal/router/memory_store.go
backend/internal/router/migrations/001_durable_router.sql
backend/internal/router/migrations/002_seed_mock_backend.sql
backend/internal/router/migrations/003_mock_backend_views.sql
backend/internal/router/mock_seed.go
backend/internal/router/mock_seed_test.go
backend/internal/router/openai.go
backend/internal/router/openai_test.go
backend/internal/router/operator.go
backend/internal/router/operator_http_test.go
backend/internal/router/operator_test.go
backend/internal/router/prerouter.go
backend/internal/router/prerouter_test.go
backend/internal/router/repository.go
backend/internal/router/repository_test.go
backend/internal/router/retrieval.go
backend/internal/router/retrieval_test.go
backend/internal/router/review_prompt.go
backend/internal/router/review_prompt_test.go
backend/internal/router/review_test.go
backend/internal/router/sanitize.go
backend/internal/router/sanitize_test.go
backend/internal/router/store.go
backend/internal/router/store_sqlite_test.go
backend/internal/router/templates.go
backend/internal/router/templates_test.go
backend/internal/router/types.go
backend/internal/router/uncertainty.go
backend/internal/router/uncertainty_test.go
backend/internal/router/workflow.go
backend/internal/router/workflow_helpers.go
chat/README.md
chat/reply_lang.py
chat/requirements.txt
chat/router_client.py
chat/server.py
chat/static/app.js
chat/static/index.html
chat/static/style.css
chat/static/worklet.js
chat/tests/test_gateway_lang.py
chat/tests/test_reply_lang.py
docker-compose.gpu.yml
docker-compose.yml
docker/chat.Dockerfile
docker/router.Dockerfile
docker/stt.Dockerfile
docker/tts.Dockerfile
docs/agentic-loop.html
docs/api.md
scripts/docker_seed_models.sh
scripts/speech_services.sh
stt/README.md
stt/download_model.py
stt/engine.py
stt/eval_samples.py
stt/fetch_samples.py
stt/metrics.py
stt/requirements.txt
stt/samples/manifest.json
stt/server.py
stt/static/app.js
stt/static/index.html
stt/static/style.css
stt/transcribe.py
tts/README.md
tts/download_models.py
tts/engine.py
tts/requirements.txt
tts/server.py
voice_router_dataset/README.kz.md
voice_router_dataset/README.md
voice_router_dataset/README.ru.md
voice_router_dataset/actions.json
voice_router_dataset/dev_utterances.json
voice_router_dataset/dialogs_sample.json
voice_router_dataset/embed.go
voice_router_dataset/evaluate.py
voice_router_dataset/go.mod
voice_router_dataset/knowledge_base.json
voice_router_dataset/mock_backend.json
voice_router_dataset/scenarios.json
voice_router_dataset/slots.json
Ветки (3)

Обсуждение 0 комментариев

Войдите, чтобы комментировать

Пока нет комментариев — будьте первым.