gradio
gradio copied to clipboard
AssertionError when flagging streaming audio output
Describe the bug
I have an output audio block with streaming=True. I call yield audio chunks in my callback function. Audio playback works fine. But when I try to Flag the output with default CSVLogger(), I get following assertion.
Note that flagging works fine if I use streaming=False and feed entire audio at once.
Have you searched existing issues? 🔎
- [X] I have searched and found no existing issues
Reproduction
import gradio as gr
import numpy as np
def build_tts_ui():
with gr.Blocks() as tts_ui:
def generate_sine_tone(numsamples, sample_time, frequency):
t = np.arange(numsamples) * sample_time # Time vector
signal = 32767*np.sin(2*np.pi * frequency*t)
return signal
def text_to_speech():
count = 5
while count:
signal = generate_sine_tone(16000, 1.0/16000, 440).astype(np.int16)
count -= 1
yield (16000, signal)
synthesize_btn = gr.Button("Synthesize")
output_audio = gr.Audio(label="Synthesized Speech", autoplay=True, show_edit_button=False, interactive=False, streaming=True)
flag_btn = gr.Button("Flag")
synthesize_btn.click(text_to_speech, None, [output_audio])
tts_logger_callback = gr.CSVLogger()
tts_logger_callback.setup([output_audio], "flagged/tts")
flag_btn.click(lambda *args: tts_logger_callback.flag(args), [output_audio], None, preprocess=False, postprocess=False)
return tts_ui
demo = build_tts_ui().queue()
demo.launch(server_name="0.0.0.0", server_port=7860)
# demo.launch(server_name="0.0.0.0", server_port=7860, share=False, ssl_certfile="cert/cert.pem", ssl_keyfile="cert/key.pem", ssl_verify=False, show_api=False)
Screenshot
No response
Logs
Traceback (most recent call last):
File "/home/vkarandikar/.local/lib/python3.11/site-packages/gradio/queueing.py", line 406, in call_prediction
output = await route_utils.call_process_api(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/vkarandikar/.local/lib/python3.11/site-packages/gradio/route_utils.py", line 217, in call_process_api
output = await app.get_blocks().process_api(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/vkarandikar/.local/lib/python3.11/site-packages/gradio/blocks.py", line 1553, in process_api
result = await self.call_function(
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/vkarandikar/.local/lib/python3.11/site-packages/gradio/blocks.py", line 1191, in call_function
prediction = await anyio.to_thread.run_sync(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/vkarandikar/.local/lib/python3.11/site-packages/anyio/to_thread.py", line 33, in run_sync
return await get_asynclib().run_sync_in_worker_thread(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/vkarandikar/.local/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 877, in run_sync_in_worker_thread
return await future
^^^^^^^^^^^^
File "/home/vkarandikar/.local/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 807, in run
result = context.run(func, *args)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/vkarandikar/.local/lib/python3.11/site-packages/gradio/utils.py", line 659, in wrapper
response = f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^
File "/home/vkarandikar/work/sandbox/gradio/app/bug.py", line 27, in <lambda>
flag_btn.click(lambda *args: tts_logger_callback.flag(args), [output_audio], None, preprocess=False, postprocess=False)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/vkarandikar/.local/lib/python3.11/site-packages/gradio/flagging.py", line 174, in flag
component.deserialize(sample, save_dir=save_dir)
File "/home/vkarandikar/.local/lib/python3.11/site-packages/gradio_client/serializing.py", line 391, in deserialize
return self._deserialize_single(
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/vkarandikar/.local/lib/python3.11/site-packages/gradio_client/serializing.py", line 320, in _deserialize_single
assert x["name"] and root_url and save_dir
AssertionError
System Info
Python 3.11
Gradio 3.46.1
Severity
Blocking usage of gradio