Translator / app.py
Mahrukhh's picture
Update app.py
acb71d1 verified
import os
from openai import OpenAI
import gradio as gr
# πŸ” Load API key securely
api_key = os.getenv("GROQ_API_KEY")
# 🧠 Initialize Groq-compatible OpenAI client
client = OpenAI(
api_key=api_key,
base_url="https://api.groq.com/openai/v1"
)
# 🌍 Language options
language_options = [
"Urdu", "Spanish", "French", "German", "Arabic", "Chinese", "Hindi", "Russian", "Japanese", "Turkish",
"Korean", "Portuguese", "Italian", "Bengali", "Polish"
]
# 🧠 Translation logic
def translate_text(text, target_lang, history):
if not text.strip() or not target_lang.strip():
return "⚠️ Please enter both English text and the target language.", history
prompt = f"Translate the following English text to {target_lang}:\n\n{text}"
try:
response = client.chat.completions.create(
model="llama3-8b-8192",
messages=[{"role": "user", "content": prompt}],
temperature=0.5
)
translated = response.choices[0].message.content.strip()
history.append(f"πŸ”€ **English:** {text}\n🌐 **{target_lang}:** {translated}")
return translated, history
except Exception as e:
return f"❌ Error: {str(e)}", history
# 🎨 Gradio UI
with gr.Blocks(theme=gr.themes.Soft()) as app:
gr.Markdown(
"""
# 🌍 English Language Translator
**Features**:
- Translate English text to 15+ languages
- Clean modern interface
- View translation history
"""
)
with gr.Row():
with gr.Column(scale=1):
text_input = gr.Textbox(
label="✏️ English Text",
placeholder="e.g., The building was damaged during the flood.",
lines=4
)
with gr.Column(scale=1):
lang_input = gr.Dropdown(
label="🌐 Select Target Language",
choices=language_options,
value="Urdu"
)
with gr.Row():
translate_btn = gr.Button("🌐 Translate")
clear_btn = gr.Button("🧹 Clear")
output_box = gr.Textbox(label="πŸ“ Translated Text", lines=6)
history_display = gr.Markdown(label="πŸ“œ Translation History")
state = gr.State([])
translate_btn.click(fn=translate_text, inputs=[text_input, lang_input, state], outputs=[output_box, state])
clear_btn.click(lambda: ("", "Urdu", "", []), outputs=[text_input, lang_input, output_box, state])
state.change(fn=lambda hist: "\n\n---\n\n".join(hist) if hist else "No translations yet.", inputs=state, outputs=history_display)
# πŸš€ Launch
app.launch()