SaidwireDevelopers

Integration · Pipecat

Saidwire speech-to-text for Pipecat

pipecat-saidwire is a Pipecat STT service for Wire-1, Saidwire's real-time English speech-to-text model. It streams your user's audio over a WebSocket, pushes interim transcripts while they speak and a final transcript when they stop. When your VAD decides the user has finished, the service sends Finalize and the final comes straight back, so turn-taking doesn't wait on a server-side pause.

On production Pipecat voice-agent audio in Coval's STT benchmark, Wire-1's mean time to final segment was 34 ms (30-day window to Nov 9, 2026). Overall: 50 ms p95, 1st of 29 on mean time to final segment. Source: Coval model page, 30-day window to Nov 9, 2026, 2,857 samples, US-hosted endpoint. Add your own network round trip. Method and how to reproduce.

you need
PipecatPython 3.11+, Pipecat 1.x
Saidwire API keysk_live_... from saidwire.com/dev (120 free hours, no card)

1. Install

pip install pipecat-saidwire
export SAIDWIRE_API_KEY=sk_live_...

2. Add it to your pipeline

Already have a Pipecat bot? Replace your current STT service with the stt = ... line. Nothing else changes.

from pipecat.pipeline.pipeline import Pipeline
from pipecat_saidwire import SaidwireSTTService

stt = SaidwireSTTService()  # reads SAIDWIRE_API_KEY

pipeline = Pipeline(
    [
        transport.input(),
        stt,
        user_aggregator,
        llm,
        tts,
        transport.output(),
        assistant_aggregator,
    ]
)

3. Options

stt = SaidwireSTTService(
    api_key="...",            # default: $SAIDWIRE_API_KEY
    sample_rate=None,         # default: the pipeline's input rate (8000-48000)
    settings=SaidwireSTTService.Settings(
        endpointing=None,     # server default; False = finals only from Finalize / long pauses
        interim_results=True,
        punctuate=True,
    ),
    vad_force_finalize=True,  # VADUserStoppedSpeakingFrame -> Finalize (recommended)
    warmup_timeout=300.0,
)

How it behaves in a pipeline

PipecatSaidwire
InputAudioRawFramestreamed as 16-bit PCM at the pipeline's input rate (8-48 kHz)
InterimTranscriptionFrameinterim results while the user is speaking
TranscriptionFramefinal result for an utterance; its words won't change
VADUserStoppedSpeakingFramesends Finalize; the final comes back right away
EndFramesends CloseStream, then closes
muted or idlea KeepAlive holds the stream open (silence would be billed as audio)

Dropped connections reconnect with backoff. A bad or revoked key, or used-up credit, is reported once as a permanent error, with no retry loop. stt.request_id is the ID of the current stream; include it when you contact support.

Questions

Does it work with my existing Pipecat bot?

Yes. Swap your STT service for SaidwireSTTService(); transports, LLM and TTS stay the same.

How do I get the lowest latency?

Keep vad_force_finalize=True (the default). When your VAD says the user stopped, the service sends Finalize and the final transcript returns right away instead of waiting for a server-side pause.

What does it cost?

120 free hours with no card and no deadline, up to 4 streams at once, then $0.25 per audio hour, billed per second. Muted or idle time is held open with free KeepAlive messages.

Which languages?

English only.

Questions or stuck? Email support@saidwire.com with the request ID from the failed call.

Pipecat, LiveKit, Vapi, OpenAI and the other names on this page belong to their respective owners. They are named only to describe compatibility; no partnership or endorsement is implied. Coval benchmark figures are from Coval's public model page; Coval does not endorse Saidwire.