Zrb extras
zrb-extras is a pypi package.
You can install zrb-extras by invoking the following command:
pip install zrb-extras
pip install "zrb-extras[pyttsx3]" # or [youtube], [all]
Let your LLM task speak
create_speak_tool gives the agent a tool that says text aloud. The agent decides what to say and when, which suits an LLMTask that runs unattended ("the build finished") or a persona that should talk rather than print.
Talking to zrb is built into zrb itself since 3.10: /voice and /handsfree dictate, and hands-free can answer tool approvals. zrb can also read every reply aloud (ZRB_LLM_SPEECH_ENABLED=on). See zrb's Voice and Camera guide. The listen tool that used to live here was removed in zrb-extras 3.1.0 for that reason, and since 4.0.0 speak runs on zrb's speech backends instead of its own OpenAI, Gemini, Termux and pyttsx3 clients.
Use the
speaktool or zrb's built-in speech, not both, or replies are said twice.
Or: a pyttsx3 voice for zrb's built-in speech
zrb reads replies aloud with Termux:API (on Android), say, espeak-ng, OpenAI or Gemini. zrb-extras adds Pyttsx3SpeechBackend: offline, in process, extra [pyttsx3]. If it fails, zrb's local engine speaks instead.
from zrb.builtin import llm_chat
from zrb.llm.speech import SpeechConfig, enable_speech
from zrb_extras.llm.speech import Pyttsx3SpeechBackend
enable_speech(
llm_chat,
SpeechConfig(backend=Pyttsx3SpeechBackend(rate=150), enabled=True),
)
Calling enable_speech again replaces the built-in call, so there is still one speaker and one /speech command.
Prerequisites
Termux
First of all, make sure termux has permission to access the speaker
pkg update && pkg upgrade -y
pkg install pulseaudio termux-api -y
Run the following script or add it to ~/.bashrc
# start PulseAudio daemon
pulseaudio --start --load="module-native-protocol-tcp auth-ip-acl=127.0.0.1 auth-anonymous=1" --exit-idle-time=-1
# Start proot-distro
proot-distro login ubuntu
Proot-distro (Ubuntu)
apt install libasound2-dev portaudio19-dev pulseaudio
Create zrb_init.py
create_speak_tool takes zrb's SpeechConfig, so it speaks through the same backends as zrb's built-in speech: auto (Termux:API, say or espeak-ng), openai, gemini, a Pipecat voice like kokoro (needs zrb[voice]), or a backend object such as Pyttsx3SpeechBackend. Fields left out are read from ZRB_LLM_SPEECH_*.
from zrb.builtin import llm_chat
from zrb.llm.speech import SpeechConfig
from zrb.llm.tool_call.tool_policy.auto_approve import auto_approve
from zrb_extras.llm.tool import create_speak_tool
llm_chat.append_tool(
create_speak_tool(SpeechConfig(backend="openai", voice="alloy"))
)
llm_chat.prepend_tool_policy(auto_approve("speak"))
The agent can pick a voice_name and an instruction ("cheerful", "whisper") on each call. OpenAI's gpt-4o-mini-tts and Gemini follow the instruction; a backend passed as an object ignores both.
fetch_youtube_transcript (extra [youtube]) is another tool in the same package: llm_chat.append_tool(fetch_youtube_transcript).
pyttsx3 voices
pyttsx3 uses your system's TTS engine (espeak/espeak-ng on Linux; sudo apt install espeak-ng for better voices).
from zrb_extras.llm.speech import Pyttsx3SpeechBackend
from zrb_extras.llm.speech.backend.pyttsx3 import list_available_voices
for voice in list_available_voices():
print(f"{voice['id']}: {voice['name']}")
create_speak_tool(
SpeechConfig(backend=Pyttsx3SpeechBackend(voice_name="english-us+m3", rate=150, volume=0.9))
)
For maintainers
Publish to pypi
To publish zrb-extras, you need to have a Pypi account:
- Log in or register to https://pypi.org/
- Create an API token
You can also create a TestPypi account:
- Log in or register to https://test.pypi.org/
- Create an API token
Once you have your API token, you need to configure poetry:
poetry config pypi-token.pypi <your-api-token>
To publish zrb-extras, you can do the following command:
poetry publish --build
Updating version
You can update zrb-extras version by modifying the following section in pyproject.toml:
[project]
version = "0.0.2"
Adding dependencies
To add zrb-extras dependencies, you can edit the following section in pyproject.toml:
[project]
dependencies = [
"Jinja2==3.1.2",
"jsons==1.6.3"
]
Adding script
To make zrb-extras executable, you can edit the following section in pyproject.toml:
[project-scripts]
zrb-extras-hello = "zrb_extras.__main__:hello"
Now, whenever you run zrb-extras-hello, the main function on your __main__.py will be executed.
Metadata
Release files for zrb-extras 4.0.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 | |
|---|---|---|---|
| zrb_extras-4.0.0.tar.gz | 6.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| zrb_extras-4.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 14.3 kB
Release files / zrb_extras-4.0.0.tar.gz
| Download URL | zrb_extras-4.0.0.tar.gz |
|---|---|
| Size | 6.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fac319f1dc9f8ac206e34e715becc847af483664365b33c7d8bf080a8b4a11f7
|
|
BLAKE2b-256 checksum How to use checksums |
e2b198a60bf697e5e60c46ff05ab5dc10039447b169a12a9fd12b45884d705de
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.3.3 CPython/3.14.0 Linux/5.15.153.1-microsoft-standard-WSL2+
|
Release files / zrb_extras-4.0.0-py3-none-any.whl
| Download URL | zrb_extras-4.0.0-py3-none-any.whl |
|---|---|
| Size | 8.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
709059ee29a59798e59c75ebb0b293b8762c2a7a1bce1b39c0031fff38a23b32
|
|
BLAKE2b-256 checksum How to use checksums |
8df5b5f7f8223eb1a3a4fd21c3527defccb13134f5fc5a163f5149dae3d6b3e1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.3.3 CPython/3.14.0 Linux/5.15.153.1-microsoft-standard-WSL2+
|