Spaces:
Runtime error
Runtime error
import gradio as gr | |
from utils.chatbot import Chatbot, VideoChatbot | |
from utils.utils import * | |
# start of gradio interface | |
with gr.Blocks() as demo: | |
user_chatbot = gr.State(Chatbot()) | |
test_video_chabot = gr.State(VideoChatbot()) | |
with gr.Row(): | |
gr.HTML("Junyi Academy Chatbot") | |
with gr.Row(equal_height=True): | |
with gr.Column(scale=5): | |
with gr.Row(): | |
chatbot = gr.Chatbot() | |
with gr.Row(): | |
with gr.Column(scale=12): | |
user_input = gr.Textbox( | |
show_label=False, | |
placeholder="Enter text", | |
container=False, | |
) | |
with gr.Column(min_width=70, scale=1): | |
clear_btn = gr.Button("清除") | |
with gr.Column(min_width=70, scale=1): | |
submit_btn = gr.Button("傳送") | |
with gr.Row(): | |
index_file = gr.File( | |
file_count="multiple", file_types=["pdf"], label="Upload PDF file" | |
) | |
with gr.Row(): | |
instruction = gr.Markdown( | |
""" | |
## 使用說明 | |
1. 上傳一個或多個 PDF 檔案,系統將自動進行摘要、翻譯等處理後建立知識庫 | |
2. 在上方輸入欄輸入問題,系統將自動回覆 | |
3. 可以根據下方的摘要內容來提問 | |
4. 每次對話會根據第一個問題的內容來檢索所有文件,並挑選最能回答問題的文件來回覆 | |
5. 要切換檢索的文件,請點選「清除」按鈕後再重新提問 | |
""" | |
) | |
with gr.Row(): | |
describe = gr.Markdown("", visible=True) | |
with gr.Row(): | |
video_text_input = gr.Textbox("", visible=False) | |
video_text_output = gr.Textbox("", visible=False) | |
# end of gradio interface | |
# start of workflow controller | |
# defining workflow of user bot interaction | |
bot_args = dict( | |
fn=bot, | |
inputs=user_chatbot, | |
outputs=chatbot, | |
) | |
user_args = dict( | |
fn=user, | |
inputs=[user_chatbot, user_input], | |
outputs=[user_input, chatbot], | |
queue=False, | |
) | |
response = user_input.submit(**user_args).then(**bot_args) | |
response.then(lambda: gr.update(interactive=True), None, [user_input], queue=False) | |
submit_btn.click( | |
**user_args, | |
).then( | |
**bot_args | |
).then(lambda: gr.update(interactive=True), None, [user_input], queue=False) | |
# defining workflow of clear state | |
clear_state_args = dict( | |
fn=clear_state, | |
inputs=user_chatbot, | |
outputs=None, | |
) | |
clear_btn.click(**clear_state_args) | |
# defining workflow of building knowledge base | |
send_system_nofification_args = dict( | |
fn=send_system_nofification, | |
inputs=user_chatbot, | |
outputs=chatbot, | |
) | |
bulid_knowledge_base_args = dict( | |
fn=build_knowledge_base, | |
inputs=[user_chatbot, index_file], | |
outputs=None, | |
) | |
change_md_args = dict( | |
fn=change_md, | |
inputs=[user_chatbot], | |
outputs=[describe], | |
) | |
index_file.upload(**send_system_nofification_args).then( | |
lambda: gr.update(interactive=True), None, None, queue=False | |
).then(**bulid_knowledge_base_args).then(**send_system_nofification_args).then( | |
lambda: gr.update(interactive=True), None, None, queue=False | |
).then( | |
**change_md_args | |
) | |
video_text_input.submit(video_bot, [test_video_chabot, video_text_input], video_text_output, api_name="video_bot") | |
if __name__ == "__main__": | |
demo.launch() | |