{
  "engine": "Fish Audio",
  "model": "s2.1-pro-free",
  "speed": 1.14,
  "referenceSha256": "9415f693598c54d004b6ac20d7a750527a8f5321281f74a843cadc86917a63c0",
  "referenceText": "В этом году вы собрались в столице Урала, Екатеринбурге, в городе, где встречаются Европа и Азия. А история живет буквально в каждом камне. На уральской земле веками рождались идеи, которые меняли нашу страну к лучшему.",
  "requests": [
    {
      "scene": "01",
      "block": 1,
      "text": "Вы говорите: «Покажи ближайшие аэропорты».",
      "file": "raw/01-01.mp3"
    },
    {
      "scene": "01",
      "block": 2,
      "text": "Веб эр ти си Комаров должен распознать реплику, выбрать сценарий и показать результат на карте.",
      "file": "raw/01-02.mp3"
    },
    {
      "scene": "02",
      "block": 1,
      "text": "Этот путь проходит через несколько сервисов.",
      "file": "raw/02-01.mp3"
    },
    {
      "scene": "02",
      "block": 2,
      "text": "Каждый отвечает за свою часть: соединение, распознавание, состояние разговора или выполнение",
      "file": "raw/02-02.mp3"
    },
    {
      "scene": "02",
      "block": 3,
      "text": "инструментов.",
      "file": "raw/02-03.mp3"
    },
    {
      "scene": "03",
      "block": 1,
      "text": "Браузер передаёт микрофон по Веб эр ти си.",
      "file": "raw/03-01.mp3"
    },
    {
      "scene": "03",
      "block": 2,
      "text": "Сервис Кор завершает соединение и превращает звук в короткие пакеты для распознавания.",
      "file": "raw/03-02.mp3"
    },
    {
      "scene": "04",
      "block": 1,
      "text": "В текущем формате кадр содержит двадцать миллисекунд звука.",
      "file": "raw/04-01.mp3"
    },
    {
      "scene": "04",
      "block": 2,
      "text": "Пакеты идут через брокер сообщений НАТС в соседний проект распознавания.",
      "file": "raw/04-02.mp3"
    },
    {
      "scene": "05",
      "block": 1,
      "text": "Там детектор речи отделяет голос от тишины.",
      "file": "raw/05-01.mp3"
    },
    {
      "scene": "05",
      "block": 2,
      "text": "Когда фраза закончена, сервис отправляет её внешнему распознавателю Линто и получает текст.",
      "file": "raw/05-02.mp3"
    },
    {
      "scene": "06",
      "block": 1,
      "text": "Теперь голосовой и текстовый запросы идут одним путём.",
      "file": "raw/06-01.mp3"
    },
    {
      "scene": "06",
      "block": 2,
      "text": "Кор передаёт Агенту текст и идентификаторы сессии и реплики.",
      "file": "raw/06-02.mp3"
    },
    {
      "scene": "07",
      "block": 1,
      "text": "Агент загружает состояние диалога из базы Постгрес.",
      "file": "raw/07-01.mp3"
    },
    {
      "scene": "07",
      "block": 2,
      "text": "Так следующий вопрос может продолжить предыдущий сценарий, а не начинать разговор заново.",
      "file": "raw/07-02.mp3"
    },
    {
      "scene": "08",
      "block": 1,
      "text": "Дальше работает сценарный движок.",
      "file": "raw/08-01.mp3"
    },
    {
      "scene": "08",
      "block": 2,
      "text": "Он решает, какой инструмент нужен, какие данные уже есть и что ещё спросить у пользователя.",
      "file": "raw/08-02.mp3"
    },
    {
      "scene": "09",
      "block": 1,
      "text": "Для нового запроса об аэропортах текущий сценарий обращается к языковой модели дважды: сначала выбирает",
      "file": "raw/09-01.mp3"
    },
    {
      "scene": "09",
      "block": 2,
      "text": "намерение, затем извлекает параметры поиска.",
      "file": "raw/09-02.mp3"
    },
    {
      "scene": "10",
      "block": 1,
      "text": "Сам поиск выполняет инструмент по каталогу аэропортов.",
      "file": "raw/10-01.mp3"
    },
    {
      "scene": "10",
      "block": 2,
      "text": "Модель не должна придумывать координаты.",
      "file": "raw/10-02.mp3"
    },
    {
      "scene": "10",
      "block": 3,
      "text": "Маршрут строится только при явном запросе пользователя.",
      "file": "raw/10-03.mp3"
    },
    {
      "scene": "11",
      "block": 1,
      "text": "Агент сохраняет результат и публикует команды интерфейсу.",
      "file": "raw/11-01.mp3"
    },
    {
      "scene": "11",
      "block": 2,
      "text": "Браузер получает событие и обновляет сообщение или карту.",
      "file": "raw/11-02.mp3"
    },
    {
      "scene": "11",
      "block": 3,
      "text": "Ответ по эйч ти ти пи — отдельная часть обмена.",
      "file": "raw/11-03.mp3"
    },
    {
      "scene": "12",
      "block": 1,
      "text": "Здесь есть важная граница.",
      "file": "raw/12-01.mp3"
    },
    {
      "scene": "12",
      "block": 2,
      "text": "Позиция, погода и рейсы в проверенном коде демонстрационные.",
      "file": "raw/12-02.mp3"
    },
    {
      "scene": "12",
      "block": 3,
      "text": "Нарисованный маршрут не является дорожным маршрутом или инструкцией для полёта.",
      "file": "raw/12-03.mp3"
    },
    {
      "scene": "13",
      "block": 1,
      "text": "Первое небольшое улучшение — начальная загрузка карты.",
      "file": "raw/13-01.mp3"
    },
    {
      "scene": "13",
      "block": 2,
      "text": "Сейчас два запроса идут последовательно.",
      "file": "raw/13-02.mp3"
    },
    {
      "scene": "13",
      "block": 3,
      "text": "Переиспользование соединения и параллельное выполнение уберут лишнее ожидание.",
      "file": "raw/13-03.mp3"
    },
    {
      "scene": "14",
      "block": 1,
      "text": "Более серьёзная проблема — перегрузка.",
      "file": "raw/14-01.mp3"
    },
    {
      "scene": "14",
      "block": 2,
      "text": "Семафор ограничивает активные вызовы, но ожидающие задачи уже созданы.",
      "file": "raw/14-02.mp3"
    },
    {
      "scene": "14",
      "block": 3,
      "text": "Нужен предел очереди до приёма новой работы.",
      "file": "raw/14-03.mp3"
    },
    {
      "scene": "15",
      "block": 1,
      "text": "Ещё важнее запись результата.",
      "file": "raw/15-01.mp3"
    },
    {
      "scene": "15",
      "block": 2,
      "text": "Состояние и история сохраняются раздельно.",
      "file": "raw/15-02.mp3"
    },
    {
      "scene": "15",
      "block": 3,
      "text": "При сбое повтор может снова вызвать сценарий.",
      "file": "raw/15-03.mp3"
    },
    {
      "scene": "15",
      "block": 4,
      "text": "Нужны общая транзакция и защита от повторного исполнения.",
      "file": "raw/15-04.mp3"
    },
    {
      "scene": "16",
      "block": 1,
      "text": "В репозитории три реализации сценарного движка.",
      "file": "raw/16-01.mp3"
    },
    {
      "scene": "16",
      "block": 2,
      "text": "Прежде чем удалять две, надо сравнить поведение и проверить их пользователей.",
      "file": "raw/16-02.mp3"
    },
    {
      "scene": "16",
      "block": 3,
      "text": "Переименование каталогов эту работу не заменяет.",
      "file": "raw/16-03.mp3"
    },
    {
      "scene": "17",
      "block": 1,
      "text": "Следующий вариант — объединить Агент и выбранный сценарный движок.",
      "file": "raw/17-01.mp3"
    },
    {
      "scene": "17",
      "block": 2,
      "text": "Исчезнет один сетевой переход, но пользу нужно измерить.",
      "file": "raw/17-02.mp3"
    },
    {
      "scene": "17",
      "block": 3,
      "text": "Медиасоединения и модели разумно оставить отдельно.",
      "file": "raw/17-03.mp3"
    },
    {
      "scene": "18",
      "block": 1,
      "text": "Начинать стоит с очередей и корректности повторов.",
      "file": "raw/18-01.mp3"
    },
    {
      "scene": "18",
      "block": 2,
      "text": "Затем считать вызовы модели, задержку ответа и ошибки.",
      "file": "raw/18-02.mp3"
    },
    {
      "scene": "18",
      "block": 3,
      "text": "Полное переписывание без этих измерений пока не обосновано.",
      "file": "raw/18-03.mp3"
    },
    {
      "scene": "19",
      "block": 1,
      "text": "Так короткая просьба превращается в цепочку проверяемых действий.",
      "file": "raw/19-01.mp3"
    },
    {
      "scene": "19",
      "block": 2,
      "text": "Этот разбор основан на снимке кода.",
      "file": "raw/19-02.mp3"
    },
    {
      "scene": "19",
      "block": 3,
      "text": "Он объясняет устройство проекта, но не подтверждает состояние работающего кластера.",
      "file": "raw/19-03.mp3"
    }
  ]
}
