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

RuntimeError: Response content shorter than Content-Length #8351

Closed shaojun closed 1 month ago

shaojun commented 1 month ago

Describe the bug

using Windows 11, miniconda with gradio==4.31.3, has HTTPS and HTTP proxy set by Clash: image

When i done the audio recording by click stop button, the error: RuntimeError: Response content shorter than Content-Length occured, while the function still working as expected with the translated text can output to text box.

Have you searched existing issues? 🔎

Reproduction

import numpy as np
import os
import sys
import time
from typing import Union, Literal
from langchain import hub
from langchain.agents import AgentExecutor, create_tool_calling_agent
import gradio as gr
import tempfile
from langchain_core.tools import tool
from openai import OpenAI
from langchain_openai import ChatOpenAI
import model_builder
import datetime

def chat(audio_file_path):
    try:
        assert audio_file_path is not None
        assert os.path.exists(audio_file_path)
        print(
            f"{datetime.datetime.now()} - will turn audio file: {audio_file_path} to text...")
        audio_file_path = open(audio_file_path, "rb")
        client = OpenAI(api_key=model_builder.OPENAI_API_KEY)
        transcriptions = client.audio.transcriptions.create(
            model="whisper-1",
            file=audio_file_path,
            response_format="text",
        )

        return transcriptions
    except Exception as error:
        print(str(error))
        raise gr.Error(
            "An error occurred while generating speech. Please check your API key and come back try again"
        )

# demo = gr.Interface(
#     chat,
#     ["state", gr.Audio(sources=["microphone"], type="filepath", format="mp3",
#                        label="Speech Input")],
#     ["state", gr.Text(label="Speech Output Text")],
# )

# demo.launch()
with gr.Blocks() as demo:
    with gr.Row():
        input_audio = gr.Audio(sources=["microphone"], label="Speech Input",
                               type="filepath", streaming=False)
        # output_audio = gr.Audio(label="Speech Output", autoplay=True)
        # file = gr.UploadButton(
        #     file_types=[".mp3", ".wav"], label="Select File", type="filepath")
        llm_output_text = gr.Text(label="LLM Text Output")
    # btn = gr.Button("Speech-To-Text")
    input_audio.stop_recording(fn=chat, inputs=[
                               input_audio], outputs=[ llm_output_text], api_name=False)

demo.launch()

Screenshot

No response

Logs

Running on local URL:  http://127.0.0.1:7860

To create a public link, set `share=True` in `launch()`.
ERROR:    Exception in ASGI application
Traceback (most recent call last):
  File "c:\Users\music\miniconda3\envs\roboctrl\Lib\site-packages\uvicorn\protocols\http\httptools_impl.py", line 411, in run_asgi 
    result = await app(  # type: ignore[func-returns-value]
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\Users\music\miniconda3\envs\roboctrl\Lib\site-packages\uvicorn\middleware\proxy_headers.py", line 69, in __call__       
    return await self.app(scope, receive, send)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\Users\music\miniconda3\envs\roboctrl\Lib\site-packages\fastapi\applications.py", line 1054, in __call__
    await super().__call__(scope, receive, send)
  File "c:\Users\music\miniconda3\envs\roboctrl\Lib\site-packages\starlette\applications.py", line 123, in __call__
    await self.middleware_stack(scope, receive, send)
  File "c:\Users\music\miniconda3\envs\roboctrl\Lib\site-packages\starlette\middleware\errors.py", line 186, in __call__
    raise exc
  File "c:\Users\music\miniconda3\envs\roboctrl\Lib\site-packages\starlette\middleware\errors.py", line 164, in __call__
    await self.app(scope, receive, _send)
  File "c:\Users\music\miniconda3\envs\roboctrl\Lib\site-packages\gradio\route_utils.py", line 707, in __call__
    await self.app(scope, receive, send)
  File "c:\Users\music\miniconda3\envs\roboctrl\Lib\site-packages\starlette\middleware\exceptions.py", line 65, in __call__        
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "c:\Users\music\miniconda3\envs\roboctrl\Lib\site-packages\starlette\_exception_handler.py", line 64, in wrapped_app        
    raise exc
  File "c:\Users\music\miniconda3\envs\roboctrl\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app        
    await app(scope, receive, sender)
  File "c:\Users\music\miniconda3\envs\roboctrl\Lib\site-packages\starlette\routing.py", line 756, in __call__
    await self.middleware_stack(scope, receive, send)
  File "c:\Users\music\miniconda3\envs\roboctrl\Lib\site-packages\starlette\routing.py", line 776, in app
    await route.handle(scope, receive, send)
  File "c:\Users\music\miniconda3\envs\roboctrl\Lib\site-packages\starlette\routing.py", line 297, in handle
    await self.app(scope, receive, send)
  File "c:\Users\music\miniconda3\envs\roboctrl\Lib\site-packages\starlette\routing.py", line 77, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "c:\Users\music\miniconda3\envs\roboctrl\Lib\site-packages\starlette\_exception_handler.py", line 64, in wrapped_app        
    raise exc
  File "c:\Users\music\miniconda3\envs\roboctrl\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app        
    await app(scope, receive, sender)
  File "c:\Users\music\miniconda3\envs\roboctrl\Lib\site-packages\starlette\routing.py", line 75, in app
    await response(scope, receive, send)
  File "c:\Users\music\miniconda3\envs\roboctrl\Lib\site-packages\starlette\responses.py", line 352, in __call__
    await send(
  File "c:\Users\music\miniconda3\envs\roboctrl\Lib\site-packages\starlette\_exception_handler.py", line 50, in sender
    await send(message)
  File "c:\Users\music\miniconda3\envs\roboctrl\Lib\site-packages\starlette\_exception_handler.py", line 50, in sender
    await send(message)
  File "c:\Users\music\miniconda3\envs\roboctrl\Lib\site-packages\starlette\middleware\errors.py", line 161, in _send
    await send(message)
  File "c:\Users\music\miniconda3\envs\roboctrl\Lib\site-packages\uvicorn\protocols\http\httptools_impl.py", line 549, in send     
    raise RuntimeError("Response content shorter than Content-Length")
RuntimeError: Response content shorter than Content-Length
2024-05-22 11:46:27.548186 - will turn audio file: C:\Users\music\AppData\Local\Temp\gradio\1d58de035c71137c9e960cce3dc34b77c4d14a86\audio.wav to text...

System Info

using Windows 11, miniconda with `gradio==4.31.3`, has HTTPS and HTTP proxy set by Clash

Severity

Not Blocking usage of gradio

abidlabs commented 1 month ago

Does this error only appear if you set the proxy?

abidlabs commented 1 month ago

Going to close for lack of followup, we can reopen with more details.