IVA ДОКУМЕНТАЦИЯ ОБНОВЛЕНИЯ

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

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

LAUNCH_SERVICES

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

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

Сервис rabbitmq

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

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

Сервис database

Сервис database выполняет функции СУБД и является критически важным для работы сервисов terra_api, terra_offline_worker и 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, после чего файл был успешно удален

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

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

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

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

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

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

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

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

Сервис terra_offline_worker

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

  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

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

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

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

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

    2025-09-10 18:27:36,275 - root - INFO - Service started. OnlineAdapter created
    2025-09-10 18:27:36,275 - root - INFO - VERSION='v5.0', self.id=0, self.device='cuda', self.device_id='cuda:0', self.compute_type='float16', self.lang='ru', self.batch_size=8, self.model_path='/rapi/models/tv2fast'
    2025-09-10 18:27:36,275 - root - INFO - ['ENV CPUONLY=False', 'ENV CPU_THREADS=8', 'ENV OFFLINE_LANG_TO_TRANSLATE=ru', 'ENV COMPUTE_TYPE=float16', 'ENV LOGGING_LEVEL=INFO', 'ENV LOG_MAXFILESIZE=10000000', 'ENV LOG_FILECOUNT=10', 'ENV BATCH=8', 'ENV CUDA_ID=0', 'ENV PROMPT=', 'ENV VAD_ON=0.4', 'ENV VAD_OFF=0.25', 'ENV LOG_WORKER_NAME=FIRST', 'ENV USE_FAST_MODEL=True', 'ENV SHOW_NATIVE_TEXT=True']
    2025-09-10 18:27:36,276 - pika.adapters.utils.connection_workflow - INFO - Pika version 1.3.2 connecting to ('172.26.0.3', 5672)
    2025-09-10 18:27:36,276 - pika.adapters.utils.io_services_utils - INFO - Socket connected: <socket.socket fd=37, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=6, laddr=('172.26.0.8', 49320), raddr=('172.26.0.3', 5672)>
    2025-09-10 18:27:36,277 - pika.adapters.utils.connection_workflow - INFO - Streaming transport linked up: (<pika.adapters.utils.io_services_utils._AsyncPlaintextTransport object at 0x7f78a42a4c40>, _StreamingProtocolShim: <SelectConnection PROTOCOL transport=<pika.adapters.utils.io_services_utils._AsyncPlaintextTransport object at 0x7f78a42a4c40> params=<ConnectionParameters host=rabbitmq port=5672 virtual_host=/ ss
  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Процесс COLLECT_SOUND)

  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Процесс COLLECT_SOUND). Такой запрос считается пустым, так как не запрошена ни онлайн-обработка, ни сохранение аудио для последующей обработки. Для каждого из поддерживаемых кодов языка будет выполнено удаление файла-статуса 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:

  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

      да

      код требуемого языка текста стенограммы

      disable_adp

      boolean

      нет

      false

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

      name

      string

      нет

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

      token

      string

      да

      ivcs

      ключ доступа

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

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

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

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

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

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

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

    • проверка наличия значения 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Процесс SOUND_PROCESSING)

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

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

      • для конференции conference_id в БД устанавливается status=1 и обновляется значение для полей description_ru и description_en значением из 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Процесс SOUND_PROCESSING)

      • в файле метрик 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. при извлечении из очереди сообщение автоматически помечается как обработанное

  2. если обработка завершится неудачно, сообщение не будет повторно извлекаться этим или другим worker-обработчиком

  3. после успешной / неудачной обработки текущего сообщения обработчик последовательно извлекает и обрабатывает следующие сообщения из очереди

  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. преобразование звука в текст:

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

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

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

    • если в настройках включено Распознавание голосов и в имени спикера обнаружен Признак мультиголоса (по умолчанию multivoice), выполняется:

      • аудиофрагменты группируются по голосам

      • в стенограмме исходное имя спикера размножается с добавлением идентификаторов голоса voice_N (например, Иванов Иван Иванович(voice_0))

    • если в настройках включено Назначение имён, то в зависимости от доступности и результата работы сервиса идентификации diar_identification модуля ADP возможны следующие сценарии:

      • в случае успешной идентификации технические идентификаторы voice_N заменяются на реальные имена участников (например: Иванов Иван(voice_0)Иванов Иван, Иванов Иван(voice_1)Петров Петр)

      • в случаях невозможности определения имени сервисом идентификации diar_identification или недоступности сервисов ADP (отключена опция Доступность ADP сервисов в настройках Обработчика стенограмм, недоступен сетевой хост, ошибка запроса к сервисам ADP, превышен тайм-аут или используется версия модуля ADP ниже 4.0) имя голосу не назначается, а в стенограмме сохраняется идентификатор voice_N, например Иванов Иван(voice_1), Иванов Иван(voice_3)

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

    • в файле-статуса сохраняется временный статус 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 сохраняется время перехода в статус обработана

  9. если во время обработки возникает исключение (например, 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Процесс TEXT_TRANSLATING)

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

Сервис terra_translator_worker

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

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

    Если символы ни одного из алфавитов не обнаружены, устанавливается 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

    код требуемого языка текста стенограммы

    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Процесс ADP_PROCESSING)

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

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

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

    • если в файл-статусе отсутствует статус 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"}
  1. обработка стенограммы:

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

    где:

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

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

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

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

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

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

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

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

VIEW_PROCESSING_RESULTS

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