AAYMA
RU
Войти

Butaq

Голосовой AI-помощник страховой компании: понимает запрос клиента на русском или казахском, выбирает сценарий, уточняет слоты, выполняет…

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

О проекте

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

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

Суть

Голосовой AI-помощник страховой компании: понимает запрос клиента на русском или казахском, выбирает сценарий, уточняет слоты, выполняет симулированные действия и отвечает голосом; есть панель администратора и телефонный вход через SignalWire.

Как устроено

Голос идёт между браузером и GPT-Live по WebRTC (или входящий звонок через SignalWire), реплики передаются Router-агенту вместе с контекстом и каталогом сценариев из PostgreSQL. Router определяет язык, намерение, слоты и отложенные темы; код проверяет ID и порог уверенности и выбирает route/clarify/handoff. Детерминированный Workflow валидирует слоты и запускает action adapters (необратимые действия только после preview и подтверждения), Resolution-агент формирует ответ по фактам; в интерфейсе видны причина выбора, уверенность и альтернативы.

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

  • OpenAI Agents SDK
  • Router/Workflow/Resolution multi-agent
  • извлечение слотов
  • порог уверенности route/clarify/handoff
  • стек тем (активная и отложенные)
  • barge-in прерывание
  • WebRTC realtime voice
  • SignalWire/Twilio телефония
  • WebAuthn passkey
  • InsightFace face login

Особенности

Задеплоенный сайт и реальный телефонный номер для звонка боту. LLM-маршрутизация отделена от детерминированного workflow, необратимые действия проходят через preview и явное подтверждение. Сценарии, промпты и порог уверенности редактируются из админки без перезапуска, есть дополнительные наборы данных (auto/health/travel).

Стек

Python · FastAPI · Pydantic · Uvicorn · Next.js 16 · React 19 · TypeScript · Tailwind CSS 4 · Radix UI · PostgreSQL 16 · SQLAlchemy · Alembic · Docker Compose · Caddy · SignalWire · ONNX Runtime · pytest

Модели

gpt-5.6-terra · gpt-live-1 · gpt-live-transcribe · gpt-transcribe · gpt-4o-mini-tts


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

README

README.md

🌐 Сайт: https://owlpeer.com/

📞 Позвонить Butaq: +1 (201) 231-1497

🎬 Демо: Открыть демо

Butaq — голосовой AI-помощник страховой службы

Клиент описывает проблему своими словами — Butaq выбирает сценарий, уточняет детали и отвечает на русском или казахском языке.

Проект для кейса Voice Router: голосовой маршрутизатор обращений в страховую компанию. Он помогает клиенту разобраться с полисом, оплатой, возвратом или страховым случаем, а команде контакт-центра — настраивать сценарии и видеть, почему AI выбрал конкретное направление обращения.

Голосовой интерфейс · Главная · Быстрый запуск · Проверка для жюри · Ограничения

Хакатонный прототип с синтетическими страховыми данными. Реализованы диалог, маршрутизация, чтение, расчёты и симуляция действий без изменения реальной страховой системы. Изменение договоров, платежи и фактическое соединение с оператором не выполняются.

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

Страховые обращения часто похожи по формулировке, но требуют разных действий: проверить статус выплаты, оспорить её сумму или сообщить о новом страховом случае. В одном разговоре клиент может менять тему, возвращаться к предыдущему вопросу и переключаться между русским и казахским.

Butaq сопоставляет запрос с каталогом сценариев через LLM, учитывает контекст беседы и запрашивает уточнение при недостаточной уверенности. Для демонстрации доступны браузерный диалог и панель администратора; для входящих телефонных звонков реализован отдельный адаптер.

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

ВозможностьЧто доступно в текущей версии
Голосовой диалогСтраница /voice/, микрофон, голосовой ответ и текстовые подписи через GPT-Live и WebRTC
Текстовый вводСообщения в интерфейсе, в том числе во время голосового сеанса; отдельный HTTP API
Русский и казахскийИнструкции агентам и примеры данных для двух языков, смешанной речи и переключения языка
AI и workflowRouter выбирает сценарий и извлекает слоты; детерминированный Workflow проверяет параметры и подтверждение; Resolution готовит ответ по фактам и результатам действий
КонтекстАктивная и отложенные темы, извлечённые параметры, продолжение и смена сценария
ПрерываниеОстановка воспроизведения и отмена незавершённой работы при прерывании разговора
Объяснение решенияСценарий, причина выбора, уверенность, альтернативы и времена этапов в ответе API; карточки решения в интерфейсе
Работа с даннымиЧтение, расчёты и синтетическая симуляция 31 действия стартового набора; необратимые действия требуют preview и явного подтверждения
АдминистрированиеРедактирование сценариев, промптов, модели, workflow-политик и порога уверенности; импорт JSON-каталога
Вход администратораТокен, passkey через WebAuthn и распознавание лица через InsightFace
Телефонный адаптерВходящий звонок SignalWire → GPT-Live → общий сервис Router/Resolution; выключен по умолчанию

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

Пример входного запроса: «Хочу оформить ОГПО».

  1. Ввод. Пользователь начинает голосовой разговор или вводит текст. В основном голосовом режиме звук идёт между браузером и GPT-Live по WebRTC; сервер управляет сеансом и получает события разговора.
  2. Выбор сценария. Страховой вопрос передаётся Router вместе с контекстом беседы и актуальным каталогом из PostgreSQL. Агент определяет язык, намерение, параметры и возможные отложенные темы.
  3. Проверка решения. Код проверяет структурированный ответ, допустимость ID и порог уверенности. Результат — route (выбран сценарий), clarify (нужно уточнение) или handoff (нужна помощь оператора).
  4. Выполнение сценария. Workflow валидирует собранные слоты, запрашивает недостающие и запускает зарегистрированные action adapters. Необратимые действия сначала получают preview и явное подтверждение. Resolution формирует ответ только по данным и результатам; simulate не изменяет исходный mock backend.
  5. Результат. Пользователь получает объяснение; голосовой слой озвучивает ответ, интерфейс показывает подписи и решение маршрутизатора. Следующая реплика использует контекст текущего сеанса.

Для файлового API путь отдельный: аудиофайл → транскрипция → Router → Resolution → синтез речи. Для текста через HTTP синтез включается параметром synthesize.

Технологии

ОбластьТехнологии из репозитория
BackendPython ≥ 3.10; Docker-образ на Python 3.12; FastAPI, Pydantic, Uvicorn
FrontendTypeScript, Next.js 16, React 19, Tailwind CSS 4, Radix UI, Lucide, OGL
AI-агентыOpenAI API, OpenAI Agents SDK; модель Router/Resolution задаётся настройками
Основной голосовой режимGPT-Live, WebRTC, WebSocket для управления и событий
Дополнительный аудиопайплайнOpenAI transcription/TTS, Web Audio API, AudioWorklet
ХранениеPostgreSQL 16, SQLAlchemy, Alembic
Аутентификация администратораWebAuthn, InsightFace, ONNX Runtime
ТелефонияSignalWire cXML, SIP/TLS, OpenAI Live; пакет telephony/
Развёртывание и проверкиDocker Compose, Caddy, pytest, Node.js test runner, TypeScript typecheck

Модели по умолчанию в .env.example:

НазначениеПеременнаяЗначение
Router и ResolutionROUTER_MODELgpt-5.6-terra
Голосовой разговор в браузереMULTI_AGENT_LIVE_MODELgpt-live-1
Потоковая транскрипция дополнительного WebSocket-режимаMULTI_AGENT_TRANSCRIBE_MODELgpt-live-transcribe
Распознавание загруженного аудиоV2V_TRANSCRIBE_MODELgpt-transcribe
Отдельный синтез речиV2V_TTS_MODELgpt-4o-mini-tts

Это значения конфигурации проекта. Для запуска требуется доступ к выбранным моделям в используемом аккаунте API.

Архитектура проекта

flowchart LR
    B[Браузер: голос и текст] <-->|WebRTC: аудио| L[OpenAI GPT-Live]
    B <-->|HTTP / WebSocket| C[Caddy]
    A[Панель администратора] --> C
    C <--> F[FastAPI]
    F <-->|Управление голосовым сеансом| L
    F --> S[RouterService]
    S --> R[Router: выбор сценария]
    R --> V[Проверка решения]
    V --> W[Workflow: слоты, подтверждение, симуляция действий]
    W --> Q[Resolution: ответ по проверенным данным]
    Q --> S
    S <--> D[(PostgreSQL: каталог и настройки)]
    P[SignalWire: входящий звонок] --> T[Телефонный адаптер]
    T <--> L
    T --> S

Два агента используют общий сервис для браузера, HTTP-запросов и телефонии. Каталог и настройки сохраняются в PostgreSQL; изменения администратора учитываются при следующем обращении. Контекст активных разговоров хранится в памяти процесса backend.

app/                         FastAPI, API, сервис маршрутизации
├── api/                     Текст, голос, потоковые сеансы, администрирование
├── db/                      Модели БД, репозиторий, миграции Alembic
├── phone/                   Адаптер входящих звонков SignalWire
└── data/                    Демокаталог и дополнительные синтетические наборы
multi-agent/src/multi_agent/  Router, Resolution, контекст, инструменты, Live
v2v/                         Общий клиент OpenAI и аудиопайплайн
faceid/                      Распознавание лица и хранение шаблонов
telephony/                   Библиотека телефонии и её тесты
frontend/                    Next.js: главная, /voice/, /admin/, /telephony/
case_2/voice_router_dataset/  Отдельный датасет кейса Saqta Insurance
tests/                       Тесты приложения и интеграции с PostgreSQL

Описание AI-пайплайна — в multi-agent/README.md, подключения звонков — в docs/telephony.md.

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

1. Подготовить окружение

Нужны Docker с Compose v2, доступ к интернету для сборки и ключ OpenAI API. Команды выполняются из корня клонированного репозитория. Локальные Python и Node.js для Docker-запуска не требуются.

# Для новой установки. Если .env уже существует, отредактируйте его.
cp .env.example .env

Заполните в .env:

V2V_API_KEY=ваш-ключ-api
ROUTER_ADMIN_TOKEN=ваш-длинный-случайный-токен
POSTGRES_PASSWORD=ваш-пароль-postgresql

Для локального запуска оставьте ROUTER_WEBAUTHN_ORIGIN=http://localhost:3000, localhost в FRONTEND_ORIGINS и TELEPHONY_ENABLED=false. Полный список настроек с пояснениями — в .env.example. Ключи хранятся на backend; .env не следует добавлять в Git.

2. Собрать и запустить

docker compose up --build -d
docker compose ps

Эквивалентная команда при установленном Make — make up.

Compose запускает PostgreSQL, backend и frontend под Caddy. Backend автоматически применяет миграции. При старте пустой каталог заполняется полным стартовым набором из case_2/voice_router_dataset/; существующий каталог и правки сохраняются.

3. Открыть приложение

Страница или сервисЛокальный адрес
Главнаяhttp://localhost:3000/
Голосовой и текстовый интерфейсhttp://localhost:3000/voice/
Панель администратораhttp://localhost:3000/admin/
Swagger UIhttp://localhost:8000/docs
Проверка backendhttp://localhost:8000/health
PostgreSQL для локальных инструментовlocalhost:5433, база butaq, пользователь butaq

Для первого входа в панель используйте ROUTER_ADMIN_TOKEN. После входа можно зарегистрировать passkey или лицо. Микрофону и камере нужно разрешение браузера; для голосового режима используйте localhost или HTTPS.

Compose также занимает порты 80 и 443 для Caddy. Они должны быть свободны, как и 3000, 8000 и 5433.

4. Управлять сервисами

docker compose logs --tail=100 backend  # Диагностика backend
docker compose logs -f                # Логи всех сервисов
docker compose down                   # Остановка с сохранением тома БД

После изменения .env пересоздайте backend: docker compose up -d --build backend. Значения ROUTER_MODEL и ROUTER_CONFIDENCE_THRESHOLD из окружения инициализируют только пустые настройки: на существующей базе меняйте их через /admin/settings/.

Для своего публичного домена обновите frontend/Caddyfile, FRONTEND_ORIGINS и ROUTER_WEBAUTHN_ORIGIN. Последний должен точно совпадать с origin браузера для passkey и операций администратора с cookie.

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

Демонстрация для жюри

Сценарий рассчитан на стартовый каталог case_2/voice_router_dataset/ и настроенный ключ API.

  1. Проверьте доступность backend и загрузку каталога:

    curl -fsS http://localhost:8000/health
    # {"status":"ok"}
    
    curl -fsS http://localhost:8000/router/scenarios
    # На новой установке — массив из 40 сценариев.
    
  2. Откройте http://localhost:3000/voice/. При первом обращении загрузится стартовый каталог из 40 сценариев. Нажмите Talk to Butaq и скажите: «Хочу оформить ОГПО». Агент последовательно запросит регион, тип машины, ИИН водителей, госномер и телефон, покажет preview и попросит подтверждение. Карточка справа отображает собранные слоты и действия.

  3. Проверьте собранные слоты, preview и подтверждение в панели трассировки. Смените язык на казахский и тему разговора, затем вернитесь к отложенному вопросу.

  4. Убедитесь, что результат обозначен как синтетический, без обещания реального выпуска полиса или соединения с оператором.

Успешный /health подтверждает ответ процесса, но не проверяет доступ к моделям или передачу аудио.

Проверка через API без микрофона

curl -sS http://localhost:8000/router/text \
  -H 'Content-Type: application/json' \
  -d '{"session_id":"jury-demo","text":"Хочу оформить ОГПО","synthesize":false}'

Ответ содержит transcript, reply, action, scenario_id, confidence, reason, alternatives, pending_scenario_ids, language и timings. Workflow также возвращает workflow_status, collected_slots, missing_slots, confirmation_required, action_trace и completed. Для продолжения разговора используйте тот же session_id, для нового — другое значение. synthesize:false отключает озвучку; обращения к LLM остаются платными.

APIНазначение
POST /router/textТекстовый запрос; опциональная озвучка
POST /router/voiceАудиофайл в поле audio и session_id, формат multipart/form-data
WS /router/liveУправление основным WebRTC-разговором и события интерфейса
WS /router/streamДополнительный потоковый протокол для текста и аудио
GET /router/scenariosАктивный каталог
GET /router/sessions/{session_id}Контекст браузерного/текстового сеанса
POST /router/admin/catalog/import-filesИмпорт каталога с авторизацией администратора

Тесты и оценка

Для локальных тестов нужны Python с venv, Node.js (в Docker используется версия 22) и npm. Установка Python-зависимостей может потребовать компилятор и CMake для InsightFace; состав системных зависимостей указан в Dockerfile backend.

python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e '.[dev]'
TELEPHONY_ENABLED=false python -m pytest -q

Без TEST_DATABASE_URL тесты с PostgreSQL пропускаются. Для их запуска на локальной БД из Compose подставьте пароль из .env (специальные символы в URL нужно кодировать):

TEST_DATABASE_URL='postgresql+psycopg://butaq:YOUR_POSTGRES_PASSWORD@localhost:5433/butaq' \
  TELEPHONY_ENABLED=false python -m pytest -q

Тесты БД создают и удаляют отдельную схему. Основной набор использует заглушки AI и аудио; он проверяет логику приложения, а не качество реальных ответов моделей.

# Из корня репозитория: проверки frontend в отдельном подкаталоге.
(cd frontend && npm ci && npm run typecheck && npm run test:voice)

# Библиотека телефонии имеет отдельный набор тестов.
(cd telephony && TELEPHONY_ENABLED=false PYTHONPATH=. python -m pytest -q)

# Просмотр демонабора без API-вызовов.
python app/data/demo/evaluate.py --limit 48

# Официальный live-прогон: 104 реплики и 10 диалогов, платные вызовы модели.
python case_2/voice_router_dataset/evaluate_live.py \
  --base-url http://localhost:8000 --dialogs --report /tmp/butaq-live-report.json

Результаты отдельных разработческих прогонов сохранены в multi-agent/evals/. Они не являются оценкой на скрытом наборе жюри и не подтверждают гарантированную точность или задержку.

Подробная последовательность настройки, импорта и демонстрации приведена в demo runbook, а проверка по исходному ТЗ — в матрице соответствия.

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

  • При первом запуске backend пустая база атомарно заполняется всеми JSON-данными из case_2/voice_router_dataset/: 40 сценариями, 43 слотами, 31 действием, knowledge base, синтетическим backend, 104 тестовыми репликами и 10 диалогами. Повторный запуск не перезаписывает правки; после seed источником истины становится PostgreSQL.
  • В app/data/prod/{auto,health,travel}/ лежат три независимых синтетических набора (авто-, медицинское и туристическое страхование). Они не загружаются автоматически: администратор может импортировать один согласованный набор через POST /router/admin/catalog/import-files. Подробности — в описании данных.
  • Внешний OpenAI API нужен для распознавания речи, работы агентов и озвучки; доступность и стоимость зависят от выбранных моделей и учётной записи. InsightFace при первом использовании загружает локальную модель распознавания лиц. Исходный шаблон главной страницы также использует внешние медиа- и шрифтовые ресурсы.
  • Интеграция с SignalWire/OpenAI для входящих звонков описана в docs/telephony.md, и включается через TELEPHONY_ENABLED=true после настройки credentials и вебхуков.

Для смены набора откройте /admin/import/ и загрузите согласованные JSON-файлы, включая сценарии, слоты, действия, knowledge base и mock backend. Импорт заменяет активный каталог и справочные данные; для экспериментов используйте отдельный экземпляр. Настройки модели и промпты сохраняются.

Главная страница использует внешние медиаресурсы; сведения об исходных шаблонах и лицензиях находятся в frontend/ATTRIBUTION.md.

Ограничения

  • Демонстрационные операции. Workflow выполняет чтение, расчёты, preview и симуляцию действий. simulate не изменяет mock backend и не выполняет оплату, выпуск, отмену, отправку или запись в реальной системе.
  • Передача оператору. handoff сообщает о необходимости помощи человека; фактический перевод звонка и исходящие звонки не реализованы.
  • Зависимость от провайдеров. Голосовой режим требует совместимого браузера, разрешения на микрофон, сети и доступных моделей. Наличие адаптера SignalWire и тестов с заглушками не подтверждает успешный реальный звонок.
  • Память сеансов. Активные разговоры и звонки хранятся в одном процессе и теряются при перезапуске. Общего хранилища сеансов для нескольких backend-процессов нет.
  • Качество и измерения. Уверенность — оценка модели, а не откалиброванная вероятность. Нет подтверждённой метрики на скрытом наборе жюри или гарантии задержки. В Live-режиме времена Router/Resolution не равны времени до первого слышимого ответа; нули для отдельных STT/TTS-этапов не означают мгновенное распознавание и озвучку.
  • Аутентификация по лицу. Сопоставление изображения само по себе не подтверждает присутствие живого человека. Проверки OpenAI assist опциональны и выключены по умолчанию; также доступен вход по passkey.
  • Разные наборы данных. Демоидентификаторы DEMO-* и сценарии S* относятся к каталогу Butaq. Они не совпадают с SC* и записями Saqta. Используйте примеры и проверки именно активного каталога; новый набор действий требует совместимых action adapters.

Развёрнутая версия

В конфигурации Caddy и документации развёртывания телефонии указан домен owlpeer.com:

Адреса подтверждаются конфигурацией репозитория. Текущая доступность сервера, состав загруженного каталога и работоспособность платных AI-вызовов при подготовке этого README не проверялись. Для воспроизводимой демонстрации используйте локальный запуск и сценарий проверки выше.

Звёзды
⭐ 0
Форки
0
Язык
Python
Последний push
в прошлом месяце
Коммиты
44
Авторы
5
Файлы
255
Ветки
8

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

a1masssss 19elitekbtu 10Beknur 9Beknur 4Satbaldiyev Turarbek 2

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

  • 2026-09-23 17:53adddda1masssss
  • 2026-09-23 17:52Merge origin/main and reconcile README documentationa1masssss
  • 2026-09-23 17:50adddda1masssss
  • 2026-09-23 17:49feat: add observations and enhance README with project details and featuresBeknur
  • 2026-09-23 17:48commitelitekbtu
  • 2026-09-23 17:48feat: enhance workflow management and validation in multi-agent systemelitekbtu
  • 2026-09-23 17:45Merge pull request #10 from BAITC-Hacks/fix-frointtttttttttAlmas Issakov
  • 2026-09-23 17:44bigy fix02a1masssss
Все коммиты (44)
  • 2026-09-23 17:33bigy fixa1masssss
  • 2026-09-23 17:30Merge pull request #9 from BAITC-Hacks/frontAlmas Issakov
  • 2026-09-23 17:30add numbera1masssss
  • 2026-09-23 17:26feat: Add Twilio compatibility webhooks and improve SignalWire integrationBeknur
  • 2026-09-23 17:21Merge pull request #8 from BAITC-Hacks/frontAlmas Issakov
  • 2026-09-23 17:20addd front telefoniiiiiishshsa1masssss
  • 2026-09-23 17:09Merge pull request #7 from BAITC-Hacks/liveBeknur
  • 2026-09-23 17:08feat: Enhance live conversation handling with typed message verification and reading aloudBeknur
  • 2026-09-23 16:58Merge pull request #6 from BAITC-Hacks/frontAlmas Issakov
  • 2026-09-23 16:56fixa1masssss
  • 2026-09-23 16:52feat: Implement native GPT-Live voice sessions with enhanced context handlingBeknur
  • 2026-09-23 16:33readmeelitekbtu
  • 2026-09-23 16:29Merge pull request #5 from BAITC-Hacks/frontSatbaldiyev Turarbek
  • 2026-09-23 16:28fix fo4nta1masssss
  • 2026-09-23 16:17Merge branch 'main' of https://github.com/BAITC-Hacks/hack-fb68e683-butaq2-0elitekbtu
  • 2026-09-23 16:16prompt updelitekbtu
  • 2026-09-23 16:13Merge origin/main: combine streaming updates with telephony integrationa1masssss
  • 2026-09-23 16:12add telephonhyyyyyyyyyyya1masssss
  • 2026-09-23 16:00Merge pull request #4 from BAITC-Hacks/droBeknur
  • 2026-09-23 16:00Implement real-time transcription service with audio streaming and event handlingBeknur
  • 2026-09-23 15:39feat: migrate from gpt-6-luna to gpt-5.6-terra across configuration and evaluation filesBeknur
  • 2026-09-23 15:32feat: update model to gpt-6-luna and enhance demo record handlingBeknur
  • 2026-09-23 15:14fixelitekbtu
  • 2026-09-23 15:09add scenario dataa1masssss
  • 2026-09-23 15:02feat: normalize topic transitions and enhance validation in orchestratorBeknur
  • 2026-09-23 15:00Merge pull request #3 from BAITC-Hacks/newBeknur
  • 2026-09-23 14:51feat: add demo record lookup and scenario knowledge toolsBeknur
  • 2026-09-23 14:28add scenaarioa1masssss
  • 2026-09-23 14:00front x backa1masssss
  • 2026-09-23 13:58feat: Add Makefile for project management and update README for usage instructionselitekbtu
  • 2026-09-23 13:42Merge pull request #2 from BAITC-Hacks/feat/v2vSatbaldiyev Turarbek
  • 2026-09-23 13:42backelitekbtu
  • 2026-09-23 13:27add fronta1masssss
  • 2026-09-23 13:21Merge pull request #1 from BAITC-Hacks/feat/v2vBeknur
  • 2026-09-23 13:20feat: Add RouterDatabase and RouterService for scenario management and routingelitekbtu
  • 2026-09-23 13:14feat: Implement v2v voice-to-voice library with pipeline and realtime capabilitieselitekbtu
Структура репозитория (255 файлов)
.claude/homunculus/observations.jsonl
.dockerignore
.env.example
.gitignore
MULTI-AGENT.md
Makefile
PLAN.md
README.md
TZ.md
VOICE_ROUTER_PLAN.md
alembic.ini
app/__init__.py
app/api/__init__.py
app/api/admin_auth.py
app/api/dependencies.py
app/api/live.py
app/api/routes.py
app/api/streaming.py
app/data/README.md
app/data/demo/README.md
app/data/demo/dev_utterances.json
app/data/demo/dialogs_sample.json
app/data/demo/evaluate.py
app/data/demo/knowledge_base.json
app/data/demo/mock_backend.json
app/data/demo/scenarios.json
app/data/prod/auto/README.md
app/data/prod/auto/dev_utterances.json
app/data/prod/auto/dialogs_sample.json
app/data/prod/auto/evaluate.py
app/data/prod/auto/knowledge_base.json
app/data/prod/auto/mock_backend.json
app/data/prod/auto/scenarios.json
app/data/prod/health/README.md
app/data/prod/health/dev_utterances.json
app/data/prod/health/dialogs_sample.json
app/data/prod/health/evaluate.py
app/data/prod/health/knowledge_base.json
app/data/prod/health/mock_backend.json
app/data/prod/health/scenarios.json
app/data/prod/travel/README.md
app/data/prod/travel/dev_utterances.json
app/data/prod/travel/dialogs_sample.json
app/data/prod/travel/evaluate.py
app/data/prod/travel/knowledge_base.json
app/data/prod/travel/mock_backend.json
app/data/prod/travel/scenarios.json
app/db/__init__.py
app/db/migrations/env.py
app/db/migrations/script.py.mako
app/db/migrations/versions/0001_router_config.py
app/db/migrations/versions/0002_admin_passkeys.py
app/db/models.py
app/db/repository.py
app/demo_catalog.py
app/main.py
app/phone/__init__.py
app/phone/api.py
app/phone/carrier.py
app/phone/runtime.py
app/phone/service.py
app/phone/settings.py
app/services/__init__.py
app/services/voice_router.py
case_2/voice_router_dataset/README.kz.md
case_2/voice_router_dataset/README.md
case_2/voice_router_dataset/README.ru.md
case_2/voice_router_dataset/actions.json
case_2/voice_router_dataset/dev_utterances.json
case_2/voice_router_dataset/dialogs_sample.json
case_2/voice_router_dataset/evaluate.py
case_2/voice_router_dataset/evaluate_live.py
case_2/voice_router_dataset/knowledge_base.json
case_2/voice_router_dataset/mock_backend.json
case_2/voice_router_dataset/scenarios.json
case_2/voice_router_dataset/slots.json
docker-compose.yml
dockerfiles/backend.Dockerfile
docs/demo-runbook.md
docs/telephony.md
docs/tz-compliance.md
faceid/__init__.py
faceid/backends.py
faceid/client.py
faceid/config.py
faceid/images.py
faceid/matching.py
faceid/quality.py
faceid/router.py
faceid/schemas.py
faceid/service.py
faceid/sql.py
faceid/store.py
frontend/.21st/DESIGN.md
frontend/.21st/design.json
frontend/.dockerignore
frontend/.gitignore
frontend/AGENTS.md
frontend/ATTRIBUTION.md
frontend/CLAUDE.md
frontend/Caddyfile
frontend/Dockerfile
frontend/README.md
frontend/app/admin/admin.css
frontend/app/admin/import/page.tsx
frontend/app/admin/layout.tsx
frontend/app/admin/page.tsx
frontend/app/admin/scenarios/page.tsx
frontend/app/admin/settings/page.tsx
frontend/app/globals.css
frontend/app/layout.tsx
frontend/app/page.tsx
frontend/app/telephony/page.tsx
frontend/app/voice/page.tsx
frontend/components.json
frontend/components/admin/admin-workspace.tsx
frontend/components/admin/face-capture.tsx
frontend/components/admin/login-background.tsx
frontend/components/templates/velorah/cta.tsx
frontend/components/templates/velorah/feature.tsx
frontend/components/templates/velorah/fonts.ts
frontend/components/templates/velorah/footer.tsx
frontend/components/templates/velorah/hero.tsx
frontend/components/templates/velorah/hls-video.tsx
frontend/components/templates/velorah/navbar.tsx
frontend/components/templates/velorah/primitives.tsx
frontend/components/templates/velorah/statement.tsx
frontend/components/templates/velorah/styles.tsx
frontend/components/templates/velorah/tagline.tsx
frontend/components/templates/velorah/velorah.tsx
frontend/components/ui/button.tsx
frontend/components/ui/demo.tsx
frontend/components/ui/video-background.tsx
frontend/components/ui/voice-powered-orb.tsx
frontend/components/voice/voice-session.tsx
frontend/components/voice/voice-workspace.tsx
frontend/hooks/use-voice-session.ts
frontend/lib/admin-api.ts
frontend/lib/utils.ts
frontend/lib/voice-api.ts
frontend/lib/voice-audio.ts
frontend/lib/voice-live.ts
frontend/lib/voice-stream.ts
frontend/licenses/hirael-asme-MIT.txt
frontend/licenses/hirael-mindloop-MIT.txt
frontend/next-env.d.ts
frontend/next.config.mjs
frontend/package-lock.json
frontend/package.json
frontend/playwright.config.ts
frontend/postcss.config.mjs
frontend/public/media/admin-login-asme.jpg
frontend/public/media/admin-login-asme.mp4
frontend/public/media/telephony-asme.jpg
frontend/public/media/telephony-asme.mp4
frontend/public/media/voice-mindloop.jpg
frontend/public/media/voice-mindloop.mp4
frontend/public/voice-capture.worklet.js
frontend/tests/e2e/tz-flow.spec.ts
frontend/tests/voice-live.test.mjs
frontend/tests/voice-stream.test.mjs
frontend/tsconfig.json
image.png
multi-agent/README.md
multi-agent/SPRINTS.md
multi-agent/evals/browser-streaming-smoke.json
multi-agent/evals/language-fixed-terra-replay.jsonl
multi-agent/evals/live-api-smoke.jsonl
multi-agent/evals/live-native-smoke.json
multi-agent/evals/live-streaming-smoke.jsonl
multi-agent/evals/live-transcription-smoke.jsonl
multi-agent/evals/luna-low-development-replay.jsonl
multi-agent/evals/terra-live-api-smoke.jsonl
multi-agent/evals/terra-low-development-replay.jsonl
multi-agent/src/multi_agent/__init__.py
multi-agent/src/multi_agent/context.py
multi-agent/src/multi_agent/contracts.py
multi-agent/src/multi_agent/identifiers.py
multi-agent/src/multi_agent/live.py
multi-agent/src/multi_agent/orchestrator.py
multi-agent/src/multi_agent/prompts.py
multi-agent/src/multi_agent/sdk.py
multi-agent/src/multi_agent/simulation.py
multi-agent/src/multi_agent/streaming.py
multi-agent/src/multi_agent/tools.py
multi-agent/src/multi_agent/transcription.py
multi-agent/src/multi_agent/workflow.py
multi-agent/tests/test_live.py
multi-agent/tests/test_live_api.py
multi-agent/tests/test_orchestrator.py
multi-agent/tests/test_sdk.py
multi-agent/tests/test_streaming.py
multi-agent/tests/test_streaming_api.py
multi-agent/tests/test_tools.py
multi-agent/tests/test_transcription.py
multi-agent/tests/test_voice_context.py
multi-agent/tests/test_workflow.py
pyproject.toml
telephony/.dockerignore
telephony/.env.example
telephony/.gitignore
telephony/Dockerfile
telephony/README.md
telephony/docker-compose.yml
telephony/example_app.py
telephony/pyproject.toml
telephony/requirements-dev.txt
telephony/requirements.txt
telephony/telephony/__init__.py
telephony/telephony/agents.py
telephony/telephony/application.py
telephony/telephony/config.py
telephony/telephony/delegation.py
telephony/telephony/domain.py
telephony/telephony/langchain.py
telephony/telephony/langgraph.py
telephony/telephony/memory.py
telephony/telephony/openai_live.py
telephony/telephony/ports.py
telephony/telephony/responses.py
telephony/telephony/router.py
telephony/telephony/runner.py
telephony/telephony/runtime.py
telephony/telephony/schemas.py
telephony/telephony/session_graph.py
telephony/telephony/tools.py
telephony/telephony/twilio.py
telephony/tests/__init__.py
telephony/tests/conftest.py
telephony/tests/test_api.py
telephony/tests/test_delegation.py
telephony/tests/test_finalization.py
telephony/tests/test_openai_live.py
telephony/tests/test_openai_telephony.py
telephony/tests/test_runtimes.py
telephony/tests/test_session_graph.py
telephony/tests/test_units.py
tests/__init__.py
tests/test_admin_auth.py
tests/test_app.py
tests/test_database.py
tests/test_dataset_packs.py
tests/test_demo_catalog.py
tests/test_native_runtime.py
tests/test_phone.py
tests/test_router.py
v2v/__init__.py
v2v/audio.py
v2v/client.py
v2v/config.py
v2v/pipeline.py
v2v/realtime.py
v2v/router.py
v2v/schemas.py
v2v/sessions.py
Ветки (8)

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

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

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