v3.3.0 — Dashboard Audio Playback & ActiveStorage Support
What's New
Dashboard Audio Player
Speaker and Narrator execution detail pages now display an HTML5 <audio> player when audio data is available. The player shows metadata including duration, format, file size, voice, and provider — no JavaScript dependencies needed.
persist_audio_data Configuration
New opt-in setting to store TTS-generated audio as base64 data URIs in execution_details.response:
RubyLLM::Agents.configure do |config|
config.persist_audio_data = true
endDefault: false (audio binary can be 300KB–1MB+ per execution). When disabled, the player still works if audio_url is present from ActiveStorage or external storage.
Audio URL Auto-Persistence
audio_url from SpeechResult is always stored in execution details (it's just a string, no binary), enabling playback from ActiveStorage or external URLs without enabling persist_audio_data.
ActiveStorage Support for Speaker
New Speaker::ActiveStorageSupport module for attaching generated audio to ActiveStorage.
SpeechResult API Changes
audio_url,audio_key,audio_pathchanged fromattr_readertoattr_accessorfor post-creation URL assignment (e.g., after ActiveStorage upload)content_typeandmime_type_for_formatare now public methods
Full Changelog
https://github.com/adham90/ruby_llm-agents/blob/main/CHANGELOG.md
Full Changelog: v3.2.0...v3.3.0