The decision in one paragraph
Managed telephony noise cancellation optimizes for convenience: the provider operates the model path, metering, upgrades, and much of the reliability surface. A self-hosted component such as livekit-plugins-denoise optimizes for control: the agent team owns installation, compute, model initialization, observability, and route-specific tuning. Managed processing may be billed by usage; self-hosted processing removes a separate denoising meter from the application but does not make phone service, LiveKit infrastructure, compute, or speech models free.
Start with the signal path, not the pricing page
Noise suppression reduces background sound such as fans, traffic, and keyboard clicks. Echo cancellation reduces the agent's own output after it returns through the caller's device. Any evaluation should ask whether the service or component covers both paths, whether it receives a far-end reference, and where it runs. LiveKit's official noise and echo cancellation guide provides the platform-level context; this article focuses on the self-hosted worker decision.
For a self-hosted LiveKit agent, the package provides a TelephonyDenoiser and an EchoReferenceTap. The denoiser processes inbound frames; the tap observes outbound frames after session startup. The implementation guide explains the complete chain.
Managed versus self-hosted trade-offs
| Decision area | Managed processing | Self-hosted plugin |
|---|
| Setup | Fast integration with provider-managed model access | Add a Python dependency and wire input/output processing |
| Usage cost | Often metered as part of a managed service or per-minute feature | No separate denoising fee from this package; your infrastructure still costs money |
| Operations | Provider handles model delivery and many upgrades | Your team owns packaging, cache, CPU, rollout, and rollback |
| Route tuning | Fewer implementation details exposed | Tune enhancer, delay, and processing ownership per route |
| Observability | Provider dashboards may be available | You choose logs, metrics, traces, and retention |
| Data boundary | Audio follows the managed provider's service path | Audio is processed in your worker, subject to your infrastructure |
| Model choice | Limited to provider-supported options | Choose the package's WebRTC or DeepFilterNet3 path |
| Failure mode | Service dependency or account/configuration issue | Worker dependency, model-cache, CPU, or integration issue |
This is an architecture comparison, not a promise that one option sounds better on every call. Phone endpoints, carrier codecs, microphone placement, and delay can dominate the result.
What self-hosting actually includes
The package is intentionally narrow. It gives a LiveKit agent a reusable audio processor with independent echo cancellation and noise-suppression controls. Your team still provides:
- Worker compute, autoscaling, and health checks.
- LiveKit server or cloud infrastructure and SIP/carrier service.
- Speech-to-text, text-to-speech, turn detection, and language-model services.
- Model-cache storage and startup prewarming for the neural enhancer.
- Privacy, consent, recording, access control, and retention policies.
- Route-specific testing and a rollback path.
That distinction matters when someone says “free.” The open-source denoising code has no per-minute license charge, but a production phone call still consumes infrastructure and carrier resources.
When managed processing is the better fit
Choose managed processing when the team needs the shortest path to a working call, does not want to own model downloads, or values provider-operated upgrades and support more than low-level tuning. It can be a sensible default for a small team validating an inbound voice agent, especially when operations capacity is limited.
Ask the provider what is metered, where audio is processed, which models are available for SIP, how failures surface, and whether the service can be disabled per route. Verify current terms directly; prices and included features change.
When self-hosting is the better fit
Self-hosting is attractive when the engineering team already operates LiveKit workers, needs predictable ownership of the processing path, wants to inspect route-level metrics, or needs an MIT-licensed component that can be reviewed and changed. It is also useful when denoising must run alongside the agent rather than as a separate managed hop.
The trade is operational responsibility. You must pin versions, build the image, prewarm DeepFilterNet3 where needed, monitor CPU and frame timing, and keep a working human handoff path if audio quality degrades.
A migration path that limits risk
Do not change every phone route at once. Use a staged rollout:
- Record the current baseline: endpoint types, codec, route, residual noise, residual echo, and first-frame behavior.
- Add the package to one worker through the requirements file and log the selected enhancer and delay.
- Enable noise suppression first if echo reference wiring is not yet verified.
- Attach EchoReferenceTap after session.start() and test a controlled handset route.
- Tune stream_delay_ms one variable at a time.
- Compare interrupted speech, double-talk, speakerphone, and quiet-room calls.
- Keep the managed path available as a rollback while operators review results.
- Expand by route only after error handling, model cache, and worker capacity are understood.
The SIP echo troubleshooting guide contains the test matrix and reference-path checks.
Questions to ask before deciding
Do we need echo cancellation or only noise suppression?
If callers hear the agent's voice returning, you need an echo reference and delay tuning. If the issue is a fan or traffic, start with noise suppression. Many phone workflows need both, but they should be measured separately.
Can self-hosting guarantee better audio?
No. It gives control, not a universal quality guarantee. Quality depends on endpoint acoustics, carrier timing, sample rate, processing order, and configuration. Validate with your own routes.
Does self-hosting remove all per-minute costs?
It removes a separate denoising charge from this package. It does not remove carrier, LiveKit, compute, speech-model, storage, or support costs.
What happens if the neural model cannot load?
Plan the failure path before rollout. Prewarm during worker startup, verify cache permissions and outbound access, log initialization failures, and decide whether to fall back to the WebRTC enhancer or pass audio through according to your call-quality policy.
A practical decision rule
Use managed processing when operational simplicity and provider support dominate. Use self-hosting when control, inspectability, route-specific tuning, or an open-source dependency matters enough to justify owning the worker path. Many teams can start managed, build a baseline, and pilot self-hosting on one route without making the decision irreversible.
For broader context, compare the AI voice-agent architecture guide, the inbound voice channel, and the Botcadence voice-agent offering.