VSIP

01 / Real-time

Know who is speaking, and when to answer.

Send raw audio over a single WebSocket. Get back structured JSON events — turns, identity, interruptions, noise — in under a second, without a transcript.

01

One connection

Open /v1/stream, push audio frames, read events. There is no model to host, no GPU to rent, and no transcript in the loop — decisions arrive as JSON while the person is still in the room.

stream.py
from vsip import VSIPClient

client = VSIPClient(api_key="vsip_...")

async with client.stream(sample_rate=16000) as session:
    async for event in session:
        if event.type == "turn_end" and event.should_respond:
            reply = await my_llm(event)          # only for the right person
            await session.speak(reply)
        elif event.type == "barge_in":
            await my_tts.stop()                  # they cut in — stop talking

02

Identity-gated barge-in

Most stacks either ignore interruptions or stop for every sound. VSIP locks onto the speaker's voice in their first sentence, then only lets that voice interrupt. A television in the background, a colleague across the desk, or the agent's own TTS echo will not take the floor.

When speaker_verification fails, should_respond is false — your agent stays quiet instead of answering a stranger.

03

The events

turn_start / turn_end

Semantic endpointing decides when a person is actually finished — not when they merely paused. Mid-thought silences no longer trigger your agent.

barge_in

Fires in ~250ms when the verified speaker interrupts. Background voices and TV audio do not. The interrupting utterance is a first-class turn.

speaker_verification

A verdict on whether the current voice matches the locked identity, from the first sentence — with a confidence score you can threshold.

speaker_change

A different person took the floor. Useful for multi-party rooms and for dropping responses to whoever is not the customer.

noise_event

Classified non-speech audio — TV, music, keyboard, dog. Never reaches your LLM as a query.

lock_status

Whether the session has locked onto an identity yet, and to whom. Gate your responses on it.

04

Wire format & limits

TransportWebSocket, /v1/stream — binary audio frames up, JSON events down
Audio inPCM 16-bit (8–48kHz) or μ-law 8k native for telephony
LatencyTurn verdicts sub-second; barge-in ~250ms
Modesinline (in the audio path) or sidecar (listen-only, beside an S2S agent)
Echo cancelaec=server with a TTS reference channel, for speakerphones and kiosks
RetentionAudio is processed in memory and discarded — never written to disk

05

Works with your stack

Adapters ship for Pipecat, LiveKit and Twilio Media Streams, and the sidecar mode runs alongside speech-to-speech stacks like OpenAI Realtime that own their own audio loop. You do not have to rebuild your agent to put VSIP in front of it.

Put it in front of your agent.