Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| from utils.chatbot import Chatbot, VideoChatbot | |
| from utils.utils import * | |
| def create_new_model(): | |
| return Chatbot() | |
| # start of gradio interface | |
| with gr.Blocks() as demo: | |
| user_chatbot = gr.State(create_new_model) | |
| 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", scale=3 | |
| ) | |
| upload_to_db = gr.CheckboxGroup( | |
| ["Upload to Database"], | |
| label="是否上傳至資料庫", info="須在上傳檔案前勾選(將資料上傳至資料庫時,資料庫會自動建立索引,下次使用時可以直接檢索,無勾選則僅作這次使用)", scale=1 | |
| ) | |
| 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) | |
| transcript_id = gr.Textbox("", visible=False) | |
| user_question = gr.Textbox("", visible=False) | |
| content_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, upload_to_db], | |
| 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") | |
| transcript_id.submit(search_transcript_content, [transcript_id, user_question], content_output, api_name="search_transcript_content") | |
| if __name__ == "__main__": | |
| demo.launch() |