gradio-app / gradio

Build and share delightful machine learning apps, all in Python. 🌟 Star to support our work!
http://www.gradio.app
Apache License 2.0
30.73k stars 2.29k forks source link

AssertionError when flagging streaming audio output #5806

Open virajkarandikar opened 9 months ago

virajkarandikar commented 9 months ago

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? 🔎

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

virajkarandikar commented 9 months ago

Any update here?

abidlabs commented 8 months ago

Not yet, we haven't had a chance to take a look at this, but its on our radar

virajkarandikar commented 8 months ago

Any updates here?

abidlabs commented 8 months ago

Hi @virajkarandikar are you still facing this issue when you upgrade to Gradio 4.0?

abidlabs commented 8 months ago

Closing for lack of followup -- let us know if we need to reopen.

virajkarandikar commented 7 months ago

I still see error with Gradio 4.7.1 Can you please reopen this issue?

To create a public link, set `share=True` in `launch()`.
Traceback (most recent call last):
  File "/home/vkarandikar/.local/lib/python3.8/site-packages/gradio/queueing.py", line 456, in call_prediction
    output = await route_utils.call_process_api(
  File "/home/vkarandikar/.local/lib/python3.8/site-packages/gradio/route_utils.py", line 232, in call_process_api
    output = await app.get_blocks().process_api(
  File "/home/vkarandikar/.local/lib/python3.8/site-packages/gradio/blocks.py", line 1522, in process_api
    result = await self.call_function(
  File "/home/vkarandikar/.local/lib/python3.8/site-packages/gradio/blocks.py", line 1144, in call_function
    prediction = await anyio.to_thread.run_sync(
  File "/home/vkarandikar/.local/lib/python3.8/site-packages/anyio/to_thread.py", line 31, in run_sync
    return await get_asynclib().run_sync_in_worker_thread(
  File "/home/vkarandikar/.local/lib/python3.8/site-packages/anyio/_backends/_asyncio.py", line 937, in run_sync_in_worker_thread
    return await future
  File "/home/vkarandikar/.local/lib/python3.8/site-packages/anyio/_backends/_asyncio.py", line 867, in run
    result = context.run(func, *args)
  File "/home/vkarandikar/.local/lib/python3.8/site-packages/gradio/utils.py", line 674, in wrapper
    response = f(*args, **kwargs)
  File "audio_issue.py", line 26, 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.8/site-packages/gradio/flagging.py", line 173, in flag
    component.flag(sample, flag_dir=save_dir)
  File "/home/vkarandikar/.local/lib/python3.8/site-packages/gradio/components/base.py", line 266, in flag
    return payload.copy_to_dir(flag_dir).model_dump_json()
  File "/home/vkarandikar/.local/lib/python3.8/site-packages/gradio/data_classes.py", line 94, in copy_to_dir
    x=traverse(
  File "/home/vkarandikar/.local/lib/python3.8/site-packages/gradio_client/utils.py", line 773, in traverse
    return func(json_obj)
  File "/home/vkarandikar/.local/lib/python3.8/site-packages/gradio/data_classes.py", line 89, in unique_copy
    return data._copy_to_dir(
  File "/home/vkarandikar/.local/lib/python3.8/site-packages/gradio/data_classes.py", line 151, in _copy_to_dir
    new_name = shutil.copy(self.path, dir)
  File "/usr/lib/python3.8/shutil.py", line 418, in copy
    copyfile(src, dst, follow_symlinks=follow_symlinks)
  File "/usr/lib/python3.8/shutil.py", line 264, in copyfile
    with open(src, 'rb') as fsrc, open(dst, 'wb') as fdst:
FileNotFoundError: [Errno 2] No such file or directory: '1qmiews653w/139887788603568/2'
abidlabs commented 7 months ago

Ok I'll go ahead and open this again