Управление сервисами IVA Terra

IVA Terra включает в себя Основные процессы, каждый из которых выполняет специфические функции.

LAUNCH_SERVICES

Процесс LAUNCH_SERVICES производит инициализацию всех необходимых компонентов системы и структур данных. При этом происходит настройка окружения, включая подключение к базе данных и брокеру сообщений RabbitMQ. Данный процесс обеспечивает корректное функционирование всех остальных процессов в системе.

Процесс LAUNCH_SERVICES инициализирует следующие основные сервисы:

Сервис rabbitmq

Сервис rabbitmq выполняет функции брокера сообщений RabbitMQ, которые необходимы для работы сервисов terra_api и terra_offline_worker_0.

В каталоге ./RABBIT_DATA хранится содержимое каталога /var/lib/rabbitmq/, смонтированное из контейнера.В данном каталоге хранятся очереди и сообщения, что обеспечивает сохранность данных в случае остановки или перезапуска сервиса.

Сервис database

Сервис database выполняет функции СУБД и является критически важным для работы сервисов terra_api, terra_offline_worker_0 и terra_spectacular_back.

В каталоге ./POSTGRES_TERRA_CONTROL монтируется содержимое каталога /var/lib/postgresql/data из контейнера. В данном каталоге хранится структура базы данных, схемы таблиц и данные, заполняющие таблицы. Это обеспечивает целостность и доступность информации, необходимой для функционирования указанных сервисов.

Сервис terra_api

Работа сервиса terra_api инициализируется в следующей последовательности:

  1. запуск процесса Gunicorn на порту по умолчанию 9001 по протоколу HTTPS в режиме шести процессов-обработчиков

  2. каждый из шести процессов устанавливает соединения с брокером сообщений RabbitMQ. Процесс инициализации продолжается только после успешного создания соединения с RabbitMQ

  3. производится обнаружение и загрузка файла, содержащего шаблоны регулярных выражений для обработки содержимого стенограмм

  4. если после монтирования каталога из контейнера в файловую систему хоста отсутствует файл ./TERRA_DATA/cleaning_patterns.txt, то в эту директорию будет скопирован шаблон из содержимого контейнера

  5. если в разделе Прием HTTPS API запросов активирован режим онлайн-обработки (Субтитры доступны: on), то в БД будет создана таблица terra_online_speaker_state для хранения информации о звуковом контенте каждого спикера

  6. устанавливаются отдельные соединения с БД для регистрации времени получения каждого аудиофрагмента. В отладочных сообщениях это будет соответствовать содержимому:

    2024-10-31 16:17:02,314 - root - INFO - CREATED CommonDBConnector
    2024-10-31 16:17:02,315 - root - INFO - CREATED TerraDBConnector
    2024-10-31 16:17:02,326 - root - INFO - CREATED CommonDBConnector
    2024-10-31 16:17:02,326 - root - INFO - CREATED TerraDBConnector
  7. проверка необходимых прав на выполнение операций и доступа к каталогам и файлам:

    • проверка каталогов:

      • каталог /var/www/alldata/minutes должен существовать с правами доступа 0777, например:

        drwxr-xr-x 2 user user 4096 Aug 12 14:42 minutes
      • каталог /var/www/alldata/rawaudio должен существовать с правами доступа 0777, например:

        drwxr-xr-x 4 user user 4096 Aug 12 14:41 rawaudio

        Параметры прав доступа:

        drwxr-xr-x  <link_count> <file_owner> <group_owner> <dir_size> <date> <dir>

        где:

        • drwxr-xr-x — права доступа и тип файла:

          • d — указывает, что это директория (папка)

          • rwxr-xr-x — права доступа в формате [владелец-группа-остальные]:

            • Владелец: rwx (чтение, запись, выполнение)

            • Группа: r-x (чтение, выполнение)

            • Остальные: r-x (чтение, выполнение)

        • <link_count> — количество жестких ссылок на директорию

        • <file_owner> — имя владельца файла / директории

        • <group_owner> — имя группы-владельца

        • <dir_size> — размер метаданных директории в байтах

        • <date> — дата и время последнего изменения содержимого директории в формате MMM DD HH:MM

        • <dir> — имя директории (minutes, rawaudio и т. д.)

    • проверка записи файлов:

      • успешно выполнена запись содержимого в файл /var/www/alldata/TestBinaryFile.mp4, после чего файл был успешно удален

      • успешно выполнена запись содержимого в файл /var/log/terra/TestBinaryFile.mp4, после чего файл был успешно удален

    • создание и удаление каталогов:

      • каталог /var/www/alldata/rawaudio/AnyNonExistentName/ был успешно создан

      • успешно выполнена запись содержимого в файл /var/www/alldata/rawaudio/AnyNonExistentName/TestBinaryFile.mp4, после чего файл был успешно удален

      • каталог /var/www/alldata/rawaudio/AnyNonExistentName/ был успешно удален

      • успешно выполнена запись содержимого в файл /var/www/alldata/minutes/TestBinaryFile.mp4, после чего файл был успешно удален

        Если какая-либо из проверок не будет пройдена успешно, процесс приостановится на минуту. В это время Администратор может вмешаться, обнаружить в сообщениях причину остановки и устранить эту причину.

        Затем процесс заново выполнит все необходимые проверки доступности операций

        Пока все проверки не будут пройдены, процесс приема HTTPS-запросов на порту API (по умолчанию: 9001) не начнется

Сервис terra_offline_worker_0

В процессе работы terra_offline_worker_0:

  1. создается Python-процесс и устанавливается соединение с брокером сообщений RabbitMQ сервисом rabbitmq

  2. при успешном подключении происходит загрузка в видеопамять содержимого файлов нескольких моделей нейросетей

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

    2025-08-12 14:41:38,586 - root - INFO - Trying use /var/www/alldata/licenses/TERRA_2025_07_08_13_35_41.license
    VerifyWith:/var/www/alldata/terra_public_keys/TERRA_RSA_4096_2024_03_19_16_07_43.key.pub.pem
    DecryptWith:/var/www/alldata/owner_private_keys/TERRA_CLIENT_RSA_4096_2025_07_08_13_31_11.key.pem
    2025-08-12 14:41:38,697 - root - INFO - Найдена лицензия с верифицированной подписью
    Номер: TERRA-2025-07-08-13-35-41
    Владелец: Тест 3090 08.07.2025
    Подпись: Первый ключ выпуска Terra-лицензий ПАО "ИВА"
    Срок действия: от 2025-07-08 до 2025-12-29
    2025-08-12 14:41:38,697 - root - INFO - Mins compilation started. Conference ID: 8b439673-dccf-48a4-ac4a-fe7213725f85_1754998883859 Лицензия действует 138 дней
    2025-08-12 14:41:38,699 - root - INFO - STATISTICS: ALL(6)=data(4)+silence(2)
  4. процесс переходит в ожидание получения сообщений из очереди RabbitMQ, определяемой настройкой Очередь для запросов на обработку стенограмм

Сервис terra_online_worker_0

В процессе работы terra_online_worker_0:

  1. создается Python-процесс и устанавливается соединение с брокером сообщений RabbitMQ сервисом rabbitmq

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

  3. после успешной загрузки в отладочных сообщениях появляется информация следующего содержания:

    2024-10-31 16:17:00,082 - root - INFO - Service started. OnlineAdapter created
    2024-10-31 16:17:00,082 - root - INFO - VERSION='v2.0.0.0', CPUONLY=False, self.id=0, self.device='cuda', self.device_id='cuda:0', self.compute_type='float16', self.lang='ru', self.batch_size=8, CPU_THREADS=4, VAD_ON=0.4, VAD_OFF=0.25, self.model_path='/rapi/models/tv2fast'
  4. процесс переходит в ожидание получения сообщений из очереди RabbitMQ

Сервис terra_adp_client

В процессе работы terra_adp_client:

  1. сервис terra_adp_client запускает процесс Gunicorn в режиме одного процесса-обработчика для обработки запросов по HTTP

  2. при старте Gunicorn создается объект FastAPI, который связывает URI с функциями обработки запросов и ожидает поступления запросов в цикле событий (event-loop). Дополнительные потоки и объекты создаются только по мере поступления запросов на обработку

Сервис terra_translator_worker

В процессе работы terra_translator_worker:

  1. создается Python-процесс и устанавливается соединение с брокером сообщений RabbitMQ сервисом rabbitmq

  2. внутри процесса создаются два объекта TranslateAdapter, которые загружают в память файлы предобученных моделей — один для перевода с русского на английский (ruen), другой — с английского на русский (enru)

  3. процесс переходит в ожидание получения сообщений из очереди RabbitMQ

Сервис terra_spectacular_back

В процессе работы terra_spectacular_back:

  1. при запуске сервиса terra_spectacular_back создаются файлы миграций и применяются миграции к базе данных. Подключение к базе данных осуществляется через URL, указанный в настройке DATABASE_URL

  2. запускается Gunicorn на порту 9443 в режиме пяти процессов-обработчиков для выполнения Python-Django-приложения. Также запускается Nginx-сервер на порту 8443 в режиме пяти процессов-обработчиков для поддержки работы со статическим контентом и перенаправления запросов по URI /api/ к процессу Gunicorn. Все запросы принимаются по HTTPS

Сервис terra_spectacular_front

В процессе работы terra_spectacular_front:

  1. сервис terra_spectacular_front запускает Nginx-сервер на порту 8443 в режиме пяти процессов-обработчиков запросов. Корневой каталог исполнения установлен на /var/www/terra_cfg_srv, где находятся файлы статического контента — index.html, JS-файлы, CSS-файлы и каталоги со шрифтами и изображениями

  2. все запросы по URI /api/ перенаправляются к сервису terra_spectacular_service на порту 8443 для дальнейшей обработки. Запросы принимаются по HTTPS

COLLECT_SOUND

Процесс COLLECT_SOUND обеспечивает сбор, обработку и регистрацию аудиофрагментов для их дальнейшего использования сервисами IVA Terra.

Процесс COLLECT_SOUND реализуется сервисом terra_api:

Сервис terra_api

  1. получение запроса (метод API, URL-адрес для API-запросов, параметры и примеры запросов приведены в разделе API для транскрибации мероприятий в режиме онлайн и офлайн)

  2. создание каталога и файла метрик. При получении первого аудиофрагмента создается каталог для хранения данных конференции и файл metrics.json, в котором фиксируются метрики обработки

  3. проверка уникальности ключа доступа. Сервис terra_api проверяет наличие значения token в списке известных ключей доступа (в случае ошибки в процессе проверки см. Системные ошибки IVA Terra)

  4. регистрация аудиофрагмента в БД. Время получения аудиофрагмента регистрируется в таблице конференций:

    • если получен первый аудиофрагмент конференции, то заполняется поле begin. При регистрации первого аудиофрагмента значение token сохраняется в поле access_key

    • при получении последующих аудиофрагментов заполняется поле finished

  5. обновление файла метрик metrics.json. Параметры файла metrics.json:

    Параметр Назначение

    status_active

    временная метка регистрации аудиофрагмента (в форматах: float и string)

    client_name

    имя клиента, соответствующее ключу доступа

    client_status

    код статуса клиента ('a' — активен, 'i' — деактивирован)

    client_networks

    список подсетей, из которых клиенту разрешено подключение к API.
    Фильтрация по данному параметру в текущей версии не используется

    client_access_key

    ключ доступа клиента

    api_handler

    имя хоста и IP-адрес, соответствующие Docker-контейнеру, в котором выполняется прием аудиофрагментов

    conference_id

    идентификатор мероприятия (UUID сессии)

    conference_db_id

    внутренний идентификатор конференции, зарегистрированный в таблице конференций БД (целое число)

    license_info

    информация о лицензии: срок действия, владелец, статус верификации

    participants

    соответствие participant_id и participant_name спикеров

    rawaudio_path

    путь к каталогу хранения исходных аудиоданных

    process_duration

    длительность обработки конференции в секундах

    artifacts

    список артефактов: имена спикеров, файлы аудио и текста

    text_segments

    сегменты распознанного текста с временными метками

  6. проверка значений параметров online и offline:

    • если параметры online и offline имеют значение false, то возвращается ошибка со статус-кодом 400 (см. Системные ошибки IVA Terra). Такой запрос считается пустым, так как не запрошена ни онлайн-обработка, ни сохранение аудио для последующей обработки. Для каждого из поддерживаемых кодов языка будет выполнено удаление файла-статуса oфлайн-обработки (файл-статус используется в процессах SOUND_PROCESSING, ADP_PROCESSING)

    • если для параметра offline установлено значение offline=true / offline=<пустое значение>, то будет создан каталог для хранения аудиофрагментов конференции:

      • имя аудиофрагмента формируется из параметров participant_id и timestamp_float, например:
        cc26aa17-6cff-48f8-b895-58f742245894_20240206_10_49_42_634340.wav

      • если параметры participant_id и timestamp_float не указаны, то имя формируется из содержимого audiofile.filename

      • для каждого .wav-файла создается файл .wav.name.txt, содержащий значение параметра participant_name

    • если для параметра online установлено значение online=false / online=<пустое значение> или в разделе Прием HTTPS API запросов отключен режим online-обработки (Субтитры доступны: false), то клиенту возвращается ответ со статус-кодом 200 в формате JSON, содержащий пустой список

    • если для параметра online установлено значение true:

      • ожидается ответ от сервиса обработки субтитров в течение времени, определяемого настройкой Таймаут ожидания ответа от сервиса субтитров

      • в случае возникновения ошибки при обработке запроса, в том числе возникновение события таймаута, клиенту будет возвращено сообщение о произошедшей ошибке (см. Системные ошибки IVA Terra)

      • из содержимого фразы с помощью регулярных выражений удаляются текстовые сегменты, шаблоны которых указаны построчно в файле cleaning_patterns.txt. Путь к файлу задается в разделе Общие настройки параметром Путь к файлу шаблонов исключаемых фраз (по умолчанию /var/www/alldata/cleaning_patterns.txt)

  7. возврат результата. Если обработка прошла успешно, клиенту возвращается ответ со статус-кодом 200 в формате JSON с результатами обработки, включая извлеченный текст и другие параметры (параметры и примеры ответов приведены в разделе API для транскрибации мероприятий в режиме онлайн и офлайн)

SOUND_PROCESSING

Процесс SOUND_PROCESSING обеспечивает обработку звука и формирование стенограммы на основе данных, сформированных процессом COLLECT_SOUND. Данный процесс производит анализ аудиоданных с использованием нейросетевых моделей для транскрибации речи в текст.

Процесс SOUND_PROCESSING реализуется в следующих сервисах:

Сервис terra_api

  1. получение запроса:

    • метод API: GET

    • URL-адрес для API-запросов:

      https://<TERRA_IP>:<API_PORT>/minutes/

      где:

      <TERRA_IP> — IP-адрес или доменное имя сервера IVA Terra

      <API_PORT> — порт для доступа к API (по умолчанию 9001)

      Параметры запросов:

      Имя Тип Обязательность Значение по умолчанию Описание

      conference_id

      UUID

      да

      идентификатор мероприятия (UUID сессии)

      lang

      string

      да

      код требуемого языка текста стенограммы (ru, en)

      disable_adp

      boolean

      нет

      false

      параметр отключения постобработки стенограммы ADP-сервисами

      name

      string

      нет

      наименование места проведения конференции (будет использовано для обработки в ADP-сервисах и для удобства поиска в web-панели администрирования)

      token

      string

      да

      ivcs

      ключ доступа

      Пример запроса:

      https://<TERRA_IP>:<API_PORT>/minutes/{conference_id}?lang=&disable_adp=false&token=ivcs&name=

  2. проверка идентификатора конференции и ключа доступа:

    • если conference_id отсутствует в таблице конференций БД, то возвращается ответ со статус-кодом 404 (см. Системные ошибки IVA Terra)

    • если значения параметров token / conference_id пустые или значение token, переданное в запросе, не совпадает со значением token, сохраненным в БД (и файле metrics.json) при получении первого аудиофрагмента конференции, то возвращается ответ со статус-кодом 403 (см. Системные ошибки IVA Terra)

  3. валидация параметров:

    • если параметр conference_id не соответствует регулярному выражению ^[&=_a-zA-Zф0-9-]+$ или параметр lang не соответствует ^\w*$, то возвращается ответ со статус-кодом 400 (см. Системные ошибки IVA Terra)

    • проверка наличия значения lang в списке поддерживаемых языков. Если значение lang отсутствует в списке, то присваивается значение из настройки Код используемого языка

    • проверка наличия аудиофайлов и стенограммы. Если в каталоге конференции (./TERRA_DATA/rawaudio/conference_id) отсутствуют файлы .wav и итоговая стенограмма (./TERRA_DATA/minutes/minutes_{conference_id}_{lang}.xml), то при наличии файла-статуса (./TERRA_DATA/minutes/minutes_{conference_id}_{lang}.xml.status) будет выполнено его удаление, а клиенту будет возвращен ответ со статус-кодом 404 (см. Системные ошибки IVA Terra)

  4. обработка стенограммы. Файл-статус содержит список состояний процесса формирования стенограммы и соответствующие временные метки, фиксирующие моменты, когда каждое состояние было назначено:

    • если в файле-статусе отсутствует состояние running (т. е. процесс обработки данных не запускался), то выполняется набор операций:

      • для конференции conference_id в БД устанавливается status=1 и обновляется значение для поля description (значением из name, если значение name не пустое)

      • в файле метрик metrics.json сохраняются ключ status_finished со значениями для отслеживания статуса обработки аудиофрагмента или стенограммы конференции

      • в файле-статусе записывается состояние running и текущая временная метка

      • в брокере сообщений объявляется очередь с именем Очередь для запросов на обработку стенограмм с параметром durable=true (необработанные сообщения в очереди будут сохранены на жесткий диск)

      • в очередь Очередь для запросов на обработку стенограмм публикуется сообщение с body (conference_id, lang, disable_adp) и с properties.headers (conference_id)

      • клиенту возвращается ответ со статус-кодом 200 и сообщением в формате JSON о том, что задача поставлена в очередь (пример ответа приведен в разделе API для транскрибации мероприятий в режиме онлайн и офлайн)

    • если в файле-статусе состояние finish (т. е. офлайн-обработчик завершил преобразование аудиоконтента в текст):

      • проверяется наличие файла стенограммы и при его отсутствии производится удаление файла-статуса, а клиенту возвращается ответ со статус-кодом 404 (см. Системные ошибки IVA Terra)

      • в файле метрик metrics.json сохраняются ключ status_finished со значениями для отслеживания статуса обработки аудиофрагмента или стенограммы конференции

      • для конференции conference_id в БД производится обновление поля status=4 (контент стенограммы возвращен клиенту)

      • расшифровка и отправка клиенту содержимого стенограммы (./TERRA_DATA/minutes/minutes_{conference_id}_{lang}.xml)

    • если в файле-статусе состояние running (т. е. процесс обработки данных был начат, но еще не завершен), то клиенту возвращается ответ со статус-кодом 200 и сообщением в формате JSON о том, что процесс формирования протокола все еще продолжается (пример ответа приведен в разделе API для транскрибации мероприятий в режиме онлайн и офлайн)

Сервис terra_worker_service

Завершение обработки означает, что потребитель сообщения из очереди RabbitMQ подтвердил успешную обработку сообщения. В результате это сообщение будет удалено из очереди сообщений, а затем обработчик извлечет из очереди следующее сообщение, при его наличии
  1. из очереди Очередь для запросов на обработку стенограмм брокера сообщений считывается сообщение, содержащее параметры conference_id, lang и disable_adp. Если модели не загружены, то формируется отладочное сообщение 'Model Is Not Loaded!' и обработка прекращается

    В таблице конференций БД конференция не изменит свой статус, а останется в статусе в обработке (status=2)
  2. сравнение кода языка lang из сообщения с установленным в настройках Код используемого языка. Если отсутствует совпадение кодов языков, то формируется сообщение Requested ({requested_lang}) and Model ({model_lang}) are Different!

    Язык текста стенограммы формируется в зависимости от кода языка, установленного в настройках terra_worker_service. Однако, некоторые фразы в тексте могут быть на исходном языка спикера
  3. проверка статуса конференции. Если в файле-статусе состояние finish, то формируется сообщение Conference processing has finished status, и обработка прекращается

  4. для конференции conference_id в таблице конференций БД производится обновление поля status=2 (в обработке), а в файле метрик metrics.json в ключе status_progress сохраняется время перехода в статус в обработке

  5. выполняется обзор каталога с аудиофрагментами и формируется список аудиофрагментов с сортировкой по времени. Если список пустой, то формируется отладочное сообщение compile_minutes: Files For Requested Conference {conference_id} Are Absent!. В таком случае для конференции conference_id в таблице конференций БД производится обновление поля status=5 (в ошибке), и обработка прекращается

  6. если в настройках включен режим Объединять аудиофрагменты по спикеру в разделе Обработчик стенограмм, то аудиофайлы будут объединяться по спикеру (перед преобразованием звука в текст), иначе — в порядке временных меток их формирования

  7. преобразование звука в текст:

    • выполняется обработка звука, в результате которой формируются текстовые сегменты и временная разметка их начала и окончания

    • в файл стенограммы сохраняются:

      • список спикеров

      • текстовые сегменты, очищенные от фраз по шаблонам из файла, указанного в параметре Путь к файлу шаблонов исключаемых фраз (по умолчанию: /var/www/alldata/cleaning_patterns.txt) раздела Общие настройки

    • если в настройках обработчика включен режим Объединять аудиофрагменты по спикеру в разделе Обработчик стенограмм, то формируется отдельный аудиофайл, содержащий единый звуковой контент, упорядоченный по времени поступления аудиофрагментов

  8. очистка временных файлов:

    • выполняется рекурсивная очистка всех каталогов от устаревших файлов в соответствии с настройками хранения:

      • очистка каталогов, содержащих аудиофрагменты (./TERRA_DATA/rawaudio). Из каталогов удаляются файлы с расширениями .wav и .txt, время модификации которых превышает текущий момент времени на более чем установлено в параметре НастройкиОбработчик стенограммКоличество дней хранения звука (количество дней хранения файлов аудиоконтента)

      • очистка каталогов, содержащих стенограммы (./TERRA_DATA/minutes). Из каталогов удаляются файлы с расширениями .xml и .xml.status, время модификации которых превышает текущий момент времени на более чем установлено в параметре НастройкиОбработчик стенограммКоличество дней хранения звука (количество дней хранения файлов стенограмм)

    • все остальные файлы в этих каталогах остаются нетронутыми, включая файл metrics.json, который содержит результаты обработки

    • если после удаления устаревшего контента в каталогах не останется ни одного файла, сам каталог будет автоматически удален

  9. завершение обработки:

    • в файле-статуса сохраняется временный статус transcribed, чтобы отметить завершение обработки звука. При этом /minutes/{conference_id} еще не готов вернуть клиенту содержимое стенограммы, так как это произойдет только при наличии статуса finish в списке

    • если включен режим Доступность ADP сервисов в разделе Обработчик стенограмм и установлен параметр disable_adp=false в запросе на обработку, то в ADP-клиент будет отправлен запрос на дополнение текста стенограммы результатами обработки сервисов planner и summary

    • если отключен режим Доступность ADP сервисов в разделе Обработчик стенограмм и установлен параметр disable_adp=true в запросе на обработку, то:

      • содержимое файла-статуса немедленно изменяется: статус transcribed удаляется, а статус finish сохраняется с текущей временной меткой

      • для конференции conference_id в таблице конференций БД производится обновление поля status=3 (обработана), и обработка прекращается

      • в файле метрик metrics.json в ключе status_processed сохраняется время перехода в статус обработана

  10. если во время обработки возникает исключение (например, out of memory), конференции назначается статус в ошибке, формируется отладочное сообщение с критическим уровнем, а брокеру сообщений отправляется подтверждение о завершении обработки сообщения

VIEW_MESSAGES

Процесс VIEW_MESSAGES предоставляет Администраторам системы возможность просмотра отладочных сообщений, которые содержат информацию о статусах выполнения операций, возникших ошибках и других важных событиях в системе.

Процесс VIEW_MESSAGES реализуется сервисом terra_api.

TEXT_TRANSLATING

Процесс TEXT_TRANSLATING позволяет преобразовать текст стенограммы на другие языки с использованием интегрированных моделей перевода.

Процесс TEXT_TRANSLATING реализуется в сервисах terra_api и terra_translator_worker

Сервис terra_api

  1. получение запроса (URL-адрес для API-запросов, метод API, параметры, примеры и ответы запросов приведены в разделе API для перевода текста)

  2. проверка значений в настройках сервиса перевода и уникальности значения token (в случае ошибок в процессе проверки см. Системные ошибки IVA Terra)

  3. подготовка запроса к сервису перевода:

Сервис terra_translator_worker

  1. при получении запроса происходит валидация контента запроса (содержимого payload)

  2. для каждого элемента в payload выполняется обнаружение языка текста по содержимому ключа content, после чего производится заполнение значения в ключе from_lang:

    • если текст содержит символы русского алфавита, устанавливается from_lang="ru"

    • если текст содержит символы английского алфавита, устанавливается from_lang="en"

    • если ни один из алфавитов не обнаружен, устанавливается from_lang="unknown"

  3. после получения результата от нейросети переводчика клиенту возвращается ответ со списком исходных словарей с добавленным ключом status, который может принимать значения processed / not_processed

ADP_PROCESSING

После завершения транскрибации стенограммы данные передаются для дальнейшей обработки специализированным сервисам ADP.

Процесс ADP_PROCESSING является внутренним, запускается исключительно микросервисами IVA Terra и не предназначен для внешнего использования

Процесс ADP_PROCESSING реализуется в следующих сервисах:

Сервис terra_adp_client

  1. условия запуска процесса ADP_PROCESSING:

    • завершение преобразования звука в текст процессом SOUND_PROCESSING

    • файл стенограммы (.xml) успешно сохранен в файловой системе и в файле-статусе обработки стенограммы (.xml.status) сохранено текущее состояние transcribed

  2. получение GET-запроса от terra_worker_service_N

    URL-адрес для API-запросов:

    http://terra_adp_client:8080/extend_minutes

    Параметры запросов:

    Имя Тип Обязательность Значение по умолчанию Описание

    conference_id

    UUID

    да

    идентификатор мероприятия (UUID сессии)

    lang

    string

    да

    ru

    код требуемого языка текста стенограммы (ru, en)

    force

    boolean

    нет

    false

    параметр принудительной обработки стенограммы ADP-сервисами (даже если обработка стенограммы осуществлялась ранее)

  3. проверка файла стенограммы:

    • формируется путь к файлу стенограммы, которую требуется обработать ADP-сервисами:
      ./TERRA_DATA/minutes/minutes_{conference_id)_{lang}.xml

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

      • код статуса: 200

      • ответ в формате JSON:

        'PID=234567, TID=12 ACCEPTED 2024-10-01 12:34 FOR PROCESSING conference_id=776be3d2-c124-4504-a5af-3abe2e9bf6ad_1707202804977, lang=ru, force=true'
    • если файл стенограммы отсутствует, возвращается ошибка со статус-кодом 404 (см. Ошибка отсутствия файла стенограммы в разделе Системные ошибки IVA Terra)

  4. проверка файла-статуса:

    • если файл-статус отсутствует, возвращается ошибка со статус-кодом 404 (см. Системные ошибки IVA Terra)

    • если в файле-статусе статус finish и не установлен параметр принудительной обработки в force=false, то возвращается ошибка со статус-кодом 403 (см. Системные ошибки IVA Terra)

    • если в файл-статусе отсутствует статус finish или в запросе на обработку установлен параметр принудительной обработки в force=true, то процесс обработки стенограммы запускается в отдельном потоке, а клиенту возвращается ответ с сообщением о принятии задачи на обработку:

      • код статуса: 200

      • ответ в формате JSON:

        'PID=234567, TID=12 ACCEPTED 2024-10-01 12:34 FOR PROCESSING conference_id=776be3d2-c124-4504-a5af-3abe2e9bf6ad_1707202804977, lang=ru, force=true'
    • если в файле-статусе обработки стенограммы еще отсутствует статус finish, то от запроса https://<TERRA_IP>:<API_PORT>/minutes/{conference_id} возвращается ответ:

      • код статуса: 200

      • ответ в формате JSON:

        {"status": "running", "message_en": "Task of compiling of minutes is still under way", "message_ru": "Идет процесс формирования протокола", "timestamp" : 152648815645.444855, "timestamp_hr" : "2024-08-15 23:34:56"}
  5. обработка стенограммы:

    • содержимое файла стенограммы расшифровывается и XML-контент преобразуется в списки фраз спикеров

    • если в настройках Идентификатор сервиса Planner в итоговой стенограмме (PLANNER_PARTICIPANT_ID) / Идентификатор сервиса Summary в итоговой стенограмме (SUMMARY_PARTICIPANT_ID) в разделе Клиент ADP-сервиса указано пустое значение, то запросы в сервисы planner / summary не отправляются

    • если в настройках для Идентификатор сервиса Planner в итоговой стенограмме (PLANNER_PARTICIPANT_ID) и Идентификатор сервиса Summary в итоговой стенограмме (SUMMARY_PARTICIPANT_ID) в разделе Клиент ADP-сервиса указаны пустые значения ID, то обработка прекращается с отладочным сообщением EMPTY PLANNER AND SUMMARY PARTICIPANT_ID, IT WILL DISABLE ADP SERVICES!!!

    • списки фраз разбиваются на пакеты, которые по длительности не превышают значение, определяемое настройкой Длительность контента стенограммы в одной посылке к ADP (секунды) в разделе Клиент ADP-сервиса. Рекомендуемое значение для длительности пакета составляет 18000 секунд (5 часов).

      Максимальное и рекомендуемое значение настройки Длительность контента стенограммы в одной посылке к ADP (секунды) зависит от версии модуля ADP

  6. отправка данных в ADP-сервисы: каждая группа данных отправляется в ADP-сервисы через POST-запросы на указанный в настройке Адрес приема запросов адрес (http://<ADP_HOST>:<ADP_PORT>/api/v1/task), с использованием токена доступа Токен доступа к ADP сервису

    где:

    <ADP_HOST> — адрес хоста или доменное имя сервера, на котором развернут ADP-сервис

    <ADP_PORT> — порт для доступа к API ADP-сервиса (по умолчанию 9002)

  7. после отправки всех запросов процесс переходит в состояние ожидания ответов от ADP-сервисов:

    • длительность ожидания ответа от POST-запроса по адресу Адрес приема запросов определяется настройкой Таймаут отправки запроса в ADP (см. раздел Клиент ADP-сервиса)

    • в ответе от ADP-сервиса (planner, summary) содержится UUID-идентификатор запроса, с которым необходимо периодически отправлять запросы на адрес, определяемый настройкой ADP_ANSWER_URL (по умолчанию: http://<ADP_HOST>:<ADP_PORT>/api/v1/result/), для получения результатов обработки по мере их готовности

      где:

      <ADP_HOST> — адрес хоста или доменное имя сервера, на котором развернут ADP-сервис

      <ADP_PORT> — порт для доступа к API ADP-сервиса (по умолчанию 9002)

    • после отправки всех запросов поток обработки переходит в состояние ожидания ответов для каждого сервиса, пока не исчерпается список ожидаемых UUID или не истечет предельный срок ожидания, который вычисляется как Длительность между попытками получить ответ от ADP × Количество попыток получить ответ от ADP секунд. В этом состоянии поток приостанавливается на Длительность между попытками получить ответ от ADP секунд, после чего для каждого ожидаемого ответа отправляется запрос на адрес Адрес приема запросов для получения результата обработки

  8. результаты от сервиса planner (в XML-формате) и summary (в текстовом формате) объединяются и сохраняются в файле стенограммы:

    • содержимое результатов от сервиса planner объединяется в единый список и сохраняется в стенограмме в теге <minutes>, содержащем вложенный тег: <participant participant_id=PLANNER_PARTICIPANT_ID>

    • результаты от сервиса summary объединяются в единую строку и сохраняются в том же теге <minutes> с вложенным тегом: <participant participant_id=SUMMARY_PARTICIPANT_ID>

  9. проверка ошибок: если в процессе обработки стенограммы не произошло ошибок (получены хотя бы по одному ответу на запросы для каждого ADP-сервиса), содержимое файла стенограммы обновляется дополнительными тегами <minutes>, содержащими результаты обработки текста стенограммы ADP-сервисами.Эти данные шифруются и сохраняются в прежней локации

  10. статус завершения: в файл статуса стенограммы записывается статус finish вне зависимости от того, были ли внесены изменения в содержимое стенограммы или нет.Путь к файлу обработанной стенограммы удаляется из очереди на обработку

VIEW_PROCESSING_RESULTS

Процесс VIEW_PROCESSING_RESULTS производит обработку событий, связанных с файлами транскрибации (см. раздел Транскрибация мероприятий), обеспечивая доступ к сведениям о результатах транскрибации, их экспорт, а также позволяя воспроизводить аудиоконтент и выполнять другие действия с файлами.