modelscope / modelscope-studio

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

gradio 4.28 -> 4.29 raise error

JemicyChu opened this issue · comments

versioin:
gradio 4.29
modelscope_studio 0.3.0

4.28所有操作均正常,升级到4.29及以上时,会chatbot失效

error information:
Traceback (most recent call last):
File "D:\Users\11154380\PycharmProjects\GuiAutomator\venv\lib\site-packages\gradio\queueing.py", line 527, in process_events
response = await route_utils.call_process_api(
File "D:\Users\11154380\PycharmProjects\GuiAutomator\venv\lib\site-packages\gradio\route_utils.py", line 270, in call_process_api
output = await app.get_blocks().process_api(
File "D:\Users\11154380\PycharmProjects\GuiAutomator\venv\lib\site-packages\gradio\blocks.py", line 1843, in process_api
inputs = await self.preprocess_data(
File "D:\Users\11154380\PycharmProjects\GuiAutomator\venv\lib\site-packages\gradio\blocks.py", line 1575, in preprocess_data
inputs_cached = block.data_model(**inputs_cached) # type: ignore
File "D:\Users\11154380\PycharmProjects\GuiAutomator\venv\lib\site-packages\pydantic\main.py", line 171, in init
self.pydantic_validator.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for MultimodalInputData
text
Field required [type=missing, input_value={'path': 'D:\Users\1115...pe': 'gradio.FileData'}}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.6/v/missing

能提供一下代码示例吗,看报错信息应该是传入 MultimodalInput 的值校验失败导致的

import gradio as gr
import modelscope_studio as mgr
import os
from gradio_ui.command import CommandFactory # my file

conversation = [
    [
        None,
        {
            "text": """hello""",
            "flushing": False
        }
    ],
] 
def single_case_transformer():
  run_type = gr.Radio(label="测试类型", choices=["Android", "Html", "Hybrid"], interactive=False)
  run_env = gr.Radio(label="测试环境", choices=["测试", "预发", "线上"], interactive=False)     
  single_case_chatbot = mgr.Chatbot(
            label="Playground",
            value=conversation,
            avatar_images=[
                {"name": "User", "avatar": os.path.join(os.path.dirname(__file__), "../resource/img/user.jpg")},
                {"name": "Runner", "avatar": os.path.join(os.path.dirname(__file__), "../resource/img/bot.png")}
            ],
            height=600,
            show_copy_button=True,
            flushing_speed=8
        )
        user_input = mgr.MultimodalInput()
        
  user_input.submit(fn=dialogue_processing, inputs=[user_input,
                                                            single_case_chatbot,
                                                            run_env,
                                                            run_type,
  # more Components
  ],outputs=[user_input, single_case_chatbot], concurrency_limit=10)

async def dialogue_processing(_input, _chatbot, *args):
    _chatbot.append([_input, None])
    yield gr.update(interactive=False, value=None), _chatbot
    _command = CommandFactory.get_command(_input.text)
    params = {
        "user_input": _input.text,
        "files": _input.files,
        "params": [*args]
    }

    try:
        response = await _command.execute(params)
        _log.info(response)
    except (RuntimeError, ValueError) as e:
        gr.Warning(e.args[0])
        _chatbot[-1][-1] = {'text': e.args[0]}
        yield gr.update(interactive=True, value=None), _chatbot
        return
    yield gr.update(interactive=True, value=None), _chatbot

@Col0ring simple example

是 launch 时就报错吗,我调整了下示例代码来保证能正常运行,gradio 版本为 4.29.0,目前并没有复现上述情况,可以看看是否有某些缓存值的影响:

import os

import gradio as gr
import modelscope_studio as mgr

conversation = [
    [None, {
        "text": """hello""",
        "flushing": False
    }],
]


async def dialogue_processing(_input, _chatbot, *args):
    _chatbot.append([_input, None])
    yield gr.update(interactive=False, value=None), _chatbot
    params = {
        "user_input": _input.text,
        "files": _input.files,
        "params": [*args]
    }

    yield gr.update(interactive=True, value=None), _chatbot


with gr.Blocks() as demo:
    run_type = gr.Radio(label="测试类型",
                        choices=["Android", "Html", "Hybrid"],
                        interactive=False)
    run_env = gr.Radio(label="测试环境",
                       choices=["测试", "预发", "线上"],
                       interactive=False)
    single_case_chatbot = mgr.Chatbot(
        label="Playground",
        value=conversation,
        avatar_images=[{
            "name":
            "User",
            "avatar":
            os.path.join(os.path.dirname(__file__), "../resource/img/user.jpg")
        }, {
            "name":
            "Runner",
            "avatar":
            os.path.join(os.path.dirname(__file__), "../resource/img/bot.png")
        }],
        height=600,
        show_copy_button=True,
        flushing_speed=8)
    user_input = mgr.MultimodalInput()

    user_input.submit(
        fn=dialogue_processing,
        inputs=[
            user_input,
            single_case_chatbot,
            run_env,
            run_type,
            # more Components
        ],
        outputs=[user_input, single_case_chatbot],
        concurrency_limit=10)

demo.launch()

根据Field required [type=missing, input_value={'path': 'D:\Users\1115...pe': 'gradio.FileData'}}, input_type=dict]这段报错,可能你给 MultimodalInput 传入了一个 FileData 的 dict 对象,导致参数有误,当传入 dict 时,text 字段是必填的,应该改为 {"text":"", "files": [{'path': 'D:\Users\1115...pe': 'gradio.FileData'}}]}

我在复制你的脚本,同时新开了工程,只安装了两个库
pip install gradio==4.29.0
pip install modelscope-studio==0.3.0

在进入页面时就已经报错:

我怀疑可能和平台及版本相关

  • Windows平台
  • python 3.10
    这是gradio的更新日志,我不确定里面的修改内容是否造成了一定的影响:https://www.gradio.app/changelog#4-29-0
    D:\Users\11154380\PycharmProjects\pythonProject\venv\Scripts\python.exe D:\Users\11154380\PycharmProjects\pythonProject\main.py
    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 "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\uvicorn\protocols\http\httptools_impl.py", line 399, in run_asgi
result = await app( # type: ignore[func-returns-value]
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\uvicorn\middleware\proxy_headers.py", line 70, in call
return await self.app(scope, receive, send)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\fastapi\applications.py", line 1054, in call
await super().call(scope, receive, send)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\starlette\applications.py", line 123, in call
await self.middleware_stack(scope, receive, send)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\starlette\middleware\errors.py", line 186, in call
raise exc
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\starlette\middleware\errors.py", line 164, in call
await self.app(scope, receive, _send)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\gradio\route_utils.py", line 713, in call
await self.simple_response(scope, receive, send, request_headers=headers)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\gradio\route_utils.py", line 729, in simple_response
await self.app(scope, receive, send)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\starlette\middleware\exceptions.py", line 65, in call
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\starlette_exception_handler.py", line 64, in wrapped_app
raise exc
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\starlette_exception_handler.py", line 53, in wrapped_app
await app(scope, receive, sender)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\starlette\routing.py", line 756, in call
await self.middleware_stack(scope, receive, send)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\starlette\routing.py", line 776, in app
await route.handle(scope, receive, send)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\starlette\routing.py", line 297, in handle
await self.app(scope, receive, send)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\starlette\routing.py", line 77, in app
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\starlette_exception_handler.py", line 64, in wrapped_app
raise exc
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\starlette_exception_handler.py", line 53, in wrapped_app
await app(scope, receive, sender)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\starlette\routing.py", line 72, in app
response = await func(request)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\fastapi\routing.py", line 278, in app
raw_response = await run_endpoint_function(
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\fastapi\routing.py", line 193, in run_endpoint_function
return await run_in_threadpool(dependant.call, **values)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\starlette\concurrency.py", line 42, in run_in_threadpool
return await anyio.to_thread.run_sync(func, *args)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\anyio\to_thread.py", line 56, in run_sync
return await get_async_backend().run_sync_in_worker_thread(
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\anyio_backends_asyncio.py", line 2177, in run_sync_in_worker_thread
return await future
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\anyio_backends_asyncio.py", line 859, in run
result = context.run(func, *args)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\gradio\routes.py", line 468, in custom_component_path
Path(path).read_text().encode()
File "D:\Users\11154380\AppData\Local\Programs\Python\Python310\lib\pathlib.py", line 1135, in read_text
return f.read()
UnicodeDecodeError: 'gbk' codec can't decode byte 0x93 in position 886707: illegal multibyte sequence
ERROR: Exception in ASGI application
Traceback (most recent call last):
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\uvicorn\protocols\http\httptools_impl.py", line 399, in run_asgi
result = await app( # type: ignore[func-returns-value]
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\uvicorn\middleware\proxy_headers.py", line 70, in call
return await self.app(scope, receive, send)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\fastapi\applications.py", line 1054, in call
await super().call(scope, receive, send)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\starlette\applications.py", line 123, in call
await self.middleware_stack(scope, receive, send)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\starlette\middleware\errors.py", line 186, in call
raise exc
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\starlette\middleware\errors.py", line 164, in call
await self.app(scope, receive, _send)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\gradio\route_utils.py", line 713, in call
await self.simple_response(scope, receive, send, request_headers=headers)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\gradio\route_utils.py", line 729, in simple_response
await self.app(scope, receive, send)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\starlette\middleware\exceptions.py", line 65, in call
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\starlette_exception_handler.py", line 64, in wrapped_app
raise exc
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\starlette_exception_handler.py", line 53, in wrapped_app
await app(scope, receive, sender)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\starlette\routing.py", line 756, in call
await self.middleware_stack(scope, receive, send)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\starlette\routing.py", line 776, in app
await route.handle(scope, receive, send)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\starlette\routing.py", line 297, in handle
await self.app(scope, receive, send)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\starlette\routing.py", line 77, in app
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\starlette_exception_handler.py", line 64, in wrapped_app
raise exc
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\starlette_exception_handler.py", line 53, in wrapped_app
await app(scope, receive, sender)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\starlette\routing.py", line 72, in app
response = await func(request)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\fastapi\routing.py", line 278, in app
raw_response = await run_endpoint_function(
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\fastapi\routing.py", line 193, in run_endpoint_function
return await run_in_threadpool(dependant.call, **values)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\starlette\concurrency.py", line 42, in run_in_threadpool
return await anyio.to_thread.run_sync(func, *args)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\anyio\to_thread.py", line 56, in run_sync
return await get_async_backend().run_sync_in_worker_thread(
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\anyio_backends_asyncio.py", line 2177, in run_sync_in_worker_thread
return await future
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\anyio_backends_asyncio.py", line 859, in run
result = context.run(func, *args)
File "D:\Users\11154380\PycharmProjects\pythonProject\venv\lib\site-packages\gradio\routes.py", line 468, in custom_component_path
Path(path).read_text().encode()
File "D:\Users\11154380\AppData\Local\Programs\Python\Python310\lib\pathlib.py", line 1135, in read_text
return f.read()
UnicodeDecodeError: 'gbk' codec can't decode byte 0x93 in position 822129: illegal multibyte sequence

看起来是的,4.29.0 以后 gradio 读取自定义组件的方式变了,在 windows 平台下调用Path(path).read_text().encode()时存在编码问题,需要手动指定 encoding 为 utf-8,即Path(path).read_text(encoding="utf-8").encode()

这个问题得等后续提给官方来修复 gradio-app/gradio#8426 了,如果只是本地调试,你可以去源码中对应位置做下修改。

4.32及 以上修复