mirror of
https://github.com/tcsenpai/easy-web-summarizer.git
synced 2025-06-06 10:35:20 +00:00
Improved Code
Added prompt template to chain Added link check to Web UI
This commit is contained in:
parent
eb95fc41a5
commit
af677b26a1
40
webui.py
40
webui.py
@ -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()
|
@ -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
|
Loading…
x
Reference in New Issue
Block a user