> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getpatter.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Krisp Filter

> Proprietary Krisp VIVA noise / echo suppression as a Patter AudioFilter.

# Krisp VIVA Filter

`KrispVivaFilter` is a Patter `AudioFilter` backed by the [Krisp VIVA](https://krisp.ai/) noise- and echo-suppression SDK. It runs as a pre-STT filter in pipeline mode: caller PCM enters the filter, cleaned PCM exits and is forwarded to the STT provider.

Use it on noisy lines (call-centre, vehicle, café) where STT accuracy degrades because of background sound.

<Warning>
  Krisp VIVA is a **proprietary SDK**. The Patter integration is open source and free, but you must obtain your own commercial licence from [krisp.ai](https://krisp.ai/) to use the underlying `krisp-audio` package and model files. Patter does not endorse, redistribute, or sublicense any Krisp software or models — it just calls the SDK on your behalf.

  For an MIT-licensed alternative, see [DeepFilterNet](/python-sdk/providers/deepfilternet-filter).
</Warning>

## Install

The Krisp SDK ships outside PyPI's normal channels and requires a licence file:

<CodeGroup>
  ```bash Python theme={null}
  pip install "getpatter[krisp]"      # installs krisp-audio>=2.0 + numpy

  # Then set:
  #   KRISP_VIVA_SDK_LICENSE_KEY    — provided by Krisp
  #   KRISP_VIVA_FILTER_MODEL_PATH  — absolute path to your .kef model
  ```

  ```bash TypeScript theme={null}
  # Krisp does not currently ship a TypeScript twin in the Patter SDK.
  # Use DeepFilterNet for TS noise suppression in the meantime.
  ```
</CodeGroup>

<Note>
  At time of writing the Patter TypeScript SDK does not include a Krisp filter — only Python. The TS pipeline can still use [`DeepFilterNetFilter`](/typescript-sdk/providers/deepfilternet-filter) for noise suppression.
</Note>

## Constructor

<CodeGroup>
  ```python Python theme={null}
  from getpatter.providers.krisp_filter import KrispVivaFilter
  from getpatter.providers.krisp_instance import KrispFrameDuration, KrispSampleRate

  filt = KrispVivaFilter(
      model_path=None,                          # falls back to KRISP_VIVA_FILTER_MODEL_PATH
      noise_suppression_level=100,              # 0..100, default 100
      frame_duration_ms=KrispFrameDuration.MS_10,  # 10 / 15 / 20 / 30 / 32
      sample_rate=KrispSampleRate.HZ_16000,     # initial; resized lazily if it changes mid-call
  )
  ```

  ```typescript TypeScript theme={null}
  // Not yet available in the TS SDK — see the warning above.
  ```
</CodeGroup>

The filter raises:

* `RuntimeError` if `krisp-audio` is not installed or the licence key is missing.
* `ValueError` if `model_path` is missing or `frame_duration_ms` is unsupported.
* `FileNotFoundError` if the `.kef` model file does not exist.

## Usage in a pipeline agent

Plug it into `phone.agent(audio_filter=...)`:

<CodeGroup>
  ```python Python theme={null}
  import asyncio
  from getpatter import Patter, Twilio, DeepgramSTT, AnthropicLLM, ElevenLabsTTS
  from getpatter.providers.krisp_filter import KrispVivaFilter

  phone = Patter(carrier=Twilio(), phone_number="+15550001234")

  filt = KrispVivaFilter(noise_suppression_level=100)

  agent = phone.agent(
      stt=DeepgramSTT(),
      llm=AnthropicLLM(),
      tts=ElevenLabsTTS(voice_id="rachel"),
      audio_filter=filt,                        # pre-STT noise suppression
      system_prompt="You are a helpful assistant.",
  )

  asyncio.run(phone.serve(agent))
  ```

  ```typescript TypeScript theme={null}
  // Use DeepFilterNetFilter on TS for now.
  ```
</CodeGroup>

See the [`audio_filter` parameter on Agents](/python-sdk/agents) (pipeline mode only).

## Toggling at runtime

`KrispVivaFilter` exposes `enable()` / `disable()` so you can A/B-test the filter on a single call (e.g. when an operator presses a "raw audio" key):

```python theme={null}
filt.disable()    # passthrough
filt.enable()     # noise suppression on
filt.enabled = True
```

When disabled the filter returns the input PCM unchanged.

## When to use Krisp vs alternatives

| Use Krisp when…                                                                              | Use [DeepFilterNet](/python-sdk/providers/deepfilternet-filter) when… | Skip filtering when…                                                                                               |
| -------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| You need best-in-class commercial-grade noise/echo suppression and you have a Krisp licence. | You want an MIT-licensed OSS alternative with no licence step.        | The line is clean (typical broadband VoIP / mobile in quiet conditions) — the latency and CPU win is not worth it. |

## Notes

* The Krisp SDK is reference-counted via `KrispSDKManager`: multiple filter instances share one global init/destroy lifecycle, so you can hold one `KrispVivaFilter` per call without re-initialising the SDK each time.
* The filter expects the exact frame size: `sample_rate * frame_duration_ms / 1000` int16 samples per `process()` call. Patter's pipeline-mode audio bus already aligns to this.
* On any internal error the filter logs the failure and returns the **original** PCM unchanged so the call audio path is never broken — the VAD downstream will still receive audio even if Krisp temporarily fails.

## What's Next

<CardGroup cols={2}>
  <Card title="Agents" icon="user-gear" href="/python-sdk/agents">The `audio_filter` parameter on `phone.agent(...)`.</Card>
  <Card title="DeepFilterNet" icon="filter" href="/python-sdk/providers/deepfilternet-filter">OSS noise suppression alternative.</Card>
  <Card title="Silero VAD" icon="wave-square" href="/python-sdk/providers/silero-vad">Voice activity detection downstream of the filter.</Card>
  <Card title="Pipeline mode" icon="microphone" href="/python-sdk/stt">STT + LLM + TTS composition.</Card>
</CardGroup>
