File size: 3,151 Bytes
583462f 56ac5db 583462f 56ac5db 583462f 56ac5db 583462f 56ac5db 583462f 56ac5db 583462f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
from smolagents.tools import Tool
from typing import Optional
import os
from transformers import pipeline
import requests
import io
from PIL import Image
from dotenv import load_dotenv
load_dotenv()
class TranscriptSummarizer(Tool):
description = "Summarizes a transcript and generates blog content using the transformers library and Hugging Face API for image generation."
name = "transcript_summarizer"
inputs = {'transcript': {'type': 'string', 'description': 'The transcript to summarize.'}}
output_type = "string"
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.summarizer = pipeline("summarization", model="facebook/bart-large-cnn")
self.api_url = "https://api-inference.huggingface.co/models/ZB-Tech/Text-to-Image"
self.headers = {"Authorization": f"Bearer {os.getenv('HF_API_KEY')}"}
def query(self, payload):
response = requests.post(self.api_url, headers=self.headers, json=payload)
return response.content
def forward(self, transcript: str) -> str:
try:
summary = self.summarizer(transcript, max_length=2000, min_length=750, do_sample=False)[0]['summary_text']
key_entities = summary.split()[:100] # Extract the first 100 words
image_prompt = f"Generate an image related to: {' '.join(key_entities)}, professional style"
image_bytes = self.query({"inputs": image_prompt})
image = Image.open(io.BytesIO(image_bytes))
image_url = "Images/image.jpg" # Placeholder, as we can't directly pass PIL Image to Gradio
image.save(image_url) # Save the image to a file
return f"{summary}\n\nImage URL: {image_url}" # Return the file path
except Exception as e:
return f"An unexpected error occurred: {str(e)}"
class YouTubeTranscriptExtractor(Tool):
description = "Extracts the transcript from a YouTube video."
name = "youtube_transcript_extractor"
inputs = {'video_url': {'type': 'string', 'description': 'The URL of the YouTube video.'}}
output_type = "string"
def forward(self, video_url: str) -> str:
try:
from pytubefix import YouTube
# Create a YouTube object
yt = YouTube(video_url)
lang='en'
# Get the video transcript
if lang in yt.captions:
transcript = yt.captions['en'].generate_srt_captions()
else:
transcript = yt.captions.all()[0].generate_srt_captions()
lang = yt.captions.all()[0].code
# Clean up the transcript by removing timestamps and line numbers
cleaned_transcript = ""
for line in transcript.splitlines():
if not line.strip().isdigit() and "-->" not in line:
cleaned_transcript += line + "\n"
print("transcript : ", cleaned_transcript)
return cleaned_transcript
except Exception as e:
return f"An unexpected error occurred: {str(e)}"
def __init__(self, *args, **kwargs):
self.is_initialized = False
|