anshu-man853's picture
Update app.py
a8569f1
import transformers
from transformers import AutoTokenizer, AutoModelForCausalLM
import gradio as gr
from transformers import pipeline
import youtube_dl
import torch
# Load the 'falcon-7b-instruct' model for summarization
model = "tiiuae/falcon-7b"
tokenizer = AutoTokenizer.from_pretrained(model)
pipeline = transformers.pipeline(
"text-generation",
model=model,
tokenizer=tokenizer,
torch_dtype=torch.bfloat16,
trust_remote_code=True,
device_map="auto",
)
sequences = pipeline(
max_length=500,
do_sample=True,
top_k=10,
num_return_sequences=1,
eos_token_id=tokenizer.eos_token_id,
)
def generate_text(text):
sequences = pipeline(
text,
max_length=200,
do_sample=True,
top_k=10,
num_return_sequences=1,
eos_token_id=tokenizer.eos_token_id,
)
# Function to extract YouTube transcript given a video URL
def extract_youtube_transcript(url):
ydl_opts = {
'writesubtitles': True,
'subtitleslangs': ['en'],
'skip_download': True,
'ignoreerrors': True
}
try:
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
info = ydl.extract_info(url, download=False)
if 'subtitles' in info:
for subtitle in info['subtitles']:
if subtitle['ext'] == 'vtt' and subtitle['language'] == 'en':
return subtitle['url']
except Exception as e:
print(f"An error occurred while fetching the transcript: {e}")
return None
# Define the Gradio interface
def summarize_youtube_transcript(url):
transcript_url = extract_youtube_transcript(url)
if transcript_url:
# Fetch the transcript
try:
with youtube_dl.YoutubeDL({}) as ydl:
transcript_info = ydl.extract_info(transcript_url, download=False)
transcript = transcript_info['subtitles']['en'][0]['text']
summary = generate_text("Write a summary of: ", transcript)
return summary[0]['summary_text']
except Exception as e:
print(f"An error occurred while processing the transcript: {e}")
return "Unable to fetch or process the transcript."
# Create the Gradio interface
iface = gr.Interface(
fn=summarize_youtube_transcript,
inputs=gr.inputs.Textbox(label="YouTube URL"),
outputs=gr.outputs.Textbox(label="Summary"),
title="YouTube Transcript Summarizer",
description="Enter a YouTube URL and get a summary of the transcript.",
theme="huggingface",
use_auth_token=True, # Authenticate Hugging Face API calls
)
# Launch the interface
iface.launch(share=True)