API · WebSocket

API документація

Сервер на FastAPI приймає аудіо через WebSocket і повертає розпізнаний текст із перекладом у реальному часі.

Швидкий старт

Запусти бекенд із кореня проекту. Моделі завантажуються один раз при першому підключенні.

bash
# Запуск WebSocket-сервера (CPU, моделі вантажаться один раз)
python server.py

# Сервер слухає на:
#   HTTP:      http://localhost:8000
#   WebSocket: ws://localhost:8000/ws

HTTP-ендпоінти

GET/

Проста тестова HTML-сторінка з інформацією про сервер.

text/html
GET/health

Перевірка стану сервера та список підтримуваних мов.

{ "status": "ok", "languages": ["uk", "ru", "en", "de", "pl"] }
WS/ws

Двонаправлений стрим: конфігурація сесії та аудіо → текст.

JSON-повідомлення (див. нижче)
перевірка /health
curl http://localhost:8000/health
# {"status":"ok","languages":["uk","ru","en","de","pl"]}

WebSocket · /ws

Підключись до сервера, спочатку надішли config, дочекайся config_ok, потім стримь повідомлення audio.

WSws://localhost:8000/ws

Повідомлення клієнта

configклієнт → сервер

Налаштовує сесію: мову мовлення та мову перекладу. Надсилається першим.

type"config"Тип повідомлення
source_langstringКод мови мовлення (uk, ru, en, de, pl)
target_langstringКод мови перекладу
audioклієнт → сервер

Фрагмент аудіо float32 PCM, 16 kHz, моно. is_final=true запускає переклад і post-processing.

type"audio"Тип повідомлення
audionumber[]Семпли float32 (-1.0…1.0), 16 kHz
is_finalbooleantrue — кінець фрази (переклад + пунктуація)

Відповіді сервера

config_okсервер → клієнт

Підтвердження конфігурації. Після нього можна слати аудіо.

type"config_ok"Тип повідомлення
source_langstringПідтверджена мова мовлення
target_langstringПідтверджена мова перекладу
partialсервер → клієнт

Проміжний результат розпізнавання (без перекладу).

type"partial"Тип повідомлення
textstringРозпізнаний текст (може бути порожнім)
source_langstringМова мовлення
finalсервер → клієнт

Фінальний результат: перекладений текст + оригінал. Приходить на is_final=true.

type"final"Тип повідомлення
textstringПерекладений текст
originalstringОригінальний розпізнаний текст
source_langstringМова мовлення
target_langstringМова перекладу

Приклад клієнта (JS)

Мінімальний браузерний клієнт. Аудіо має бути float32 PCM, 16 kHz, моно — так само, як надсилає сторінка демо.

javascript
const ws = new WebSocket("ws://localhost:8000/ws");

ws.onopen = () => {
  // 1. Налаштовуємо сесію: uk → en
  ws.send(JSON.stringify({
    type: "config",
    source_lang: "uk",
    target_lang: "en",
  }));
};

ws.onmessage = (event) => {
  const msg = JSON.parse(event.data);

  if (msg.type === "config_ok") {
    // 2. Шлемо аудіо чанками (float32 PCM, 16 kHz, моно)
    ws.send(JSON.stringify({
      type: "audio",
      audio: [/* ... float семпли ... */],
      is_final: false,
    }));
  }

  if (msg.type === "partial") console.log("проміжний:", msg.text);
  if (msg.type === "final")   console.log("переклад:", msg.text);
};

Підтримувані мови

КодМова
uk🇺🇦 Українська
ru🇷🇺 Русский
en🇬🇧 English
de🇩🇪 Deutsch
pl🇵🇱 Polski
API — Multilingual STT