From 8b3407db1a1792146fd1c9e121f4af970777c7d5 Mon Sep 17 00:00:00 2001 From: egenthon-cmd Date: Tue, 25 Aug 2026 14:20:11 -0400 Subject: [PATCH 1/8] docs: add shared what to use when cards reusable card group so every how to use gladia page can point readers to the right integration path. Co-authored-by: Cursor --- snippets/what-to-use-when.mdx | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 snippets/what-to-use-when.mdx diff --git a/snippets/what-to-use-when.mdx b/snippets/what-to-use-when.mdx new file mode 100644 index 0000000..db23676 --- /dev/null +++ b/snippets/what-to-use-when.mdx @@ -0,0 +1,16 @@ +## What to use when + + + + Build transcription into your product (JavaScript or Python) + + + Try models and features in the browser before you integrate + + + Dictate into any desktop app with a hotkey + + + Transcribe files or URLs from a terminal or CI + + From 5244a7191e1564c1be628df1c228268ef7314cee Mon Sep 17 00:00:00 2001 From: egenthon-cmd Date: Tue, 25 Aug 2026 14:20:11 -0400 Subject: [PATCH 2/8] docs: clarify playground for model testing tighten the playground guide and point readers to models, sdk, and cli after trying features in the browser. Co-authored-by: Cursor --- chapters/how-to-use-gladia/playground.mdx | 11 +++++++++-- snippets/getting-started-playground.mdx | 23 ++++++++++------------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/chapters/how-to-use-gladia/playground.mdx b/chapters/how-to-use-gladia/playground.mdx index 6e4d8bf..a6b99d2 100644 --- a/chapters/how-to-use-gladia/playground.mdx +++ b/chapters/how-to-use-gladia/playground.mdx @@ -1,9 +1,16 @@ --- title: Playground -description: "Use the Gladia app to transcribe your audio" +description: "Test Gladia models and features in the browser before you integrate" mode: "wide" --- import GettingStartedPlayground from "/snippets/getting-started-playground.mdx"; +import WhatToUseWhen from "/snippets/what-to-use-when.mdx"; - \ No newline at end of file + + +## Test models before integrating + +Try the features you need (e.g. diarization or NER) and compare [Solaria-3 vs Solaria-1](/chapters/introduction/models) on your audio. Check both the readable transcript and the JSON tab. + + diff --git a/snippets/getting-started-playground.mdx b/snippets/getting-started-playground.mdx index 6483a30..d034a63 100644 --- a/snippets/getting-started-playground.mdx +++ b/snippets/getting-started-playground.mdx @@ -1,11 +1,9 @@ [Gladia's playground](https://app.gladia.io/?utm_campaign=197609689-Website&utm_source=documentation&utm_content=sign-up -) is a convenient way to test our Speech-To-Text API. On the playground -you are able to transcribe remote audio files through URL, and also upload your local audio files, alongside with live -audio transcription. +) lets you try Speech-To-Text in the browser: mic stream, local upload, or remote URL. Compare models and features on your audio before you integrate. - Choose your audio source (stream from you microphone, or upload a local file) + Choose your audio source (mic stream or local file upload). @@ -15,13 +13,13 @@ audio transcription. - You'll be able to select some of - the options Gladia API provide for your transcription. \ - For this example, we want to detect the named entity (like email adresses, phone numbers, etc.), so we turned on **named entity recognition**. + Select some of + the options Gladia provides. \ + In this example we enable **named entity recognition**. - Only a few features of Gladia API are available on the playground. For more advanced testing, - check [our API documentation](/api-reference/) instead. + Only a subset of API features is available in the playground. For advanced testing, + see the [API documentation](/api-reference/). @@ -30,9 +28,9 @@ audio transcription. - You can talk to Gladia by clicking on the "Start transcribing" button, and you'll be able to see the transcription of your voice in the "Transcription" tab. + Click **Start transcribing** to see your voice in the Transcription tab. - Text in italic in the transcription represents [partials transcripts](/chapters/live-stt/features#partial-transcripts). + Italic text is [partial transcripts](/chapters/live-stt/features#partial-transcripts). @@ -40,8 +38,7 @@ audio transcription. - You can see an already formatted and readable results in the default "Transcription" tab, and you'll also find - the result in JSON format (the one you'd get with an API call). + The Transcription tab shows a readable result. The JSON tab shows the same payload you would get from an API call. From 2f4c2cc8cc1e6b07c4f410d6a68f746804e50f88 Mon Sep 17 00:00:00 2001 From: egenthon-cmd Date: Tue, 25 Aug 2026 14:20:11 -0400 Subject: [PATCH 3/8] docs: add gladiaflow page under how to use gladia document desktop dictation setup and include a home-screen screenshot for orientation. Co-authored-by: Cursor --- assets/images/gladiaflow-home.png | Bin 0 -> 35915 bytes chapters/how-to-use-gladia/gladia-flow.mdx | 58 +++++++++++++++++++++ docs.json | 11 ++-- 3 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 assets/images/gladiaflow-home.png create mode 100644 chapters/how-to-use-gladia/gladia-flow.mdx diff --git a/assets/images/gladiaflow-home.png b/assets/images/gladiaflow-home.png new file mode 100644 index 0000000000000000000000000000000000000000..398cd553fd15462b86e2ac3cf4cc49de58cc76ed GIT binary patch literal 35915 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 ZBfK4LR>XKO2P$|{fhR{_9Q#A~{{V#lh?4*S literal 0 HcmV?d00001 diff --git a/chapters/how-to-use-gladia/gladia-flow.mdx b/chapters/how-to-use-gladia/gladia-flow.mdx new file mode 100644 index 0000000..62adaf3 --- /dev/null +++ b/chapters/how-to-use-gladia/gladia-flow.mdx @@ -0,0 +1,58 @@ +--- +title: GladiaFlow +description: "Real-time voice dictation for your desktop." +--- + +import WhatToUseWhen from "/snippets/what-to-use-when.mdx"; + +[GladiaFlow](https://www.gladia.io/gladiaflow) is our open-source desktop app for macOS and Windows. + +Hold a hotkey, speak, and text is pasted into the focused app (Slack, Notes, or Notion for example) + + + +The app is free (MIT). Usage is billed on your Gladia API key. + + + + GladiaFlow home screen showing Ready to dictate and dictation stats + + +## What you get + +- **Dictate anywhere**: any focused text field +- **Real-time streaming**: partials and finals as you speak +- **100+ languages**: auto-detect and mid-sentence [code switching](/chapters/language/code-switching) +- **Custom vocabulary**: names, acronyms, domain terms +- **Push-to-talk or toggle**: configurable global hotkey +- **Open source**: [GitHub](https://github.com/gladiaio/gladiaflow) + +## Getting started + + + + Use the [GladiaFlow product page](https://www.gladia.io/gladiaflow), or install from the [latest GitHub release](https://github.com/gladiaio/gladiaflow/releases/latest): + + - **macOS**: universal DMG (Intel + Apple Silicon) + - **Windows**: NSIS installer (`.exe`) + + + + Copy a key from the [Gladia dashboard](https://app.gladia.io/apikeys). + + + + Open GladiaFlow, paste your API key, grant microphone (and on macOS, Accessibility) permissions, then hold the hotkey and speak. + + | Platform | Default trigger | + | --- | --- | + | macOS | Fn (Globe) | + | Windows | Ctrl + Space | + + + + + The app is free. Transcription is pay-as-you-go on the same Gladia key you use for API or SDK usage. + + + diff --git a/docs.json b/docs.json index a13b564..2e8c6d9 100644 --- a/docs.json +++ b/docs.json @@ -12,7 +12,9 @@ "eyebrows": "breadcrumbs", "codeblocks": "system" }, - "fonts": { "family": "Inter" }, + "fonts": { + "family": "Inter" + }, "appearance": { "default": "system", "strict": false @@ -36,6 +38,7 @@ "group": "How to use Gladia", "pages": [ "chapters/how-to-use-gladia/playground", + "chapters/how-to-use-gladia/gladia-flow", "chapters/how-to-use-gladia/benchmarking" ] }, @@ -64,7 +67,6 @@ } ] }, - { "group": "Language", "pages": [ @@ -141,7 +143,10 @@ "groups": [ { "group": "API Documentation", - "pages": ["api-reference/index", "api-reference/authentication"] + "pages": [ + "api-reference/index", + "api-reference/authentication" + ] }, { "group": "Live endpoints", From d6579d19f34b53146481ae4444992f10a450ccf6 Mon Sep 17 00:00:00 2001 From: egenthon-cmd Date: Tue, 25 Aug 2026 14:20:11 -0400 Subject: [PATCH 4/8] docs: move sdk guide into how to use gladia consolidate js/python setup and quickstarts under how to use gladia, with samples links and redirects from the old integrations path. Co-authored-by: Cursor --- chapters/how-to-use-gladia/sdk.mdx | 209 +++++++++++++++++++++++++++++ chapters/integrations/sdk.mdx | 28 ---- chapters/introduction/models.mdx | 4 +- docs.json | 6 +- snippets/integrations-cards.mdx | 2 +- 5 files changed, 217 insertions(+), 32 deletions(-) create mode 100644 chapters/how-to-use-gladia/sdk.mdx delete mode 100644 chapters/integrations/sdk.mdx diff --git a/chapters/how-to-use-gladia/sdk.mdx b/chapters/how-to-use-gladia/sdk.mdx new file mode 100644 index 0000000..3c0b9a2 --- /dev/null +++ b/chapters/how-to-use-gladia/sdk.mdx @@ -0,0 +1,209 @@ +--- +title: SDK +description: "Transcribe audio in a few lines with the official Gladia SDKs" +--- + +import WhatToUseWhen from "/snippets/what-to-use-when.mdx"; + +Ship transcription in minutes. The official SDKs handle upload, jobs, live WebSockets, and retries so you write product code, not plumbing. + + + + `npm install @gladiaio/sdk` + + + `pip install gladiaio-sdk` + + + +## Install + + + +```bash JavaScript +npm install @gladiaio/sdk +``` + +```bash Python +pip install gladiaio-sdk +``` + + + +Get an API key from the [Gladia dashboard](https://app.gladia.io/apikeys), or set `GLADIA_API_KEY`. + +## Pre-recorded in 3 lines + +Pass a local file or a URL. One call uploads, runs the job, and returns the result. + + + +```javascript JavaScript +import { GladiaClient } from "@gladiaio/sdk"; + +const gladia = new GladiaClient({ apiKey: "YOUR_GLADIA_API_KEY" }); +const result = await gladia.preRecorded().transcribe("audio.mp3"); + +console.log(result); +``` + +```python Python +from gladiaio_sdk import GladiaClient + +gladia = GladiaClient(api_key="YOUR_GLADIA_API_KEY").prerecorded() +result = gladia.transcribe("audio.mp3") + +print(result) +``` + + + +Add options when you need them: + + + +```javascript JavaScript +const result = await gladia.preRecorded().transcribe("audio.mp3", { + model: "solaria-3", + language_config: { languages: ["en"] }, + diarization: true, +}); +``` + +```python Python +result = gladia.transcribe( + "audio.mp3", + { + "model": "solaria-3", + "language_config": {"languages": ["en"]}, + "diarization": True, + }, +) +``` + + + +## Live in a few lines + +Start a session, send audio, print finals as they arrive: + + + +```javascript JavaScript +import { GladiaClient } from "@gladiaio/sdk"; + +const gladia = new GladiaClient({ apiKey: "YOUR_GLADIA_API_KEY" }); + +const session = gladia.liveV2().startSession({ + encoding: "wav/pcm", + sample_rate: 16000, + bit_depth: 16, + channels: 1, +}); + +session.on("message", (message) => { + if (message.type === "transcript" && message.data.is_final) { + console.log(message.data.utterance.text); + } +}); + +// session.sendAudio(chunk) +// session.stopRecording() +``` + +```python Python +from gladiaio_sdk import GladiaClient, LiveV2InitRequest + +gladia = GladiaClient(api_key="YOUR_GLADIA_API_KEY") +session = gladia.live_v2().start_session( + LiveV2InitRequest( + encoding="wav/pcm", + sample_rate=16000, + bit_depth=16, + channels=1, + ) +) + +@session.on("message") +def on_message(message): + if getattr(message, "type", None) == "transcript": + data = message.data + if data.is_final: + print(data.utterance.text) + +# session.send_audio(chunk) +# session.stop_recording() +``` + + + +## Full samples + +Clone ready-to-run examples for pre-recorded, live, and real use cases: + + + Python, TypeScript, and JavaScript samples on GitHub + + + + + Pre-recorded and live samples + + + Pre-recorded and live samples + + + Pre-recorded and live samples + + + +## Next guides + + + + Jobs, webhooks, and audio intelligence + + + Streaming, partials, and session lifecycle + + + Choose Solaria-3 or Solaria-1 + + + Transcribe from the terminal without app code + + + + diff --git a/chapters/integrations/sdk.mdx b/chapters/integrations/sdk.mdx deleted file mode 100644 index d1969a5..0000000 --- a/chapters/integrations/sdk.mdx +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: SDK -description: "Use the SDK to integrate Gladia into your project" -mode: "wide" ---- - -To integrate Gladia into your project faster, and use all of our best practices for transcribing audio, you can use one of our SDKs. - - - Want to start building realtime transcription applications with Gladia? Check out our [live transcription guide](/chapters/live-stt/quickstart). - - - - - Use the JavaScript SDK to integrate Gladia into your project - - - Use the Python SDK to integrate Gladia into your project - - diff --git a/chapters/introduction/models.mdx b/chapters/introduction/models.mdx index d5c7c64..a6dfcd7 100644 --- a/chapters/introduction/models.mdx +++ b/chapters/introduction/models.mdx @@ -113,7 +113,7 @@ Use Solaria-1 instead for live streaming, code switching, languages outside thos Call Solaria-3 from JavaScript or Python. @@ -153,7 +153,7 @@ Ideal default for voice agents, live captions, and global multilingual products. Integrate with the official SDKs. diff --git a/docs.json b/docs.json index 2e8c6d9..002e8f5 100644 --- a/docs.json +++ b/docs.json @@ -39,6 +39,7 @@ "pages": [ "chapters/how-to-use-gladia/playground", "chapters/how-to-use-gladia/gladia-flow", + "chapters/how-to-use-gladia/sdk", "chapters/how-to-use-gladia/benchmarking" ] }, @@ -96,7 +97,6 @@ { "group": "Integrations", "pages": [ - "chapters/integrations/sdk", "chapters/integrations/pipecat", "chapters/integrations/livekit", "chapters/integrations/vapi", @@ -325,6 +325,10 @@ "source": "/chapters/pre-recorded-stt/benchmarking", "destination": "/chapters/how-to-use-gladia/benchmarking" }, + { + "source": "/chapters/integrations/sdk", + "destination": "/chapters/how-to-use-gladia/sdk" + }, { "source": "/chapters/pre-recorded-stt/features/sentences", "destination": "/chapters/audio-intelligence/sentences" diff --git a/snippets/integrations-cards.mdx b/snippets/integrations-cards.mdx index e3973a4..0891023 100644 --- a/snippets/integrations-cards.mdx +++ b/snippets/integrations-cards.mdx @@ -4,7 +4,7 @@ If you want to build fast with Gladia, you can use one of our integration partne Date: Tue, 25 Aug 2026 14:20:11 -0400 Subject: [PATCH 5/8] docs: add cli page under how to use gladia document install, auth, common workflows, and redirect from the old developer-tools cli path. Co-authored-by: Cursor --- chapters/how-to-use-gladia/cli.mdx | 169 +++++++++++++++++++++++++++++ docs.json | 9 ++ 2 files changed, 178 insertions(+) create mode 100644 chapters/how-to-use-gladia/cli.mdx diff --git a/chapters/how-to-use-gladia/cli.mdx b/chapters/how-to-use-gladia/cli.mdx new file mode 100644 index 0000000..fc03888 --- /dev/null +++ b/chapters/how-to-use-gladia/cli.mdx @@ -0,0 +1,169 @@ +--- +title: CLI +description: "Transcribe audio from your terminal with one install and one command." +--- + +import WhatToUseWhen from "/snippets/what-to-use-when.mdx"; + +The Gladia CLI wraps the [speech-to-text API](/chapters/pre-recorded-stt/quickstart) for terminals and shell scripts. + + + Get your API key from the [Gladia dashboard](https://app.gladia.io/apikeys) before your first transcription. + + +## Why use the CLI ? + +- **One command**: install, set your key, run `gladia transcribe audio.mp3` +- **Flexible output**: plain text, JSON, SRT, or VTT to stdout +- **Set up features**: diarization, languages, and model selection (`solaria-1`, `solaria-3`) +- **Files or URLs**: local recordings or remote links +- **Pipe-friendly**: machine-readable output for scripts and CI + +## Install + +```bash +# macOS & Linux +curl -fsSL https://github.com/gladiaio/gladia-cli/releases/latest/download/install.sh | sh + +# Windows (PowerShell) +powershell -c "irm https://github.com/gladiaio/gladia-cli/releases/latest/download/install.ps1 | iex" +``` + +Other platforms and binaries: [GitHub releases](https://github.com/gladiaio/gladia-cli/releases). + +### API key setup + +```bash +export GLADIA_API_KEY=your_key # 1. environment variable +gladia auth set your_key # 2. saved to ~/.gladia (mode 0600) +gladia transcribe meeting.wav --gladia-key your_key # 3. per-command flag +``` + +## Quick start + +```bash +gladia transcribe meeting.wav # transcript to stdout +gladia transcribe podcast.mp3 -o srt # subtitles +gladia transcribe call.wav --diarize # who spoke when +gladia languages # supported language codes +``` + +## Common workflows + +```bash +# Local file or remote URL +gladia transcribe meeting.wav +gladia transcribe https://example.com/audio.mp3 -o json + +# Narrow language detection +gladia transcribe podcast.mp3 --language en,fr,de + +# Mixed-language audio +gladia transcribe mixed.mp3 --code-switching --language en,fr + +# Diarization as subtitles +gladia transcribe call.wav --diarize -o srt + +# Pick a model +gladia transcribe podcast.mp3 --model solaria-3 --language en + +# Pipe into a script +gladia transcribe interview.mp3 -o json | jq '.transcription' +``` + +## Commands + +| Command | Description | +| --- | --- | +| `transcribe ` | Transcribe an audio file or URL | +| `auth set ` | Save API key to `~/.gladia` | +| `languages` | List supported ISO 639-1 codes | +| `completion ` | Generate shell tab completion (bash, zsh, fish, powershell) | + +## Output formats + +Use `-o` or `--output`: + +| Format | Description | +| --- | --- | +| `text` | Plain transcript (default) | +| `json` | Structured JSON transcript | +| `json-full` | Full API response as JSON | +| `srt` | SubRip subtitles | +| `vtt` | WebVTT subtitles | + +## Transcription options + +| Flag | Default | Description | +| --- | --- | --- | +| `-o`, `--output` | `text` | `text`, `json`, `json-full`, `srt`, `vtt` | +| `--language` | | Expected language(s), comma-separated (`en` or `en,fr,de`) | +| `--cs`, `--code-switching` | off | Re-detect language per utterance (`solaria-1` only) | +| `--diarize` | off | Identify speakers | +| `--model` | | `solaria-1` or `solaria-3`. Solaria-3 accepts one `--language` (`en`, `fr`, `de`, `es`, or `it`) and no code switching. | +| `-v`, `--verbose` | off | Show progress while polling | + +**Global flag**: `--gladia-key` (if not set via env or `~/.gladia`). + +### Language + +| Goal | Command | +| --- | --- | +| Auto-detect | `gladia transcribe ` | +| Constrain detection | `--language en,fr,de` | +| Code switching | `--code-switching` (optional `--language` hints) | + +- **`--language`**: limits which languages Gladia considers (hint list, not per-utterance switching). +- **`--code-switching`**: detects language per utterance. Not available with `solaria-3`. + +### Diarization + +Use `--diarize` for who spoke when (e.g. `Speaker 0: …`). + +```bash +gladia transcribe meeting.wav --diarize +gladia transcribe panel.mp3 --diarize -o srt +``` + +## Shell completion + +The installer can set up tab completion. To skip the prompt in CI, set `GLADIA_NO_COMPLETION_PROMPT=1`. + +```bash +# bash +source <(gladia completion bash) + +# zsh +mkdir -p ~/.zsh/completions +gladia completion zsh > ~/.zsh/completions/_gladia + +# fish +mkdir -p ~/.config/fish/completions +gladia completion fish > ~/.config/fish/completions/gladia.fish +``` + +See `gladia completion --help` for full instructions. + +## Next steps + + + + Create an API key on the Gladia dashboard + + + Source code, issues, and releases + + + Transcription features reference + + + + diff --git a/docs.json b/docs.json index 002e8f5..c12257b 100644 --- a/docs.json +++ b/docs.json @@ -40,6 +40,7 @@ "chapters/how-to-use-gladia/playground", "chapters/how-to-use-gladia/gladia-flow", "chapters/how-to-use-gladia/sdk", + "chapters/how-to-use-gladia/cli", "chapters/how-to-use-gladia/benchmarking" ] }, @@ -329,6 +330,14 @@ "source": "/chapters/integrations/sdk", "destination": "/chapters/how-to-use-gladia/sdk" }, + { + "source": "/chapters/developer-tools/gladia-cli", + "destination": "/chapters/how-to-use-gladia/cli" + }, + { + "source": "/chapters/introduction/benchmarking", + "destination": "/chapters/how-to-use-gladia/benchmarking" + }, { "source": "/chapters/pre-recorded-stt/features/sentences", "destination": "/chapters/audio-intelligence/sentences" From f366f9f23977349247b4c4768ecd613262cfeced Mon Sep 17 00:00:00 2001 From: egenthon-cmd Date: Tue, 25 Aug 2026 14:20:11 -0400 Subject: [PATCH 6/8] docs: rewrite benchmarking methodology replace the long guide with a concise 5-step mintlify flow for fair stt comparison. Co-authored-by: Cursor --- chapters/how-to-use-gladia/benchmarking.mdx | 196 ++++---------------- 1 file changed, 41 insertions(+), 155 deletions(-) diff --git a/chapters/how-to-use-gladia/benchmarking.mdx b/chapters/how-to-use-gladia/benchmarking.mdx index 36f9eff..758884b 100644 --- a/chapters/how-to-use-gladia/benchmarking.mdx +++ b/chapters/how-to-use-gladia/benchmarking.mdx @@ -1,176 +1,62 @@ --- title: Benchmarking -description: A practical guide to benchmarking speech-to-text accuracy — from defining goals to choosing datasets, normalizing transcripts, computing WER, and interpreting results. +description: "A clear 5-step method to compare speech-to-text accuracy fairly" --- -Benchmarking speech-to-text systems is easy to get wrong. -Small methodology changes can produce large swings in reported quality, which makes comparisons misleading. +import WhatToUseWhen from "/snippets/what-to-use-when.mdx"; -## Benchmarking at a glance +Use one shared dataset, one human ground truth, and the same normalization before comparing providers. Otherwise scores are not comparable. - - - Decide what "good" means for your product before comparing systems. - - - Normalize both references and predictions before computing WER. - - - Measure substitutions, deletions, and insertions on normalized text. - - - Benchmark on audio that matches your real traffic and target users. - - - Look beyond one average score and inspect meaningful slices. - - +## Methodology -## 0. Define your evaluation goal + + + Use production audio that matches your traffic: noise, overlap, accents, and domains. Keep it under a DPA for the eval window, then flush it. + -Before comparing providers and models, the first step is to define which aspects of performance matter most for your use case. + + Create independent ground truth (e.g. Amberscript). Do not score providers against each other's transcripts. + -Below are examples of performance aspects that would be more weighted for domain applications of speech to text: + + Transcribe the same audio with every provider so the comparison is fair. + -- Accuracy on noisy backgrounds: for contact centers, telephony, and field recordings. -- Speaker diarization quality: for meeting assistants and multi-speaker calls. -- Named entity accuracy: for workflows that extract people, organizations, phone numbers, or addresses. -- Domain-specific vocabulary handling: for medical, legal, or financial transcription. -- Timestamp accuracy: for media workflows that need readable, well-timed captions. -- Filler-word handling: for agentic workflows . + + Normalize reference and predictions with the same pipeline before WER, so `Mr.` / `Mister` and `$50` / `fifty dollars` match. -Those choices shape every downstream decision: which dataset to use, which normalization rules to apply, and which metrics to report. + [`gladia-normalization`](https://github.com/gladiaio/normalization): + ```python + from normalization import load_pipeline -If your benchmark does not reflect your real traffic, the result will not tell you much about production performance. + pipeline = load_pipeline("gladia-3", language="en") + normalized_reference = pipeline.normalize(reference) + normalized_prediction = pipeline.normalize(prediction) + ``` + -## 1. Normalize transcripts before computing WER + + Compute WER (and NER where it matters), then inspect where critical details fail: names, numbers, acronyms, noisy slices. -Normalization removes surface-form differences (casing, abbreviations, numeric rendering) so you compare apples to apples when judging transcription output. + ```text + WER = (S + D + I) / N + ``` -| Reference | Prediction | Why raw WER is wrong | -|-----------|------------|----------------------| -| `It's $50` | `it is fifty dollars` | Contraction and currency formatting differ, but the semantic content is the same. | -| `Meet at Point 14` | `meet at point fourteen` | The normalization should preserve the numbered entity instead of collapsing it into an unrelated form. | -| `Mr. Smith joined at 3:00 PM` | `mister smith joined at 3 pm` | Honorific and timestamp formatting differ, but the transcript content is equivalent. | + Lower is better. Do not stop at one average score. + + -One common limitation is "Whisper-style normalization" (OpenAI, 2022): implemented in packages like [`whisper-normalizer`](https://pypi.org/project/whisper-normalizer/). It does not affect numbers, and applies aggressive lowercasing and punctuation stripping. +## Before you start -Gladia's recommended approach is [`gladia-normalization`](https://github.com/gladiaio/normalization), our open-source library designed for transcript evaluation: - -- `It's $50` -> `it is 50 dollars` -- `Meet at Point 14` -> `meet at point 14` -- `Mr. Smith joined at 3:00 PM` -> `mister smith joined at 3 pm` - - - Open-source transcript normalization library used before WER computation. - - -```python -from normalization import load_pipeline - -pipeline = load_pipeline("gladia-3", language="en") - -reference = "Meet at Point 14. It's $50 at 3:00 PM." -prediction = "meet at point fourteen it is fifty dollars at 3 pm" - -normalized_reference = pipeline.normalize(reference) -normalized_prediction = pipeline.normalize(prediction) -``` - - - Always apply the same normalization pipeline to both the reference transcript and every hypothesis output you compare. Changing the normalization rules between references invalidates the results. - - -## 2. Compute WER correctly - -Word Error Rate measures the edit distance between a reference transcript and a predicted transcript at the word level. - -The standard formula is: - -```text -WER = (S + D + I) / N -``` - -Where: - -- `S` = substitutions -- `D` = deletions -- `I` = insertions -- `N` = number of words in the reference transcript - -Lower is better. In practice: - -1. Prepare a reference transcript for each audio sample. -2. Run each provider on the exact same audio. -3. Normalize both the reference and each prediction with the same pipeline. -4. Compute WER on the normalized outputs. -5. Aggregate results across the full dataset. - - - Do not compute WER on raw transcripts if providers format numbers, punctuation, abbreviations, or casing differently. That mostly measures formatting conventions, not recognition quality. - - - - Inspect your reference transcripts carefully before computing WER. If a - reference contains text that is not actually present in the audio, for - example an intro such as "this audio is a recording of...", it can make WER - look much worse across all providers. - - -## 3. Choose a representative dataset - -Start from your [evaluation goal](#1-define-your-evaluation-goal): the right dataset depends on the use case and traffic shape you want to measure. - -A good benchmark dataset should look as close as possible to your real production audio. If the audio in the benchmark does not match what you actually process, the results will not tell you much. - -When choosing your dataset, make sure it matches your real audio on: - -- Language: the target language, accents, and whether speakers switch languages. -- Audio quality: telephony, browser microphone, studio recordings, noisy field audio, overlapping speech, or compressed audio. -- Topics: medical, operational, legal, financial, customer support, or any other domain you care about. -- Important words: numbers, names, acronyms, product names, addresses, or domain-specific terminology. -- Interaction style: single-speaker dictation, calls, meetings, interviews, or long-form recordings. - -Use transcripts that are strong enough to serve as ground truth. When possible, combine public datasets for comparability with private in-domain datasets that reflect your real traffic. - -Typical failure cases: - -- Benchmarking call-center audio with clean podcast recordings overestimates real-world performance. -- Benchmarking English-only speech does not capture code-switching traffic. -- Benchmarking short clips can hide failures that appear on long recordings with multiple speakers. - - - Your favorite LLM with internet access can be very effective at finding - public datasets that match your use case. - - -For a broader methodology view, see [this benchmark guide](/chapters/how-to-use-gladia/benchmarking), especially the evaluation-goal section above when mapping use cases to dataset types. - -## 4. Interpret results carefully - -Do not stop at a single WER number. Review: - -- overall average WER -- median WER and spread across files -- breakdowns by language, domain, or audio condition -- failure modes on proper nouns, acronyms, and numbers -- whether differences are consistent or concentrated in a few hard samples - -Two systems can post similar average WER while failing on different error classes. Separate statistically meaningful gaps from noise introduced by dataset composition or normalization choices. - -If two systems are close, inspect actual transcript examples before drawing strong conclusions. +Decide what "good" means for your product (noise, diarization, entities, domain vocab, timestamps). If the dataset does not look like your traffic, the score will not predict production quality. ## Common pitfalls -- Comparing providers on different datasets -- Using low-quality or inconsistent ground truth -- Treating punctuation and formatting differences as recognition errors -- Drawing conclusions from too few samples -- Reporting one average score without any slice analysis -- Not inspecting the reference transcript: if it contains text not present in the audio, for example an intro like "this audio is a recording of...", it will inflate WER across all providers -- Not experimenting with provider configurations: for example, using Gladia's [custom vocabulary](/chapters/audio-intelligence/custom-vocabulary) to improve proper noun accuracy, then comparing against the ground truth +- Different datasets per provider +- Weak ground truth +- Counting formatting as recognition errors +- Too few samples or one average with no slices +- Reference text that is not in the audio + + From 1166e0fedae174852bcfa5924e925b9e24ef9e92 Mon Sep 17 00:00:00 2001 From: egenthon-cmd Date: Mon, 31 Aug 2026 12:26:51 -0400 Subject: [PATCH 7/8] docs: polish benchmarking page and reorder what to use when MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit add a github card for gladia-normalization, clarify the diversity pitfall, and reorder the shared cards to sdk → playground → cli → benchmarking → gladiaflow. Co-authored-by: Cursor --- chapters/how-to-use-gladia/benchmarking.mdx | 16 +++++++++++----- snippets/what-to-use-when.mdx | 9 ++++++--- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/chapters/how-to-use-gladia/benchmarking.mdx b/chapters/how-to-use-gladia/benchmarking.mdx index 758884b..a8bc75a 100644 --- a/chapters/how-to-use-gladia/benchmarking.mdx +++ b/chapters/how-to-use-gladia/benchmarking.mdx @@ -5,7 +5,7 @@ description: "A clear 5-step method to compare speech-to-text accuracy fairly" import WhatToUseWhen from "/snippets/what-to-use-when.mdx"; -Use one shared dataset, one human ground truth, and the same normalization before comparing providers. Otherwise scores are not comparable. +Use one dataset with human ground truth, and the same normalization before comparing providers. Otherwise scores are not comparable. ## Methodology @@ -15,7 +15,7 @@ Use one shared dataset, one human ground truth, and the same normalization befor - Create independent ground truth (e.g. Amberscript). Do not score providers against each other's transcripts. + Create independent ground truth. Do not score providers against each other's transcripts. @@ -23,9 +23,15 @@ Use one shared dataset, one human ground truth, and the same normalization befor - Normalize reference and predictions with the same pipeline before WER, so `Mr.` / `Mister` and `$50` / `fifty dollars` match. + Normalize reference and predictions with the same pipeline before WER, so `Mr.` / `Mister` and `$50` / `fifty dollars` mismatches does not count as errors. - [`gladia-normalization`](https://github.com/gladiaio/normalization): + + Open-source text normalization for fair WER scoring + ```python from normalization import load_pipeline @@ -56,7 +62,7 @@ Decide what "good" means for your product (noise, diarization, entities, domain - Different datasets per provider - Weak ground truth - Counting formatting as recognition errors -- Too few samples or one average with no slices +- Too few samples, or a wrong distribution of your real audio traffic diversity - Reference text that is not in the audio diff --git a/snippets/what-to-use-when.mdx b/snippets/what-to-use-when.mdx index db23676..b225e87 100644 --- a/snippets/what-to-use-when.mdx +++ b/snippets/what-to-use-when.mdx @@ -7,10 +7,13 @@ Try models and features in the browser before you integrate - - Dictate into any desktop app with a hotkey - Transcribe files or URLs from a terminal or CI + + Compare speech-to-text accuracy fairly across providers + + + Dictate into any desktop app with a hotkey + From fd2b1847a9395d448b7338141920f37173113df7 Mon Sep 17 00:00:00 2001 From: egenthon-cmd Date: Tue, 1 Sep 2026 14:54:14 -0400 Subject: [PATCH 8/8] fix: organization and cleaning --- chapters/how-to-use-gladia/benchmarking.mdx | 4 ---- chapters/how-to-use-gladia/cli.mdx | 4 ---- chapters/how-to-use-gladia/gladia-flow.mdx | 4 ---- chapters/how-to-use-gladia/playground.mdx | 3 --- chapters/how-to-use-gladia/sdk.mdx | 4 ---- docs.json | 6 +++--- snippets/what-to-use-when.mdx | 19 ------------------- 7 files changed, 3 insertions(+), 41 deletions(-) delete mode 100644 snippets/what-to-use-when.mdx diff --git a/chapters/how-to-use-gladia/benchmarking.mdx b/chapters/how-to-use-gladia/benchmarking.mdx index a8bc75a..3cc14d8 100644 --- a/chapters/how-to-use-gladia/benchmarking.mdx +++ b/chapters/how-to-use-gladia/benchmarking.mdx @@ -3,8 +3,6 @@ title: Benchmarking description: "A clear 5-step method to compare speech-to-text accuracy fairly" --- -import WhatToUseWhen from "/snippets/what-to-use-when.mdx"; - Use one dataset with human ground truth, and the same normalization before comparing providers. Otherwise scores are not comparable. ## Methodology @@ -64,5 +62,3 @@ Decide what "good" means for your product (noise, diarization, entities, domain - Counting formatting as recognition errors - Too few samples, or a wrong distribution of your real audio traffic diversity - Reference text that is not in the audio - - diff --git a/chapters/how-to-use-gladia/cli.mdx b/chapters/how-to-use-gladia/cli.mdx index fc03888..b68e95c 100644 --- a/chapters/how-to-use-gladia/cli.mdx +++ b/chapters/how-to-use-gladia/cli.mdx @@ -3,8 +3,6 @@ title: CLI description: "Transcribe audio from your terminal with one install and one command." --- -import WhatToUseWhen from "/snippets/what-to-use-when.mdx"; - The Gladia CLI wraps the [speech-to-text API](/chapters/pre-recorded-stt/quickstart) for terminals and shell scripts. @@ -165,5 +163,3 @@ See `gladia completion --help` for full instructions. Transcription features reference - - diff --git a/chapters/how-to-use-gladia/gladia-flow.mdx b/chapters/how-to-use-gladia/gladia-flow.mdx index 62adaf3..e4b074d 100644 --- a/chapters/how-to-use-gladia/gladia-flow.mdx +++ b/chapters/how-to-use-gladia/gladia-flow.mdx @@ -3,8 +3,6 @@ title: GladiaFlow description: "Real-time voice dictation for your desktop." --- -import WhatToUseWhen from "/snippets/what-to-use-when.mdx"; - [GladiaFlow](https://www.gladia.io/gladiaflow) is our open-source desktop app for macOS and Windows. Hold a hotkey, speak, and text is pasted into the focused app (Slack, Notes, or Notion for example) @@ -54,5 +52,3 @@ The app is free (MIT). Usage is billed on your Gladia API key. The app is free. Transcription is pay-as-you-go on the same Gladia key you use for API or SDK usage. - - diff --git a/chapters/how-to-use-gladia/playground.mdx b/chapters/how-to-use-gladia/playground.mdx index a6b99d2..a20c517 100644 --- a/chapters/how-to-use-gladia/playground.mdx +++ b/chapters/how-to-use-gladia/playground.mdx @@ -5,12 +5,9 @@ mode: "wide" --- import GettingStartedPlayground from "/snippets/getting-started-playground.mdx"; -import WhatToUseWhen from "/snippets/what-to-use-when.mdx"; ## Test models before integrating Try the features you need (e.g. diarization or NER) and compare [Solaria-3 vs Solaria-1](/chapters/introduction/models) on your audio. Check both the readable transcript and the JSON tab. - - diff --git a/chapters/how-to-use-gladia/sdk.mdx b/chapters/how-to-use-gladia/sdk.mdx index 3c0b9a2..f12ee70 100644 --- a/chapters/how-to-use-gladia/sdk.mdx +++ b/chapters/how-to-use-gladia/sdk.mdx @@ -3,8 +3,6 @@ title: SDK description: "Transcribe audio in a few lines with the official Gladia SDKs" --- -import WhatToUseWhen from "/snippets/what-to-use-when.mdx"; - Ship transcription in minutes. The official SDKs handle upload, jobs, live WebSockets, and retries so you write product code, not plumbing. @@ -205,5 +203,3 @@ Clone ready-to-run examples for pre-recorded, live, and real use cases: Transcribe from the terminal without app code - - diff --git a/docs.json b/docs.json index c12257b..2b3db53 100644 --- a/docs.json +++ b/docs.json @@ -37,11 +37,11 @@ { "group": "How to use Gladia", "pages": [ - "chapters/how-to-use-gladia/playground", - "chapters/how-to-use-gladia/gladia-flow", "chapters/how-to-use-gladia/sdk", + "chapters/how-to-use-gladia/playground", "chapters/how-to-use-gladia/cli", - "chapters/how-to-use-gladia/benchmarking" + "chapters/how-to-use-gladia/benchmarking", + "chapters/how-to-use-gladia/gladia-flow" ] }, { diff --git a/snippets/what-to-use-when.mdx b/snippets/what-to-use-when.mdx deleted file mode 100644 index b225e87..0000000 --- a/snippets/what-to-use-when.mdx +++ /dev/null @@ -1,19 +0,0 @@ -## What to use when - - - - Build transcription into your product (JavaScript or Python) - - - Try models and features in the browser before you integrate - - - Transcribe files or URLs from a terminal or CI - - - Compare speech-to-text accuracy fairly across providers - - - Dictate into any desktop app with a hotkey - -