Отдельных эндпоинтов нет — опции передаются в обычный запрос транскрипции. Анализ
выполняют собственные модели Palatine. Без опций запрос и ответ не меняются.
Где доступны
На
/transcribe/do_transcribe прочие параметры (model, diarization_model,
num_speakers, …) по-прежнему передаются только в query — полями формы
принимаются лишь roles, emotions и profanity_filter. На /audio/transcriptions
все параметры, как и раньше, — поля формы.Параметры
roles — роли говорящих
Ограничения: не больше 10 ролей; имя роли — непустое, до 64 символов, имена не
должны повторяться (без учёта регистра); описание — до 500 символов. Переводы строк,
табуляция и другие управляющие символы в именах и описаниях не допускаются. Нарушение
любого ограничения —
422.
Если говорящего не удаётся уверенно отнести ни к одной роли из списка, его роль — null.
emotions — эмоции реплик
Логическое значение: true / false (также 1/0, yes/no, on/off).
Каждой реплике назначается одна из эмоций: neutral, positive, sad, angry.
Эмоции определяются только для русской речи. Для записей на другом языке поле
emotion будет null, а опция не тарифицируется. Очень короткие реплики (около секунды
речи) по возможности объединяются с соседними репликами того же говорящего; если
объединить не с чем — emotion: null.profanity_filter — фильтр мата
Значения не зависят от регистра; любое другое значение —
422.
- Эвфемизмы и смягчённые формы («блин», «хрен» и т. п.) не маскируются ни на одном уровне.
- В слове сохраняются первая и последняя буквы, вся середина заменяется на
*(слово из шести букв превратится вХ****Х, гдеХ— исходные первая и последняя буквы). Схема маски одна для обоих уровней — уровень определяет только, какие слова маскируются. Маска необратима — исходный текст не сохраняется. - Маскируется весь текст результата:
text,segments[].text,words[].word, а у обычной транскрипции (без диаризации) — иsegments[].words; полеsegments[].tokensочищается. Маска сохраняется и в выгрузках (/download_as_file, форматыsrt/vttи др.). - Фильтр работает и без диаризации — с обычной транскрипцией.
Пример запроса
- cURL (async)
- Python (async)
- cURL (OpenAI-совместимый)
- cURL (файл по ссылке)
GET /api/v1/transcribe/task_status/{task_id}
(см. Polling API).
На синхронном
/audio/transcriptions опции roles и emotions увеличивают время
ответа. Для длинных записей используйте асинхронный /transcribe/do_transcribe.Формат ответа
В примере нижеХ*** — условное обозначение замаскированного слова (уровень soft).
Поля опций появляются в ответе, только если опция запрошена (тогда поле есть
всегда, при неудаче — со значением null). Поле speaker в сегментах ролью не заменяется.
Без диаризации (
profanity_filter на обычной транскрипции) ответ имеет прежний
формат: текст маскируется, в included_processing появляется profanity_filter;
флагов profanity у сегментов и сводки speakers нет.Коды в warnings
Сбой ролей или эмоций не валит задачу: транскрипция возвращается, соответствующие поля
равны null, в warnings — причина.
Тарификация
Каждая опция тарифицируется отдельно и поминутно — дополнительно к транскрипции и диаризации:- Сумма по каждой опции округляется вверх до копейки, минимум — 0,01 ₽ за опцию. Например, 15 с записи: фильтр мата — 0,01 ₽, роли — 0,02 ₽; 61 с записи: роли — 0,05 ₽.
- Списывается только выполнившаяся опция (та, что есть в
included_processing). Если роли или эмоции не определились (см.warnings), за них ничего не списывается. - Перед запуском обработки проверяется, что баланса хватает на всё запрошенное, включая опции.
Ошибки
Проверки выполняются по порядку, до создания задачи и без списаний:
- Значения опций (и
roles/emotionsна/do_transcribe_by_url) — иначе422. - Подключена ли опция для аккаунта — иначе
403 feature_disabled. - Для
roles/emotionsуказанdiarization_model— иначе422.
roles/emotions без диаризации вернёт 403, а не 422.
false у опции (emotions=false, profanity_filter=false) равносильно её
отсутствию и ошибок не вызывает.