Server-side Python SDK for Vox-hosted WebRTC sessions.
Project description
vox-rtc-server
Trusted Python SDK for Vox-hosted WebRTC conversations. It creates sessions over HTTP and controls them over PondSocket.
Install
pip install vox-rtc-server
Pass api_key=... or set VOX_API_KEY.
PondSocket session
import asyncio
import os
from vox_rtc_server import ClientEventEnvelope, SessionConfig, VoxRtcServerClient
async def main() -> None:
client = VoxRtcServerClient(
http_base="http://vox-service.vox.svc.cluster.local:11435",
api_key=os.environ.get("VOX_API_KEY"),
)
bootstrap, session = await client.create_controlled_session()
session.on_transcript(lambda event: print("user said:", event.transcript))
session.on_browser_event(lambda event: print(event.event, event.payload))
session.configure(SessionConfig(
stt_model="parakeet-stt:tdt-0.6b-v3",
tts_model="kokoro-tts:v1.0",
voice="af_heart",
turn_profile="browser_default",
))
session.send_text_response("Hello from Python.")
session.send_client_event(ClientEventEnvelope(event="render.ready", payload=True))
print("session:", bootstrap.session_id)
asyncio.run(main())
Acknowledged response starts
start_response stays fire-and-forget. When you want the positive
acknowledgement before pumping deltas, use start_response_and_wait, which
correlates the response.created event (or the typed error) with the
generation_id it sent:
ack = await session.start_response_and_wait()
if ack.accepted:
session.append_response_text("Hello.")
session.commit_response()
else:
print("start rejected:", ack.error.code if ack.error else None)
You can also thread your own generation id through every response command via
ResponseOptions(generation_id="gen-42"); response lifecycle events
(ResponseEvent, InterruptionEvent) expose the echoed generation_id.
Error handling
ErrorEvent carries code (stable slug), recoverable, and an optional
generation_id scoping the failure to one response generation. Known codes are
exported as ERROR_CODE_* constants (response_rejected_turn_state,
response_rejected_user_speech, response_stale_generation,
response_already_active, response_failed, command_invalid,
session_failed).
Only recoverable is False (or the transport itself closing) should end the
call. Recoverable errors are per-command failures: handle them and keep the
session running. Old Vox servers omit code and recoverable; the SDK then
defaults recoverable to True, so treat such errors as recoverable unless
the transport closed.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file vox_rtc_server-0.2.1.tar.gz.
File metadata
- Download URL: vox_rtc_server-0.2.1.tar.gz
- Upload date:
- Size: 42.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3fa640a1d8393c0373788b9444d13f4ef6537cd9add595700ce3c59082bb2316
|
|
| MD5 |
ba1405a1d3b45c931f9f14534370d252
|
|
| BLAKE2b-256 |
f2489e91f31714a52c3a6a742bf4d631ea4a81e32dd98998025bb755e070332a
|
File details
Details for the file vox_rtc_server-0.2.1-py3-none-any.whl.
File metadata
- Download URL: vox_rtc_server-0.2.1-py3-none-any.whl
- Upload date:
- Size: 10.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d2763b3b8df91041b20851cf5bf072d897fa70281d28eafdbf924c2911d89594
|
|
| MD5 |
bac6813b9a9c24f05abee07da849de16
|
|
| BLAKE2b-256 |
10bc8e13d9f427b7a7cc9ab150804f6065505f0b97dfb603d4eeee6183b9adf4
|