Improved Code

Added prompt template to chain
Added link check to Web UI
This commit is contained in:
Cemal Emre Albayrak 2024-05-01 12:43:03 +03:00
parent eb95fc41a5
commit af677b26a1
2 changed files with 31 additions and 33 deletions

View File

@ -1,13 +1,16 @@
import gradio as gr
from summarizer import load_document, setup_summarization_chain
from yt_summarizer import summarize_video
from yt_summarizer import summarize_video, check_link
from translator import setup_translator_chain
def summarize(url):
docs = load_document(url)
llm_chain = setup_summarization_chain()
result = llm_chain.run(docs)
if check_link(url):
result = summarize_video(url)
else:
docs = load_document(url)
llm_chain = setup_summarization_chain()
result = llm_chain.run(docs)
return [result, gr.Button("🇹🇷 Translate ", visible=True)]
@ -16,25 +19,6 @@ def translate(text):
result = llm_chain.run(text)
return result
def update_ui(content_type):
if content_type == "Web":
# Set visibility for Web URL input to True and Video URL input to False
url_visibility = "" # Empty string signifies no change for a text box.
video_url_visibility = "" # Set video URL field to empty since it should be hidden.
btn_text = "Generate Summary" # Button text for generating summary from a web URL
elif content_type == "Video":
# Set visibility for Web URL input to False and Video URL input to True
url_visibility = "" # Set web URL field to empty since it should be hidden.
video_url_visibility = "" # Empty string signifies no change for a text box.
btn_text = "Summarize Video" # Button text for summarizing video content
else:
# Hide both inputs (unlikely to need this else, but just in case)
url_visibility = ""
video_url_visibility = ""
btn_text = "" # Clear the button text
return url_visibility, video_url_visibility, btn_text
with gr.Blocks() as demo:
gr.Markdown(
"""# Cobanov Web and Video Summarizer
@ -43,22 +27,18 @@ with gr.Blocks() as demo:
with gr.Row():
with gr.Column():
content_type = gr.Radio(choices=["Web", "Video"], label="Select Content Type", value="Web")
url = gr.Text(label="URL", placeholder="Enter URL here")
video_url = gr.Text(label="YouTube Video URL", placeholder="Enter YouTube video URL here", visible=False)
btn_generate = gr.Button("Generate")
summary = gr.Markdown(label="Summary")
btn_translate = gr.Button(visible=False)
content_type.change(update_ui, inputs=[content_type], outputs=[url, video_url, btn_generate])
gr.Examples(
[
"https://cobanov.dev/haftalik-bulten/hafta-13",
"https://bawolf.substack.com/p/embeddings-are-a-good-starting-point",
"https://www.youtube.com/watch?v=4pOpQwiUVXc",
],
inputs=[url],
)
@ -71,9 +51,7 @@ with gr.Blocks() as demo:
Repo: github.com/mertcobanov/easy-web-summarizer
```"""
)
btn_generate.click(lambda url, video_url: summarize(url) if url else summarize_video(video_url),
inputs=[url, video_url],
outputs=[summary, btn_translate])
btn_generate.click(summarize, inputs=[url], outputs=[summary, btn_translate])
btn_translate.click(translate, inputs=[summary], outputs=[summary])
demo.launch()

View File

@ -2,6 +2,7 @@ from langchain_community.document_loaders import YoutubeLoader
from langchain.text_splitter import TokenTextSplitter
from langchain_community.chat_models import ChatOllama
from langchain.chains.summarize import load_summarize_chain
from langchain_core.prompts import PromptTemplate
import re
def check_link(link):
@ -24,8 +25,27 @@ def split_chunks(transcript):
return chunks
def yt_summarization_chain():
prompt_template = PromptTemplate(
template="""As a professional summarizer specialized in video content, create a detailed and comprehensive summary of the YouTube video transcript provided. While crafting your summary, adhere to these guidelines:
1. Capture the essence of the video, focusing on main ideas and key details. Ensure the summary is in-depth and insightful, reflecting any narrative or instructional elements present in the video.
2. Exclude any redundant expressions and non-critical details to enhance the clarity and conciseness of the summary.
3. Base the summary strictly on the transcript provided, avoiding assumptions or additions from external sources.
4. Present the summary in a well-structured paragraph form, making it easy to read and understand.
5. Conclude with "[End of Notes, Message #X]", where "X" is the sequence number of the summarizing request, to indicate the completion of the task.
By adhering to this optimized prompt, you are expected to produce a clear, detailed, and audience-friendly summary that effectively conveys the core content and themes of the YouTube video.
"{text}"
DETAILED SUMMARY:""",
input_variables=["text"],
)
llm = ChatOllama(model="llama3")
summarize_chain = load_summarize_chain(llm=llm, chain_type="refine", verbose=True)
summarize_chain = load_summarize_chain(llm=llm, prompt=prompt_template, verbose=True)
return summarize_chain
def summarize_video(video_link):
@ -35,4 +55,4 @@ def summarize_video(video_link):
sum_chain = yt_summarization_chain()
result = sum_chain.run(chunks)
return result[0]
return result