VSIP

02 / Developer

Two SDKs. Three adapters. No glue code.

The hard parts of a live voice session — reconnect, lookback, speak-gating, turn queueing — are in the client, not in your application.

01

Install

install
# Python 3.10+
pip install vsip-sdk            # import vsip

# Node 18+ / browsers
npm install vsip-sdk

The Python package ships type hints (py.typed); the TypeScript package ships its own declarations. Optional extras pull in the framework adapters: vsip-sdk[pipecat], vsip-sdk[livekit].

02

What the client handles for you

Reconnect & resume

Network blips do not end the session. The client reconnects and resumes the stream where it left off, without losing the identity lock.

Lookback slicing

The first words of a turn are usually the ones the VAD swallowed. The SDK keeps a rolling buffer and hands you the whole utterance.

Speak gating

The session knows when your agent is talking, so its own TTS never opens a turn or triggers a barge-in against itself.

Turn queueing

Turns that arrive while you are still generating a reply are queued, not dropped — so a fast second sentence is not lost.

Typed events

Published event schemas are typed, and both parsers tolerate unknown fields so additive server fields do not crash the client.

Profiles & analyze

The same package carries the Speaker Profile and Batch Analytics clients — one dependency, all four products.

03

Framework adapters

Each adapter is a real integration against the framework's own extension point — not a wrapper you have to babysit.

PipecatVSIPProcessor — a pipeline frame processor that emits real interruption frames
LiveKitVSIPVAD — a custom VAD implementation emitting START/END_OF_SPEECH to the agent
TwilioTwilioBridge — μ-law 8k native, and sends `clear` on barge-in so the caller is not talked over
OpenAI Realtimesidecar mode — speaker_change, speaker_verification, lock_status, and speaker_audio_ready

04

Same session, both languages

agent.ts
import { VSIPClient } from "vsip-sdk";

const client = new VSIPClient({ apiKey: process.env.VSIP_API_KEY!, mode: "full" });

client.on((event) => {
  if (event.type === "speaker_verification" && !event.should_respond) return;
  if (event.type === "barge_in") tts.stop();
});

await client.connect();

Ship in an afternoon.