XINZHANG-Geotab's picture
Update app.py
6390a01 verified
raw
history blame
7.1 kB
import gradio as gr
import whisper
from langchain_openai import ChatOpenAI
from langchain_openai import AzureChatOpenAI
from utils import RefineDataSummarizer
from utils import (
prompt_template,
refine_template,
prompt_template_bullet_point,
refine_prompt_template_bullet_point
)
import os
def get_prompt_examples():
examples=[
["Regular Template: ", prompt_template, refine_template],
["Bullet Point Template: ", prompt_template_bullet_point, refine_prompt_template_bullet_point],
["Empty Template: ", '{text}', '{text}'],
]
return examples
def convert_to_time_format(seconds_float):
# Split the input into whole seconds and fractional part (milliseconds)
seconds, milliseconds = divmod(seconds_float, 1)
milliseconds = round(milliseconds * 1000) # Convert fractional part to milliseconds
# Convert the whole seconds into hours, minutes, and remaining seconds
minutes, seconds = divmod(int(seconds), 60)
hours, minutes = divmod(minutes, 60)
# Format the time components into HH:MM:SS:OO
time_format = f"{hours:02d}:{minutes:02d}:{seconds:02d},{milliseconds:03d}"
return time_format
def time_stamped_text(transcript_result):
text = ''
for idx, segment in enumerate(transcript_result['segments']):
start_stamp = segment["start"]
end_stamp = segment["end"]
sentence = segment["text"].strip()
text += f"{idx + 1}\n"
text += f"{convert_to_time_format(start_stamp)} --> {convert_to_time_format(end_stamp)}\n{sentence}\n\n"
return text.strip()
def transcript(file_dir, model_type, time_stamp):
model_dir = os.path.join('models', model_type)
# model_dir = "E:\\Whisper\\" + model_type
model = whisper.load_model(model_dir)
result = model.transcribe(file_dir, language='English', task='transcribe')
if time_stamp:
text = time_stamped_text(result)
else:
lines = [s['text'] for s in result['segments']]
text = ''
for line in lines:
text += f"{line}\n"
text = text.strip()
with open("Transcript.txt", 'w') as file:
file.write(text)
return [text, "Transcript.txt"]
def upload_file(file_paths):
return file_paths
def summary(text, chunk_num, chunk_overlap, llm_type, prompt, refine_prompt):
#if user_api == "Not Provided":
# api_key = os.getenv("openai_api")
#deployment_name = llm_type
#else:
# api_key = user_api
#api_key = api_key.strip()
# llm = ChatOpenAI(temperature=1, openai_api_key=api_key, model_name=llm_type)
os.environ["AZURE_OPENAI_API_KEY"] = os.getenv("azure_api")
os.environ["AZURE_OPENAI_ENDPOINT"] = os.getenv("azure_endpoint")
openai_api_version=os.getenv("azure_api_version")
deployment_name = llm_type
llm = AzureChatOpenAI(
openai_api_version=openai_api_version,
azure_deployment=deployment_name
)
rds = RefineDataSummarizer(llm=llm, prompt_template=prompt, refine_template=refine_prompt)
result = rds.get_summarization(text, chunk_num=chunk_num, chunk_overlap=chunk_overlap)
text = result["output_text"]
with open("Summary.txt", 'w') as file:
file.write(text)
return [text, "Summary.txt"]
with gr.Blocks() as demo:
with gr.Row(equal_height=False):
with gr.Column():
file_output = gr.File()
upload_button = gr.UploadButton("Click to Upload a File", file_types=["audio", "video"], file_count="single")
upload_button.upload(upload_file, upload_button, file_output)
model_type = gr.Dropdown(
[
"tiny.en.pt",
"tiny.pt",
"small.en.pt",
"small.pt",
"base.en.pt",
"base.pt",
"medium.en.pt",
"medium.pt",
"large-v1.pt",
"large-v2.pt",], label="Model Type", value="medium.pt")
time_stamp = gr.Checkbox(label="SRT Format", info="SRT format with timestamps")
TranscriptButton = gr.Button("Transcript", variant="primary")
transcript_text = gr.Textbox(placeholder="Transcript Result", label="Transcript")
with gr.Accordion(open=False, label=["Download Transcript"]):
transcript_file = gr.File()
with gr.Column():
with gr.Accordion(open=True, label=["summary settings"]):
chunk_num = gr.Number(precision=0, minimum=1, maximum=9999, step=1, label="Chunk Number", value=1)
chunk_overlap = gr.Number(precision=0, minimum=1, maximum=9999, step=1, label="Chunk Overlap", value=100)
placeholder = gr.Textbox(visible=False)
prompt = gr.Textbox(placeholder="summary prompt", label="Summary Template", lines=5, value=prompt_template)
refine_prompt = gr.Textbox(placeholder="refine summary prompt", label="Refine Summary Template", lines=10, value=refine_template)
with gr.Accordion(open=False, label=["Templates"]):
gr.Examples(
examples=get_prompt_examples(),
inputs=[placeholder, prompt, refine_prompt],
fn=None,
outputs=None,
cache_examples=False,
label="Prompt Template"
)
with gr.Accordion(open=False, label=["llm settings"]):
# user_api = gr.Textbox(placeholder="If Empty, Use Default Key", label="Your API Key", value="Not Provided")
# llm_type = gr.Dropdown(
# [
# "gpt-3.5-turbo",
# "gpt-3.5-turbo-16k",
# "gpt-4-1106-preview"
# ], label="LLM Type", value="gpt-4-1106-preview")
llm_type = gr.Dropdown(
[
"gpt-4-32k",
"gpt-4",
"gpt-4-1106-preview",
"gpt-35-turbo",
"gpt-35-turbo-16k"
], label="LLM Type", value="gpt-4-1106-preview")
SunmmaryButton = gr.Button("Summary", variant="primary")
summary_text = gr.Textbox(placeholder="Summary Result", label="Summary")
with gr.Accordion(open=False, label=["Download Summary"]):
summary_file = gr.File()
TranscriptButton.click(
fn=transcript,
inputs=[
file_output,
model_type,
time_stamp
],
outputs=[transcript_text, transcript_file]
)
SunmmaryButton.click(
fn=summary,
inputs=[
transcript_text,
chunk_num,
chunk_overlap,
#user_api,
llm_type,
prompt,
refine_prompt
],
outputs=[summary_text, summary_file]
)
demo.launch()