strong-air-82340
02/13/2026, 7:35 PMtall-airline-16756
02/13/2026, 7:35 PMtall-airline-16756
02/13/2026, 7:36 PMstrong-air-82340
02/13/2026, 7:37 PM01:00:35 │ ERROR │ spacy.agents.voice │ TTS node error for agent Axis Bank: no audio frames were pushed for text: I'm here to help you. Could you please tell me what assistance you need with your Axis Bank card today? (body=None, retryable=True)
Traceback (most recent call last):
File "/Users/kietsukishima/Desktop/Limechat/spacy_server/.venv/lib/python3.12/site-packages/livekit/agents/tts/tts.py", line 622, in __anext__
val = await self._event_aiter.__anext__()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
StopAsyncIteration
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/kietsukishima/Desktop/Limechat/spacy_server/app/services/agents/voice/_factory.py", line 675, in tts_node
async for frame in Agent.default.tts_node(self, adjust_pronunciation(text), model_settings):
File "/Users/kietsukishima/Desktop/Limechat/spacy_server/.venv/lib/python3.12/site-packages/livekit/agents/voice/agent.py", line 448, in tts_node
async for ev in stream:
File "/Users/kietsukishima/Desktop/Limechat/spacy_server/.venv/lib/python3.12/site-packages/livekit/agents/tts/tts.py", line 625, in __anext__
raise exc # noqa: B904
^^^^^^^^^
File "/Users/kietsukishima/Desktop/Limechat/spacy_server/.venv/lib/python3.12/site-packages/livekit/agents/tts/tts.py", line 413, in _traceable_main_task
await self._main_task()
File "/Users/kietsukishima/Desktop/Limechat/spacy_server/.venv/lib/python3.12/site-packages/livekit/agents/tts/tts.py", line 458, in _main_task
raise APIError(f"no audio frames were pushed for text: {self._pushed_text}")
livekit.agents._exceptions.APIError: no audio frames were pushed for text: I'm here to help you. Could you please tell me what assistance you need with your Axis Bank card today? (body=None, retryable=True)tall-airline-16756
02/13/2026, 7:37 PMfrom livekit.plugins import elevenlabs
import asyncio
async def test_tts():
tts = elevenlabs.TTS(model="eleven_multilingual_v2", voice_id="21m00Tcm4TlvDq8ikWAM")
stream = tts.stream()
async def input_task():
stream.push_text("Hello")
await stream.aclose_input()
async def output_task():
async for chunk in stream:
print("received chunk", type(chunk))
await asyncio.gather(input_task(), output_task())
asyncio.run(test_tts())
• What to watch for: any returned audio frames or provider-side errors; HTTP/WS error codes; 429’s (rate limit).
2) Check credentials, model and voice IDs
• Ensure your ElevenLabs API key environment variable is set (e.g., ELEVEN_API_KEY=...). A missing/invalid key can cause silent failures.
• Confirm the model and voice_id you’re using are valid for that account. Some voice IDs or custom/cloned voices are not available to free tier or via certain endpoints.
• If possible, test a well-known public voice ID (e.g., 21m00Tcm4TlvDq8ikWAM) and a common model like eleven_multilingual_v2.
3) Turn on debug logging to capture more details
• Set Python logging to DEBUG before starting the agent:
import logging
logging.basicConfig(level=logging.DEBUG)
• Look specifically for SynthesizeStream / WebSocket connection logs, push_text / flush / end_input calls, and any provider HTTP/WS response codes. Capture timestamps to correlate events.
4) Inspect for rate-limits or throttling
• Free-tier accounts commonly have stricter rate limits or concurrency caps. If ElevenLabs is throttling, you may see intermittent behavior or no frames when requests are dropped.
• Look for 429 responses or short-lived connections in debug logs. If you see none, continue isolating.
5) Validate text input and SSML
• Try a very small, plain input like "Hello" with no punctuation/emojis or SSML.
• If you use SSML, ensure enable_ssml_parsing=True (if applicable). Broken SSML or unsupported characters sometimes cause synthesis to abort with no frames.
6) Confirm AudioSource / queue sizing in the LiveKit pipeline
• The agent error indicates the TTS stream ended without any pushed frames. It can also happen if frames are produced but dropped due to small capture queue or buffer overflow.
• Ensure your AudioSource queue_size_ms is large enough (e.g., 1000–2000 ms) so frames aren’t dropped before publishing.
• Watch for “failed to capture frame” warnings in logs; they indicate downstream frame capture/publishing issues.
7) Try a controlled low-frequency run
• Send only one TTS request at a time, wait until it finishes, then send another. If the free account is being throttled under concurrency, single-request tests may succeed.
• This also helps determine whether the problem is burst/concurrency vs. per-request auth/config.
8) If standalone test returns frames but agent still fails
• Trace the agent’s tts_node flow:
◦ Confirm stream.push_text() is being called and aclose_input() is reached.
◦ Confirm the agent consumes the stream and publishes a LocalAudioTrack / calls capture_frame.
◦ Add debug prints/logging around where frames are handled/published to see if they appear and where they stop.
• Check RoomOptions — ensure audio output is enabled when starting the session (otherwise publishing may be suppressed).
What I can help you with next
• If you run the standalone test and paste the debug output (redact API keys), I’ll look for provider responses, HTTP/WS codes, or other signs of throttling.
• If standalone returns frames but the agent still fails, paste the additional debug snippets around push_text, frame handling, and any AudioSource warnings and I’ll help pinpoint the pipeline step dropping audio.
If you want, start with the standalone test result and any debug logs you get after enabling DEBUG logging — paste them here and I’ll help interpret them.
Sources: ElevenLabs TTS plugin guide | LiveKit Documentation | ElevenLabs TTS | LiveKit Documentation | Resolving "InvalidState - failed to capture frame" errors in AudioSource | ... | Text-to-speech (TTS) models overview | LiveKit Documentation | Resolving "InvalidState - failed to capture frame" errors in AudioSource