ibrahim313's picture
Update app.py
a972780 verified
import gradio as gr
from groq import Groq
from PyPDF2 import PdfReader
from docx import Document
import os
from gtts import gTTS
import tempfile
import whisper
# Load Groq API key from environment variable
groq_api_key = os.getenv('GROQ_API_KEY')
if not groq_api_key:
raise ValueError("GROQ_API_KEY environment variable is not set.")
groq_client = Groq(api_key=groq_api_key)
# Load Whisper model
model = whisper.load_model("base")
def summarize_document(file):
# Read file content
if file.name.endswith('.pdf'):
# Read PDF file
reader = PdfReader(file.name)
text = ''.join([page.extract_text() for page in reader.pages])
elif file.name.endswith('.docx'):
# Read DOCX file
doc = Document(file.name)
text = ''.join([para.text for para in doc.paragraphs])
else:
return "Unsupported file format. Please upload a PDF or DOCX file.", None
# Generate summary
try:
chat_completion = groq_client.chat.completions.create(
messages=[
{"role": "user", "content": f"Please summarize the following text: {text}"}
],
model="llama3-8b-8192",
)
summary = chat_completion.choices[0].message.content
except Exception as e:
return f"Error generating summary: {e}", None
# Convert summary text to speech using gTTS
try:
tts = gTTS(text=summary, lang='en')
audio_file = tempfile.NamedTemporaryFile(delete=False, suffix='.mp3')
tts.save(audio_file.name)
audio_file.close()
except Exception as e:
return f"Error generating audio: {e}", None
return summary, audio_file.name
# Create Gradio interface with Monochrome theme
iface = gr.Interface(
fn=summarize_document,
inputs=gr.File(label="Upload a Word or PDF Document"),
outputs=[gr.Textbox(label="Summary"), gr.Audio(label="Audio Summary")],
title="Document Summarizer",
description="Upload a Word or PDF document and get a summary with audio playback.",
theme=gr.themes.Monochrome()
)
# Launch the interface with sharing enabled
iface.launch(share=False, debug=True) # Use `share=True` if deploying elsewhere