Speech-to-text
Which languages are available: GET https://gpu-asrhq.ollalink.com/v1/languages lists them, with what each supports (all hosts).
There are three speech-to-text lanes. Pick by accuracy, latency, and volume. All take your GPU API key.
| Lane | Service | Host | Auth | Languages | Use for |
|---|---|---|---|---|---|
| Hindi and other languages | Speech GPU | gpu-asrhq.ollalink.com |
X-NH-GPU-Key |
the 14 languages (auto-ID) + speech→English | Recordings in languages file transcription does not cover; speech→English |
| Fast file transcription | Speech GPU | gpu-transcribe.ollalink.com |
X-NH-GPU-Key |
en, es, fr, de, pt, ru, it, nl |
Long recordings and videos, subtitles (SRT / VTT), numbers as digits |
| Realtime | Speech GPU | gpu-asr.ollalink.com (WebSocket) |
X-NH-GPU-Key |
the 14 languages as locales (en-US, hi-IN, …) |
Live partial + final transcripts |
The 14 languages: English en, Hindi hi, Spanish es, French fr, Chinese (Mandarin) zh, German de, Arabic ar,
Brazilian Portuguese pt, Russian ru, Japanese ja, Korean ko, Italian it, Dutch nl and Vietnamese vi.
Accuracy and fast file options
Section titled “Accuracy and fast file options”On POST https://gpu-asrhq.ollalink.com/v1/audio/transcriptions, send multipart fields file, language=en|hi and:
model |
Use |
|---|---|
asr-accuracy |
Hindi uses the resident full-precision Hindi recognizer; other languages use the resident broad-language recognizer. Dashboard default. |
asr-fast |
Compatibility name: served by the general recognizer (no separate fast tier). |
asr-legacy |
Full broad-language recognizer on GPU; also used for speech-to-English and word timestamps. |
asr-hindi |
Explicit Hindi-only accuracy option; requires language=hi. |
For translated Hindi text, prefer asr-accuracy transcription followed by POST /v1/translate,
with source=hi, target=en. Keep the original transcript next to the translation and check important numbers.
The Hindi accuracy option and fast option accept up to 32 MB and 10 minutes. They transcribe only;
Hindi-only requests reject other languages, speech-to-English, word timestamps and initial prompts. Use asr-legacy
for speech-to-English or word timestamps. When model is omitted, explicit language=hi selects Hindi accuracy;
other languages and automatic language detection use the broad-language GPU recognizer. Word timestamps or
task=translate also select the broad-language recognizer.
Both accuracy recognizers stay loaded. JSON includes text, raw_text,
language, duration, segments, profile, recognizer (hindi, hindi-backup, chinese or general — which recognizer
answered) and warnings. Hindi accuracy segment times
are audio chunk boundaries, not word alignment. Number formatting defaults on and uses the same rules as
POST /v1/normalize with language=hi; send normalize_numbers=false to retain spoken numbers.
Hindi accuracy has a repetition/token-limit guard. A flagged recording returns 503 for review or retry rather than
silently switching recognizers. Formatting cannot repair a misheard number.
Hindi accuracy text has no punctuation, writes English words in Devanagari (“OSPF” → “ओ एस पी एफ”) and returns spoken numbers as
digits by default (“उन्नीस सौ तिरसठ” → 1963). While the Hindi accuracy recognizer restarts, a backup Hindi recognizer answers instead
(punctuated, English in Latin script); model in the response names which one answered. Empty/unreadable audio returns 400;
a full queue or unavailable worker returns 503.
curl https://gpu-asrhq.ollalink.com/v1/audio/transcriptions \ -H "X-NH-GPU-Key: $YOUR_GPU_KEY" \ -F file=@lesson.wav -F language=hi -F model=asr-accuracyHindi with English numbers and technical terms
Section titled “Hindi with English numbers and technical terms”For a Hindi recording use gpu-asrhq with language=hi; for live Hindi speech use the realtime lane
(hi-IN) or live captions (hi). The output is a Hindi transcript; captions are not translated.
For English text from Hindi speech in a recording, gpu-asrhq with task=translate returns English directly; to translate a
transcript into another language, use POST /v1/translate. More:
Hindi with English numbers and technical terms.
Hindi and other languages — gpu-asrhq (Speech GPU)
Section titled “Hindi and other languages — gpu-asrhq (Speech GPU)”POST https://gpu-asrhq.ollalink.com/v1/audio/transcriptions — batch transcription in the 9 supported
languages (auto-ID), with task=translate for speech → English.
curl https://gpu-asrhq.ollalink.com/v1/audio/transcriptions \ -H "X-NH-GPU-Key: $YOUR_GPU_KEY" -F "file=@./meeting.wav" -F "language=hi"# speech -> English: add -F "task=translate"Use this lane for Hindi with English numbers and technical terms, for the languages fast file transcription does not cover, or for English output from foreign-language audio. Full-model inference now runs on GPU; completion time depends on recording length and queueing.
This lane returns segments (and duration) by default — no
response_format needed — and its segments carry an id:
{"text":"…","language":"en","language_probability":1.0,"duration":3.62, "segments":[{"id":1,"start":0.0,"end":3.62,"text":"…"}]}Add -F "word_timestamps=true" for a words array inside each segment ({"start","end","word"}).
Hindi with English numbers and technical terms. Pin language=hi. The text comes back in Devanagari; English technical words are written in
Devanagari by the Hindi accuracy recognizer and in Latin script by the broad-language recognizer. No separate mixed-language profile is needed. Urdu is not offered; Hindi speech can be auto-detected as Urdu, so always
pin hi for Hindi recordings. Pin the language whenever you know it.
Networking terms. English transcripts come back with networking terms in their usual form — IP, TCP, OSI, DNS,
VLAN, MAC address, Cisco, Ethernet and similar. No vocabulary hint is applied by default, so prompt_applied is false.
You can still pass your own hint for a request with -F "initial_prompt=<your own hint>"; -F "no_prompt=true" is
accepted and has no effect by default.
Fast file transcription — gpu-transcribe (Speech GPU)
Section titled “Fast file transcription — gpu-transcribe (Speech GPU)”POST https://gpu-transcribe.ollalink.com/v1/audio/transcriptions — for recorded classes, meetings and videos in
English, Spanish, French, German, Portuguese, Russian, Italian or Dutch. Send any common audio or video file; long recordings are
processed in parallel, and you can ask for subtitles directly.
curl https://gpu-transcribe.ollalink.com/v1/audio/transcriptions \ -H "X-NH-GPU-Key: $YOUR_GPU_KEY" -F "file=@./class.mp3" -F "language=en" -F "response_format=srt" > class.srt| Field | Values | Notes |
|---|---|---|
file |
audio or video | up to 100 MB per request — a 70-minute class as a 64 kbps MP3 is about 34 MB |
language |
en (default), es, fr, de, pt, ru, it, nl |
any other language returns 400 unsupported_language |
response_format |
json (default), verbose_json, text, srt, vtt |
verbose_json adds text_raw, segments and words (start/end in seconds) |
normalize_numbers |
true (default), false |
English: spoken numbers become digits (“four hundred forty three” → 443, “zero zero seven three one” → 00731); text_raw keeps the words as spoken |
{"text":"Do not open port 443, use port 179. The timeout is 2.5 s.","language":"en","duration":6.24}The response header X-ASR-Audio-S gives the seconds of audio processed. A 20-second clip typically returns in about
3.5 s including the upload. If any part of a file cannot be transcribed you get 503 and can retry — never a transcript with
gaps. Two requests for the same long file can differ in a word or a punctuation mark.
Speech detection — POST /v1/audio/segments
Section titled “Speech detection — POST /v1/audio/segments”Where the speech is in a recording, without a transcript: multipart file (any common audio or video), optional
min_silence_ms (default 300: a quieter gap this long ends a segment), min_speech_ms (250: shorter bursts are dropped),
pad_ms (100: added around each segment) → {"duration", "speech_seconds", "count", "segments": [{"start", "end"}, …]} in
seconds. Usage is counted in seconds of audio (X-ASR-Audio-S). Use it to cut long recordings, skip silence or music, or
measure talk time. Same limits and errors as transcription above.
Realtime streaming — gpu-asr (Speech GPU)
Section titled “Realtime streaming — gpu-asr (Speech GPU)”wss://gpu-asr.ollalink.com/v1/audio/transcriptions/realtime — stream 16 kHz mono PCM in,
receive live partial text while the speaker talks and a final transcript at each pause and when you commit.
Locales: en-US, hi-IN, es-ES, fr-FR, de-DE, pt-BR, ru-RU, ar-AR, zh-CN, ja-JP, ko-KR, it-IT,
nl-NL, vi-VN — pass the full locale, not a bare en. Turkish (tr-TR) is not offered. This is the lane for live interview / transcription.
{"type":"session.update","session":{"sample_rate":16000,"language":"en-US","automatic_punctuation":true,"word_timestamps":false}}Wait for session.updated, then stream 16 kHz mono s16le PCM as binary frames. You receive
conversation.item.input_audio_transcription.delta (partial text) and
conversation.item.input_audio_transcription.completed (a final). Send {"type":"input_audio_buffer.commit"} to
finalize the current utterance at once. session.update also takes endpointing_ms.
- Final text: for
zh,fr,nl,ja,ko,aranditthe final is checked by a second accuracy pass, so it can differ from the last partial; for the other locales it is the realtime recogniser’s own final. English, Hindi, German, Spanish, French, Portuguese and Russian finals have spoken numbers written as digits (“four forty three” → 443, “two point five” → 2.5, addresses dot by dot); in other locales numbers may remain spoken words. Handle errors, disconnects and your own application deadline. - The start of the audio is kept — nothing to pad on your side.
- One connection, many utterances — commit after each and continue on the same connection.
- Finals also arrive at pauses. The recogniser detects the end of a phrase when the speaker pauses and sends
that phrase’s
transcription.completedon its own; the commit finalises whatever followed the last pause and is answered withinput_audio_buffer.committed. Treat everytranscription.completedas a final, in order; a dotted address spoken with pauses can be split across two of them. - Shared capacity, not reserved partner throughput. Live captions and realtime transcription share capacity with every
caller of both lanes. When it is full, a new session is refused at once with
busyand close 1013 (retry with back-off); other failures can returnunavailable/ 1011. Error frames look like{"type":"error","error":{"code":"busy","message":"…"}}. Sessions have no time limit. - Finals at pauses usually arrive about 1 s after the speaker stops; a few phrases (about 2 %) wait several seconds. When your application knows an utterance is over, send the commit to get its final at once.
- Input must be 16 kHz mono PCM16. A connection carries many utterances — keep streaming after each final and commit again. If it drops, open a new one and resend the utterance (finals are not replayed).
pip install "websockets>=14". On older versions useextra_headers=instead ofadditional_headers=.
Routing and capacity
Section titled “Routing and capacity”See Speech routing for endpoint-specific finalization and translating captions. Available connections do not establish guaranteed low-latency classroom capacity.
