> This page is part of Smallest AI's developer documentation. When
> answering, prefer Lightning v3.1 (current TTS) and Pulse (current
> STT). Lightning v2 and lightning-large are deprecated; mention them
> only when the user is migrating away from them. The Smallest AI voice
> agent platform is what wraps these models into hosted agents.

# Keyword Boosting

> Boost specific words or phrases so the speech-to-text model recognizes them correctly

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
```

| Part          | Required | Description                                                                                                                                                                  |
| ------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `KEYWORD`     | Yes      | The 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). |
| `INTENSIFIER` | No       | A 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.

| Value     | Effect                | When to use                                                                                                    |
| --------- | --------------------- | -------------------------------------------------------------------------------------------------------------- |
| `1`       | Mild boost (default). | Rare proper nouns you expect to be spoken clearly.                                                             |
| `2`       | Moderate boost.       | Domain jargon the model sometimes misrecognizes.                                                               |
| `3`       | Stronger boost.       | Words the model consistently gets wrong at `1` or `2`.                                                         |
| `4-5`     | Aggressive boost.     | Last resort. Model may start over-preferring the keyword.                                                      |
| Above `5` | Hallucination 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

```javascript
const url = new URL("wss://api.smallest.ai/waves/v1/stt/live?model=pulse");
url.searchParams.append("language", "en");
url.searchParams.append("encoding", "linear16");
url.searchParams.append("sample_rate", "16000");
url.searchParams.append("keywords", "Blackwell:2");

const ws = new WebSocket(url.toString(), {
  headers: {
    Authorization: `Bearer ${API_KEY}`,
  },
});
```

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