Agno's SixtyDBTools registers two tools, get_voices and text_to_speech, against 60db's hosted speech API at https://api.60db.ai. Voices in 60db belong to a workspace, so the agent looks them up first and then speaks with one.
from agno.agent import Agent
from agno.tools.sixtydb import SixtyDBTools
# Reads SIXTYDB_API_KEY from the environment
tools = SixtyDBTools(default_voice_id="your-workspace-voice-id", speed=1.0)
agent = Agent(name="Speech Agent", tools=[tools])
response = agent.run("Use text_to_speech to say: Welcome. How can I help you today?")
wav_bytes = response.audio[0].content # mono PCM16 WAV at 24 kHzget_voices(model="quality") returns a JSON list of voice objects with voice_id, name, model, labels and description. The model argument accepts quality or fast.
text_to_speech(text, voice_id=None) takes 1 to 5,000 characters and falls back to default_voice_id when the call names no voice. On success the tool answers Audio generated and attached. and the WAV lands on the run as an Audio artifact. The toolkit checks that the audio really is mono PCM16 at 24 kHz and caps a response at 32 MiB.
Failures come back to the model as short error strings, and the log line never includes your key or the response body. Real output from the toolkit's input checks, which run before any request:
SixtyDBTools() -> ValueError: Provide api_key or SIXTYDB_API_KEY
SixtyDBTools(api_key="k").functions -> ['text_to_speech', 'get_voices']
text_to_speech("Welcome.") -> Error: provide a workspace voice_id or default_voice_id
text_to_speech("x" * 5001, voice_id="v") -> Error: text must contain 1 to 5000 characters
SixtyDBTools(api_key="k", speed=3) -> ValueError: speed must be finite and between 0.5 and 2.0timeout defaults to 60 seconds, and enable_get_voices=False or enable_text_to_speech=False leaves that tool out of the toolkit.
See the cookbook, and learn more about toolkits in the documentation.
Frequently asked questions
Set SIXTYDB_API_KEY, then pass SixtyDBTools(default_voice_id="<your voice id>") from agno.tools.sixtydb in the agent's tools. The agent can call text_to_speech, and the audio shows up in response.audio.
Call get_voices(), which returns a JSON list of the voices in your 60db workspace with voice_id, name, model, labels and description. Pass model="fast" for the fast tier; the default is quality.
It returns mono 16-bit PCM wrapped as WAV at 24,000 Hz, attached to the tool result as an Audio object with mime_type="audio/wav". The toolkit rejects compressed or mismatched audio from the API and reports an error.



