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()