Spaces:
Sleeping
Sleeping
| 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() | |