ripe-jordan-93499
04/04/2026, 7:51 AMtall-airline-16756
04/04/2026, 7:52 AMtall-airline-16756
04/04/2026, 7:52 AMripe-jordan-93499
04/04/2026, 7:52 AMtall-airline-16756
04/04/2026, 7:52 AMkrisp_enabled flag; disable Krisp if you’re using agent‑side noise cancellation to avoid double processing.
If you want, tell me which SDK/language and participant types you’re using (WebRTC, SIP, or both) and I’ll show the exact code snippet to enable the right model.
Sources: Choosing the right noise cancellation for your agent | LiveKit | Agents telephony integration | LiveKit Documentation | LiveKit Platform | Build, run, and observe voice AI agents | LiveKit | Sequential Pipeline Architecture for Voice Agents | LiveKit | Google AI and LiveKit | LiveKit Documentation, with interactive elementsripe-jordan-93499
04/04/2026, 7:57 AM- SDK: Python livekit-agents (v1.2.9+) + livekit-api + livekit-rtc
- Agent: AgentSession / WorkerOptions based voice pipeline agent (named "exotel-voice-agent")
- Participants: SIP (inbound trunks from Exotel) + WebRTC (room connections with published audio tracks)tall-airline-16756
04/04/2026, 7:57 AMBVC() for full‑bandwidth WebRTC participants.
• Use BVCTelephony() for SIP (8 kHz telephony) participants.
• Don’t apply multiple cancellers (or cloud Krisp) at the same time — disable Krisp for trunks if using agent‑side cancellation.
• These run locally and add minimal latency.
Example (Python, within your Agent/Worker pipeline)
from livekit_agents import noise_cancellation, rtc, pipeline
def select_noise_filter(participant):
# participant.kind is an rtc.ParticipantKind
if participant.kind == rtc.ParticipantKind.PARTICIPANT_KIND_SIP:
return noise_cancellation.BVCTelephony()
else:
return noise_cancellation.BVC()
class MyVoiceAgent(pipeline.Agent):
async def on_participant_join(self, participant):
# choose filter based on participant type
filter = select_noise_filter(participant)
# attach filter to the participant's audio processing chain
# (example API — adapt to your pipeline setup)
participant.audio_pipeline.add_filter(filter)
# optional: log or store which filter was applied
print(f"Applied {filter.__class__.__name__} to participant {participant.sid}")
# rest of agent implementation...
Configuration tips
• If you have SIP trunks with LiveKit Cloud and krisp_enabled set, turn that off when using agent-side BVC/BVCTelephony to avoid double-processing.
• Test with representative audio (typing, multi-speaker background) and compare STT results with and without the filter to confirm gain in accuracy.
• If you route both SIP and WebRTC into a single pipeline, ensure you branch per participant kind early so the right filter is used.
If you’d like, I can:
• Give an exact snippet matching your AgentSession / WorkerOptions APIs (share the relevant pipeline code or how you currently attach plugins), or
• Suggest test cases and metrics to validate improvements (e.g., WER, EOU detection latency)., with interactive elementsripe-jordan-93499
04/07/2026, 2:54 PMtall-airline-16756
04/07/2026, 2:54 PMfrom livekit_agents import noise_cancellation, rtc
def select_noise_filter(participant):
if participant.kind == rtc.ParticipantKind.PARTICIPANT_KIND_SIP:
return noise_cancellation.BVCTelephony()
else:
return noise_cancellation.BVC()
Best practices
• Apply the filter per participant as early as possible in your pipeline.
• Test with representative 8 kHz recordings (background typing, multi‑speaker rooms) and measure STT quality and latency.
• Don’t run multiple cancellers simultaneously; one appropriate filter per stream is best.
If you want, share how you attach filters in your AgentSession/WorkerOptions and I’ll provide the exact snippet to insert BVCTelephony into your pipeline.
, with interactive elementsripe-jordan-93499
04/07/2026, 2:58 PMtall-airline-16756
04/07/2026, 2:58 PMBVCTelephony() is limited to self‑hosted setups.
No — BVCTelephony() is not cloud‑only or self‑hosted‑only. It’s a telephony‑optimized noise cancellation model intended for 8 kHz SIP/telephony audio and runs locally on the agent regardless of deployment (self‑hosted agent or an agent running in LiveKit Cloud). Use BVCTelephony() for narrowband SIP streams and BVC() for full‑band WebRTC streams, and avoid running multiple cancellers (or Krisp) on the same stream to prevent double‑processing.
, with interactive elements