packethushRequest access

For voice-AI agents

Your agent hears the caller, not the room.

Calls come from busy homes, shops and streets. packethush removes the other voices before your VAD and speech recognition hear them.

What your LLM receives.

A Hindi caller at home, with a second voice across the room as loud as he is, transcribed by Deepgram nova-3. Struck out: the other voice's words.

without packethush

Ma'amमुझेआपकेhotelमेंroombookकरनाथा.यहांभेजनाहै.Ma'amहमदोसेतीनलोगहैं.आपमुझेroomकेबारेमेंजानकारीदेसकतेहैं?सबphoneएकएकkiloसबphoneहै.Ma'amआपकाhotelहै.Restaurantहैयाहमेंबाहरसेखानाorderकरनापड़ेगा?

with packethush

Ma'am,मुझेआपकेhotelमेंroombookकरनाथा.Ma'am,दोसेतीनलोगहैं.आपमुझेroomकेबारेमेंजानकारीदेसकतेहैं?आपकाhotelहै,restaurantहैयाहमेंबाहरसेखानाorderकरनापड़ेगा?

Three ways a second voice breaks a voice agent.

  1. Words from someone else

    The recogniser writes down everyone in the room, and your LLM acts on it.

    64% fewer

    words the caller never said: 17.9 → 6.5 per call · 95% CI 61–67% · 1,152 Hindi test calls

  2. False barge-ins

    A background voice sounds like the caller interrupting. Your agent stops mid-sentence.

    Other voice: flagged

    its own event, apart from the caller's

  3. Turn-taking

    Noise blurs when the caller starts and stops. Your agent cuts in early or waits too long.

    99.8% right, when sure

    “caller speaking” every 20 ms, calibrated · sure on 58% of frames

In your pipeline, before VAD.

One session per call leg. Every packet in, the same length out, cleaned, with events.

  1. 1when your agent starts: open the engine
  2. 2when a call connects: open its session
  3. 3each packet: the caller's audio back, 12 ms later
  4. 4caller started: stop talking (barge-in)
  5. 5caller stopped: take the turn
  • Python · Go · Rust · C
  • any chunk size
  • 8 or 16 kHz
agent.pyPython
import packethush

engine = packethush.Engine()
call = engine.session(sample_rate=8000)

def on_packet(pcm16: bytes) -> bytes:  # every packet from your telephony
    clean = call.process(pcm16)
    for e in call.events():
        if e.type == "caller_started":
            agent.stop_speaking()
        elif e.type == "caller_stopped":
            agent.take_turn()
    return clean  # on to your VAD and speech recognition

Prove it on your own calls.

1

Run your recorded calls through the evaluation kit.

2

Both versions go through your speech engine: word errors, with 95% intervals.

3

A paced load test: how many calls your servers carry.

Try it on your agent's calls.

A trial licence and the evaluation kit: word errors before and after, with your own speech engine.

Request access