Turbiling's picture
Update app.py
a7e963f verified
import os
from dotenv import load_dotenv
from groq import Groq
import PyPDF2
import gradio as gr
from io import BytesIO
from fpdf import FPDF
import textwrap
# Load API Key
load_dotenv()
GROQ_API_KEY = os.getenv("GROQ_API_KEY")
client = Groq(api_key=GROQ_API_KEY)
def extract_pdf_text(file):
reader = PyPDF2.PdfReader(file)
all_pages = [page.extract_text() for page in reader.pages if page.extract_text()]
return all_pages
def translate_chunk(chunk_text):
try:
prompt = f"Translate the following English academic content into formal Urdu:\n\n{chunk_text}"
response = client.chat.completions.create(
model="llama3-8b-8192",
messages=[
{"role": "system", "content": "You are a professional English-to-Urdu translator."},
{"role": "user", "content": prompt}
]
)
return response.choices[0].message.content.strip()
except Exception as e:
return f"⚠️ Translation failed: {str(e)}"
def save_to_pdf(translated_chunks):
pdf = FPDF()
pdf.add_page()
pdf.set_font("Arial", size=12)
for translated in translated_chunks:
wrapped_lines = textwrap.wrap(translated, width=100)
for line in wrapped_lines:
pdf.cell(200, 10, txt=line, ln=True, align='R')
pdf.ln(5)
output_path = "/tmp/translated_book.pdf"
pdf.output(output_path)
return output_path
def handle_translation(pdf_file):
pages = extract_pdf_text(pdf_file)
translated_chunks = []
for i, page_text in enumerate(pages):
if not page_text.strip():
continue
print(f"📄 Translating page {i+1}/{len(pages)}...")
urdu = translate_chunk(page_text[:3000])
translated_chunks.append(f"صفحہ {i+1}\n" + urdu)
output_pdf = save_to_pdf(translated_chunks)
return "✅ ترجمہ مکمل ہو گیا! نیچے سے فائل ڈاؤن لوڈ کریں۔", output_pdf
iface = gr.Interface(
fn=handle_translation,
inputs=gr.File(label="📘 انگریزی PDF فائل اپلوڈ کریں"),
outputs=[
gr.Textbox(label="🔁 سٹیٹس"),
gr.File(label="📥 ترجمہ شدہ اردو PDF فائل")
],
title="📚 PDF چپٹر بائی چپٹر اردو ترجمہ",
description="یہ ایپ Groq LLaMA3 کا استعمال کرتے ہوئے انگریزی PDF کو چپٹر بائی چپٹر اردو میں ترجمہ کرتی ہے۔"
)
iface.launch()