Skip to content
NHWe are part of the NETWORKERS HOME Group — Enterprise AI InfrastructurePart of the NETWORKERS HOME GroupVisit Networkers Home →
Ollalink
Get started

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.


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.

Terminal window
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-accuracy

Hindi 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.

Terminal window
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.

Terminal window
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, ar and it the 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.completed on its own; the commit finalises whatever followed the last pause and is answered with input_audio_buffer.committed. Treat every transcription.completed as 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 busy and close 1013 (retry with back-off); other failures can return unavailable / 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 use extra_headers= instead of additional_headers=.

See Speech routing for endpoint-specific finalization and translating captions. Available connections do not establish guaranteed low-latency classroom capacity.