Gradio框架如何在Blocks中获取request

当使用Python Gradio框架构建聊天网页程序的时候,我用的是gr.Block来定义组件,但是遇到一个问题就是没法获取request对象,导致我bot机器人回复消息的时候拿不到用户的session身份信息。查阅了官方文档,没有找到合适的,最后在github讨论区发现了类似的方法。https://github.com/gradio-app/gradio/issues/7682

思路是:使用 grInstance.load() 方法加载一个函数,这个函数可以接收gr.request,获取session信息,然后output到一个gr.textbox中,(好像input和output的对象只能是组建,而不能是pure的变量),再把这个textbox传到其他地方。

 

def get_sessionId_gradio(request: gr.Request):
    session_id = request.session.get(Constants.Session_SessionId_Key)
    return session_id

with gr.Blocks(fill_height=True, css=gradioConstant.css, js=gradioConstant.jsScript,
               title=gradioConstant.Title_Html,
               theme=gr.themes.Default(spacing_size=gr.themes.sizes.spacing_sm,
                                       text_size=gr.themes.sizes.text_lg)) as grInstance:
    # for Chatbot, see: https://www.gradio.app/main/docs/gradio/chatbot
    # demo code from: https://www.gradio.app/guides/blocks-and-event-listeners
    。。。。。。
    sessionId_box = gr.Textbox(visible=False)

    chat_msg = chat_input.submit(user_fun, [chatbot, chat_input, sessionId_box], [chatbot, chat_input])
    bot_msg = chat_msg.then(bot_fun, [chatbot, sessionId_box], chatbot, api_name="bot_response")
    bot_msg.then(lambda: gr.MultimodalTextbox(interactive=True), None, [chat_input])
    # run after load, get session id from request, give it to session_user_id
    grInstance.load(fn=get_sessionId_gradio, inputs=None, outputs=sessionId_box)

 

posted @ 2025-04-24 10:36  saaspeter  阅读(65)  评论(0)    收藏  举报