Inference APIs

Measured accuracy

ModelWord error rateCharacter error rateClips with no errorsEmpty transcriptsSpeed
Whisper Large v3
openai/whisper-large-v3
21%12%2 of 300 of 300.081× real time

Fair. Gets the content across, but needs a human pass before it is published or quoted. Whisper writes Serbian in Latin script; the test references are Cyrillic, so they were transliterated to Latin before scoring. The clips are clean, single-speaker read speech, so treat this as a best case for your own recordings. How we measured, and all 83 languages.

What a transcript looks like

The clip with the median error rate from the test, reference text against what the API returned.

SpokenЗбог подводне топологије, повратни ток је концентрисан на неколико дубљих делова и тамо се може створити брза струја до дубоке воде.
Whisper Large v3Zbog podvodne topologije povratni tok je koncentrisan na nekoliko dubih delova i tamo se može stvoriti brzo strulja do duboke vode.

Language detection

Send language=sr. Of 10 clips sent without it, only 5 were identified as Serbian; the others were labelled Bosnian (3), English (2). When detection is wrong, Whisper writes the transcript in the language it guessed.

Quickstart

The request is the OpenAI transcription request with a different base URL. language is optional in the API but, as shown above, not optional in practice for Serbian.

cURL
curl https://api.inferenceapis.com/v1/audio/transcriptions \
  -H "Authorization: Bearer $INFERENCE_API_KEY" \
  -F "model=openai/whisper-large-v3" \
  -F "language=sr" \
  -F "file=@recording.mp3" \
  -F "response_format=verbose_json"
Python · openai SDK
import os
from openai import OpenAI

client = OpenAI(base_url="https://api.inferenceapis.com/v1", api_key=os.environ["INFERENCE_API_KEY"])
with open("recording.mp3", "rb") as f:
    r = client.audio.transcriptions.create(model="openai/whisper-large-v3", file=f, language="sr", response_format="verbose_json")
print(r.text)

Subtitles and timestamps

response_format=srt or vtt returns a subtitle file with cues of up to two lines, broken at sentence ends and pauses. verbose_json with timestamp_granularities[]=word returns a start and end time for every word if you want to build your own.

Cost

$0.002 per minute of audio on either model: $0.12 for an hour, $12 for a hundred hours. Duration is measured from the file you upload. There is no daily cap on minutes and no subscription; enough to run your own Serbian test.

Notes for Serbian

  • Output is in Latin script. If you need Cyrillic, transliterate the text afterwards; the mapping is one to one.

FAQ

How accurate is Whisper for Serbian?

On 30 clean read-speech clips it made 21% word errors, about one word in 5. Gets the content across, but needs a human pass before it is published or quoted. Real recordings with noise, accents or several speakers will score worse.

Does language auto-detection work for Serbian?

Not reliably. Of 10 clips sent without a language, 5 were identified as Serbian; the rest were labelled Bosnian (3), English (2). A wrong label means the transcript is written in the wrong language, so always send language=sr.

Can it translate Serbian speech to English?

The API returns Serbian text. For English, transcribe first and translate the text with a chat model on the same key.

Related languages: Croatian (11%) · Bosnian (13%) · Macedonian (16%) · Bulgarian (8.4%)