|
|
|
import argparse |
|
import gradio as gr |
|
import os |
|
from models.helperbot_bigdl import Chat |
|
from models.sum_model import Sum |
|
|
|
os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE" |
|
parser = argparse.ArgumentParser() |
|
|
|
|
|
parser.add_argument("--whisper_version", default="small", help="Whisper model version for video asr") |
|
|
|
parser.add_argument("--llm_version", default="Llama-2-7b-chat-hf-INT4", help="LLM model version") |
|
parser.add_argument("--embed_version", default="all-MiniLM-L12-v2", help="Embedding model version") |
|
parser.add_argument("--top_k", default=3, type=int, help="Return top k relevant contexts to llm") |
|
parser.add_argument("--qa_max_new_tokens", default=128, type=int, help="Number of max new tokens for llm") |
|
|
|
parser.add_argument("--port", type=int, default=7860, help="Gradio server port") |
|
|
|
args = parser.parse_args() |
|
|
|
chat = Chat(args) |
|
sumbot = Sum(args) |
|
chat.init_model() |
|
|
|
global_chat_history = [] |
|
global_result = "" |
|
|
|
global_summary = "" |
|
|
|
|
|
def clean_conversation(): |
|
global global_chat_history |
|
chat.clean_history() |
|
global_chat_history = [] |
|
return '', gr.update(value=None, interactive=True), None, gr.update(value=None, visible=True), gr.update(value=None, |
|
visible=True) |
|
|
|
|
|
def clean_chat_history(): |
|
global global_chat_history |
|
chat.clean_history() |
|
global_chat_history = [] |
|
return '', None |
|
|
|
|
|
def submit_message(message, max_tokens, top_p): |
|
args.qa_max_new_tokens = max_tokens |
|
args.top_k = top_p |
|
|
|
print(args) |
|
chat_history, generated_question, source_documents = chat.chat2video(args, message, global_result) |
|
global_chat_history.append((message, chat_history[0][1])) |
|
return '', global_chat_history |
|
|
|
|
|
def gen_script(vid_path): |
|
print(vid_path) |
|
global global_result |
|
if vid_path is None: |
|
log_text = "===== Please upload video! =====" |
|
gr.update(value=log_text, visible=True) |
|
else: |
|
global_result = chat.video2log(vid_path) |
|
|
|
return gr.update(value=global_result, visible=True), download_script_file() |
|
|
|
|
|
def download_script_file(): |
|
try: |
|
with open("script_result.txt", "w") as file: |
|
file.write(global_result) |
|
return "script_result.txt" |
|
except Exception as e: |
|
return f"Error preparing file for download: {str(e)}" |
|
|
|
|
|
def download_sum_file(): |
|
try: |
|
with open("sum_result.txt", "w") as file: |
|
file.write(global_summary) |
|
return "sum_result.txt" |
|
except Exception as e: |
|
return f"Error preparing file for download: {str(e)}" |
|
|
|
|
|
def upload_file(files): |
|
global global_result |
|
file_paths = [file.name for file in files][0] |
|
try: |
|
with open(file_paths, "r", encoding="utf-8") as file: |
|
file_content = file.read() |
|
global_result = file_content |
|
except FileNotFoundError: |
|
print("File not found") |
|
except IOError: |
|
print("Error occurred while reading the file") |
|
return file_content, download_script_file() |
|
|
|
|
|
def summary(): |
|
global global_summary |
|
global_summary = sumbot.summarize(global_result) |
|
return gr.update(value=global_summary, visible=True), download_sum_file() |
|
|
|
|
|
css = """ |
|
#col-container {max-width: 80%; margin-left: auto; margin-right: auto;} |
|
#video_inp {min-height: 100px} |
|
#chatbox {min-height: 100px;} |
|
#header {text-align: center;} |
|
#hint {font-size: 1.0em; padding: 0.5em; margin: 0;} |
|
.message { font-size: 1.2em; } |
|
""" |
|
|
|
with gr.Blocks(css=css) as demo: |
|
with gr.Column(elem_id="col-container"): |
|
gr.Markdown(""" ## Meeting Helper Bot |
|
Upload meeting recording in mp3/mp4/txt format and you can get the summary and chat based on content |
|
(You can adjust parameters based on your needs) |
|
Powered by BigDL, Llama, Whisper, and LangChain""", |
|
elem_id="header") |
|
|
|
with gr.Column() as advanced_column: |
|
max_new_tokens = gr.Slider(label="Max new tokens", minimum=1, maximum=1024, step=1, value=128) |
|
top_k = gr.Slider(label="Top-k", minimum=1, maximum=50, step=1, value=3) |
|
|
|
with gr.Row(): |
|
with gr.Column(): |
|
video_inp = gr.Video(label="1.Upload MP3/MP4 File") |
|
|
|
upload_button = gr.UploadButton("1. Or Click to Upload a txt File", file_types=["doc", "txt"], |
|
file_count="multiple") |
|
gen_btn = gr.Button("2. Generate Script") |
|
sum_outp = gr.Textbox(label="Summerization output", lines=15) |
|
|
|
save_sum_dl = gr.outputs.File(label="Download Summary") |
|
|
|
|
|
with gr.Column(): |
|
script_outp = gr.Textbox(label="Script output", lines=30) |
|
with gr.Row(): |
|
script_summarization_btn = gr.Button("3.Script Summarization ") |
|
|
|
|
|
save_script_dl = gr.outputs.File(label="Download Script") |
|
|
|
|
|
with gr.Column(): |
|
chatbot = gr.Chatbot(elem_id="chatbox") |
|
input_message = gr.Textbox(show_label=False, placeholder="Enter text and press enter", visible=True) |
|
btn_submit = gr.Button("Submit") |
|
with gr.Row(): |
|
btn_clean_chat_history = gr.Button("Clean Chat History") |
|
btn_clean_conversation = gr.Button("Start New Conversation") |
|
|
|
upload_button.upload(upload_file, upload_button, [script_outp, save_script_dl]) |
|
|
|
gen_btn.click(gen_script, [video_inp], [script_outp, save_script_dl]) |
|
script_summarization_btn.click(summary, [], [sum_outp, save_sum_dl]) |
|
|
|
btn_submit.click(submit_message, [input_message, max_new_tokens, top_k], [input_message, chatbot]) |
|
input_message.submit(submit_message, [input_message, max_new_tokens, top_k], [input_message, chatbot]) |
|
|
|
btn_clean_conversation.click(clean_conversation, [], [input_message, video_inp, chatbot, sum_outp, script_outp]) |
|
btn_clean_chat_history.click(clean_chat_history, [], [input_message, chatbot]) |
|
|
|
demo.load(queur=False) |
|
|
|
demo.queue(concurrency_count=1) |
|
demo.launch(height='800px', server_port=args.port, debug=True, share=False) |