translation / app.py
ashishc628's picture
Update app.py
be058f4 verified
import gradio as gr
from openai import OpenAI
import os
from dotenv import load_dotenv
import PyPDF2
import tempfile
# Load API Key
load_dotenv()
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
# -------------------------------
# Translate text using OpenAI
# -------------------------------
def translate_text(input_text, source_lang, target_lang):
if not input_text.strip():
return "⚠️ Please enter text to translate."
if source_lang == target_lang:
return "⚠️ Source and target languages must be different."
prompt = f"Translate the following text from {source_lang} to {target_lang}:\n\n{input_text}"
try:
resp = client.responses.create(
model="gpt-4.1-mini",
input=prompt
)
translation = resp.output[0].content[0].text
return translation
except Exception as e:
return f"❌ Error: {str(e)}"
# -------------------------------
# Process PDF β†’ extract β†’ translate
# -------------------------------
def translate_pdf(pdf_file, source_lang, target_lang):
if pdf_file is None:
return "⚠️ Please upload a PDF.", None
if source_lang == target_lang:
return "⚠️ Source and target languages must be different.", None
try:
# Extract text from PDF
reader = PyPDF2.PdfReader(pdf_file.name)
text = ""
for page in reader.pages:
text += page.extract_text() + "\n"
# Translate using OpenAI
prompt = f"Translate the following PDF text from {source_lang} to {target_lang}:\n\n{text[:12000]}"
resp = client.responses.create(
model="gpt-4.1-mini",
input=prompt
)
translated_text = resp.output[0].content[0].text
# Save translated file
temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".txt")
with open(temp_file.name, "w", encoding="utf-8") as f:
f.write(translated_text)
return translated_text, temp_file.name
except Exception as e:
return f"❌ Error processing PDF: {str(e)}", None
# -------------------------------
# GRADIO UI
# -------------------------------
language_list = ["English", "Spanish", "French", "German", "Hindi", "Chinese", "Japanese","Telugu"]
with gr.Blocks(theme=gr.themes.Soft(primary_hue="blue", secondary_hue="indigo")) as demo:
gr.Markdown(
"""
# **AI Translation App**
Translate text or full PDF documents into any language using OpenAI.
"""
)
with gr.Tabs():
# ------------------ TEXT TRANSLATOR ------------------
with gr.Tab("✍️ Text Translator"):
with gr.Row():
source_lang = gr.Dropdown(language_list, label="Source Language", value="English")
target_lang = gr.Dropdown(language_list, label="Target Language", value="Spanish")
input_box = gr.Textbox(
label="Enter text to translate",
placeholder="Type or paste your text here...",
lines=6
)
translate_btn = gr.Button("Translate", variant="primary")
output_box = gr.Textbox(
label="Translated Text",
lines=6
)
translate_btn.click(
translate_text,
inputs=[input_box, source_lang, target_lang],
outputs=output_box
)
# ------------------ PDF TRANSLATOR ------------------
with gr.Tab("πŸ“„ PDF Translator"):
with gr.Row():
source_lang_pdf = gr.Dropdown(language_list, label="Source Language", value="English")
target_lang_pdf = gr.Dropdown(language_list, label="Target Language", value="French")
pdf_file = gr.File(label="Upload PDF", file_types=[".pdf"])
translate_pdf_btn = gr.Button("Translate PDF", variant="primary")
pdf_output = gr.Textbox(label="Translated PDF Text", lines=12)
download_btn = gr.File(label="Download translated file")
def pdf_translate_wrapper(pdf, src, tgt):
text, file_path = translate_pdf(pdf, src, tgt)
return text, file_path
translate_pdf_btn.click(
pdf_translate_wrapper,
inputs=[pdf_file, source_lang_pdf, target_lang_pdf],
outputs=[pdf_output, download_btn]
)
# Run the app
demo.launch()