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)

浙公网安备 33010602011771号