pipecat-rtzr
Streaming Korean speech-to-text for Pipecat, using the RTZR (Return Zero) VITO WebSocket API.
Status: alpha (0.1.0). Unit and mock-server tests run without credentials. Streaming,
Finalize,EOS, token refresh and reconnect were checked against the live RTZR service on 2026-10-21 with short synthesized Korean clips (seescripts/live_check.py). Not yet tried with real telephone audio or long calls.
RTZR's sommers_ko model is tuned for Korean telephone audio (8 kHz), which makes it a good fit
for call-center voice agents.
Installation
pip install pipecat-rtzr
Prerequisites
- An RTZR account. Create a client in the RTZR Developers Console
to get a
client_idandclient_secret(new accounts include free minutes). - Set the credentials as environment variables:
export RTZR_CLIENT_ID=...
export RTZR_CLIENT_SECRET=...
Usage
from pipecat_rtzr import RTZRSTTService
stt = RTZRSTTService(
settings=RTZRSTTService.Settings(
domain="CALL",
use_punctuation=True,
keywords=[("리턴제로", 3.0), "상담원"],
),
)
pipeline = Pipeline([transport.input(), stt, user_aggregator, llm, tts, transport.output()])
See example.py for a complete bot, and
example_mock.py for a run that needs no credentials.
Behavior
- Audio is streamed as 16-bit mono PCM (
LINEAR16, 8 to 48 kHz). - Partial results become
InterimTranscriptionFrames; completed utterances becomeTranscriptionFrames. - When the VAD reports the end of speech, a
Finalizemessage closes the utterance right away (vad_force_finalize=True, the default). - The access token is cached and refreshed before it expires. A rejected handshake (HTTP 401) fetches a new token and retries once.
- Idle connections are kept alive with silent audio (RTZR closes sockets after 60 s without audio).
- On shutdown the service sends
EOSso the last utterance is flushed, and waits up toeos_flush_timeoutseconds (default 2) for its final transcript when one is still open. - If the socket drops, the service reconnects automatically. Audio of the utterance that was in progress when the socket dropped is not replayed, so that utterance is lost.
- Changing a setting at runtime reconnects the stream.
Settings
| Setting | Default | Notes |
|---|---|---|
model |
sommers_ko |
sommers_ko, sommers_ja, whisper |
language |
Language.KO |
sent only for whisper |
domain |
CALL |
CALL or MEETING |
use_itn |
True |
inverse text normalization |
use_disfluency_filter |
False |
|
use_profanity_filter |
False |
|
use_punctuation |
False |
|
keywords |
None |
up to 100 words of 20 characters; boost -5.0 to 5.0; sommers_ko only |
epd_time, noise_threshold, active_threshold |
server default | end-point and activity tuning |
Streaming concurrency is limited by your RTZR plan (5 channels on the free tier).
Development
uv venv && uv pip install -e . pytest pytest-asyncio ruff
pytest # unit tests and mock-server integration tests, no credentials needed
ruff check . && ruff format --check .
Compatibility
Tested with Pipecat 1.13.0 and Python 3.12 (Windows).
License
BSD 2-Clause.
Metadata
Release files for pipecat-rtzr 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| pipecat_rtzr-0.1.0.tar.gz | 18.6 kB | Without provenance | Details for pipecat_rtzr-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| pipecat_rtzr-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for pipecat_rtzr-0.1.0-py3-none-any.whl |
Total release size: 30.2 kB
Release files / pipecat_rtzr-0.1.0.tar.gz
| Download URL | pipecat_rtzr-0.1.0.tar.gz |
|---|---|
| Size | 18.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b18311c7b7e0216d6c58656f8ea3820d82caaf6f6defa0913ae9bd9afd38f6cf
|
|
BLAKE2b-256 checksum How to use checksums |
49d6e7382141d0b59d614834f315f71f734d39cb894269500606838108754b1d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / pipecat_rtzr-0.1.0-py3-none-any.whl
| Download URL | pipecat_rtzr-0.1.0-py3-none-any.whl |
|---|---|
| Size | 11.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b9a6ef95a8379c61329dd54cf3991686f42b0e31428e479f2915e4702b22defe
|
|
BLAKE2b-256 checksum How to use checksums |
641192bf788c27278126be66b799ecfbb9456ed1af198647de0d81a4a0805b2c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for pipecat-rtzr 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.