wss://api.erlcrussia.com/v1/realtime?model=emmy-voice-1. Параметр model можна не передавати.
Авторизація, як в OpenAI:
- на сервері — заголовок
Authorization: Bearer sk-voice-…; - у браузері — підпротоколи WebSocket
realtimeіopenai-insecure-api-key.sk-voice-….
instructions або tools), ігноруються.
Сесія
Після підключення сервер надсилаєsession.created. Налаштування змінюються подією session.update:
ru, en, uk, be, es, it, fr, zh, ja, ko. Голоси: F1, F2. Звук на вході й на виході — PCM16, моно, 24 кГц.
Хід визначається вручну: turn_detection має бути null, кінець репліки позначає подія input_audio_buffer.commit. Автоматичне визначення мовлення (server_vad) не підтримується.
Текстовий запит
id елемента необов’язковий. Роль може бути user або system.
Голосовий запит
commit сервер надсилає input_audio_buffer.committed і conversation.item.added. Коли мовлення розпізнано, надходять conversation.item.input_audio_transcription.completed з текстом і conversation.item.done. Якщо розпізнати не вдалося — conversation.item.input_audio_transcription.failed. response.create можна надіслати одразу після commit: відповідь почнеться, коли розпізнавання завершиться.
input_audio_buffer.clear очищує буфер. Голос можна передати й одним елементом із частиною input_audio у conversation.item.create.
Відповідь
Сервер надсилаєresponse.created, потім response.output_audio_transcript.delta (текст) і response.output_audio.delta (PCM у base64), і наприкінці response.done з витратами в usage.
- Розпізнавання голосу оплачується за тією самою ціною, що й розпізнавання мовлення.
event_idнеобов’язковий (до 128 символів). Якщо його передано, повтор події з тим самимevent_idігнорується.- Одночасно можлива одна відповідь. Текст запиту — від 1 до 12 000 символів, голос — від 100 мс до 120 секунд.
- Після 100 обмінів або 4096 подій відкрийте нове з’єднання.