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

Every event is a typed object in both languages, and the parser tolerates unknown fields so a server-side addition never crashes your 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 — listen-only beside the S2S loop, for identity and noise verdicts

04

Same session, both languages

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

const client = new VSIPClient({ apiKey: process.env.VSIP_KEY! });
const session = await client.stream({ sampleRate: 16000 });

session.on("turn_end", async (e) => {
  if (!e.should_respond) return;        // not the verified speaker
  await tts.speak(await llm(e));
});

session.on("barge_in", () => tts.stop());

Ship in an afternoon.