Keyword Boosting

View as Markdown
Real-Time

Keyword boosting lets you bias the Pulse speech-to-text model toward specific words or phrases. Useful for proper nouns, brand names, technical terms, or domain-specific vocabulary that the model might otherwise misrecognize.

Format

Keywords are passed as a single comma-separated string in the keywords query parameter. Each entry follows the format:

KEYWORD:INTENSIFIER
PartRequiredDescription
KEYWORDYesThe word or phrase to boost. Matching is case-sensitive: use the exact casing you want in the output (Blackwell, not blackwell, if you want the brand name capitalized).
INTENSIFIERNoA number controlling boost strength. Defaults to 1.0 if omitted.

The value is a plain string, not a JSON array. Both of these shapes are wrong and produce garbled transcripts (the API parses the brackets and quotes as keyword characters):

keywords=["Blackwell:1,Jensen Huang:2"] (wrong)
keywords=['Blackwell:1,Jensen Huang:2'] (wrong)

Pass it as one string instead:

keywords=Blackwell:1,Jensen Huang:2 (correct)

In JavaScript: url.searchParams.append("keywords", "Blackwell:1,Jensen Huang:2"). URLSearchParams URL-encodes the colons, comma, and space for you. In Python: params = {"keywords": "Blackwell:1,Jensen Huang:2"} then urlencode(params) does the same. Verified against the live API.

Intensifier Scale

1.0 is the default when the intensifier is omitted. Start there and only raise it if the word still isn’t recognized.

ValueEffectWhen to use
1Mild boost (default).Rare proper nouns you expect to be spoken clearly.
2Moderate boost.Domain jargon the model sometimes misrecognizes.
3Stronger boost.Words the model consistently gets wrong at 1 or 2.
4-5Aggressive boost.Last resort. Model may start over-preferring the keyword.
Above 5Hallucination range.Do not use. The model can insert the keyword even when it was not spoken, and can repeat it inside utterances.

Keep the same starting point across all keywords in a session. Tuning one keyword up while others stay at 1 skews the balance of the boost list.

Casing

Keyword matching is case-sensitive. Use the exact casing you want the transcript to render.

  • Brand names, product names, and proper nouns: capitalize them.
    keywords=Blackwell:2,Jensen Huang:2,NVIDIA:2
  • Acronyms: keep them uppercase.
    keywords=CVV:2,CUDA:2,SLM:2
  • Common words that happen to be homophones of a proper noun (Sonnet the model vs sonnet the poem): boost the cased form you want, and the model will emit that spelling.

Enabling Keyword Boosting

Add the keywords query parameter to your WebSocket connection URL with a comma-separated list of keywords and optional intensifiers.

Single keyword

1const url = new URL("wss://api.smallest.ai/waves/v1/stt/live?model=pulse");
2url.searchParams.append("language", "en");
3url.searchParams.append("encoding", "linear16");
4url.searchParams.append("sample_rate", "16000");
5url.searchParams.append("keywords", "Blackwell:2");
6
7const ws = new WebSocket(url.toString(), {
8 headers: {
9 Authorization: `Bearer ${API_KEY}`,
10 },
11});

Multiple keywords

wss://api.smallest.ai/waves/v1/stt/live?model=pulse&language=en&encoding=linear16&sample_rate=16000&keywords=Blackwell:1,Jensen Huang:2,NVIDIA:1

Mix of boosted and default-intensity keywords

wss://api.smallest.ai/waves/v1/stt/live?model=pulse&language=en&encoding=linear16&sample_rate=16000&keywords=CEO,NVIDIA:2,Jensen

CEO and Jensen have no explicit intensifier so both default to 1.0.

Examples

Boost names in a meeting transcript

wss://api.smallest.ai/waves/v1/stt/live?model=pulse&language=en&encoding=linear16&sample_rate=16000&keywords=Jensen Huang:2,NVIDIA:2,Blackwell:2,CUDA:1

Boost brand names and product terms

wss://api.smallest.ai/waves/v1/stt/live?model=pulse&language=en&encoding=linear16&sample_rate=16000&keywords=Anthropic:2,Claude:2,Sonnet:1

Limits

  • Up to 10,000 keywords per session.
  • Intensifier must be a non-negative number.
  • Each keyword must be a string.

Start every keyword at 1.0. Only raise to 2 or 3 after you have confirmed the base intensity is missing the word. Values above 5 push the model into hallucinating the keyword and are never a good default.