Spaces:
Sleeping
Sleeping
File size: 3,855 Bytes
c65f390 16af00e fd505dd c65f390 fd505dd ba67b2a fd505dd ba67b2a fd505dd ba67b2a fd505dd ba67b2a fd505dd ba67b2a fd505dd ba67b2a fd505dd ba67b2a fd505dd c65f390 fd505dd ba67b2a fd505dd ba67b2a fd505dd ba67b2a fd505dd ba67b2a fd505dd ba67b2a fd505dd ba67b2a fd505dd ba67b2a fd505dd ba67b2a fd505dd 030831c ba67b2a 030831c fd505dd 030831c fd505dd 030831c c65f390 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# app.py
import os
import json
import requests
import gradio as gr
from langdetect import detect, LangDetectException
# Hugging Face Transformers
from transformers import M2M100ForConditionalGeneration, M2M100Tokenizer
# Groq SDK
try:
from groq import Groq
except Exception:
Groq = None
# Config
GROQ_API_KEY = os.getenv("GROQ_API_KEY")
GROQ_MODEL = os.getenv("GROQ_MODEL", "mixtral-8x7b-32768")
HUGGINGFACE_TOKEN = os.getenv("HUGGINGFACE_TOKEN")
# Init Groq
groq_client = None
if GROQ_API_KEY and Groq is not None:
try:
groq_client = Groq(api_key=GROQ_API_KEY)
except Exception as e:
print("Groq client init failed:", repr(e))
# Universal translation model
m2m_model_name = "facebook/m2m100_418M"
m2m_tokenizer = M2M100Tokenizer.from_pretrained(m2m_model_name)
m2m_model = M2M100ForConditionalGeneration.from_pretrained(m2m_model_name)
# UI mapping
LANG_UI_TO_CODE = {"English": "en", "Spanish": "es", "French": "fr"}
SYSTEM_PROMPT = """
You are a multilingual translation assistant.
Task:
1. Detect the input language automatically.
2. Translate into the requested target language.
3. Preserve meaning, tone, and formatting.
4. Keep numbers, symbols, names, and special characters unchanged.
5. If the input is already in the target language, return it unchanged.
"""
def call_groq(user_text, target_lang_ui):
if not groq_client:
raise RuntimeError("Groq client not configured")
messages = [
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": f"Target language: {target_lang_ui}\n\n{user_text}"},
]
chat = groq_client.chat.completions.create(
model=GROQ_MODEL,
messages=messages,
temperature=0,
max_tokens=2048,
)
try:
return chat.choices[0].message.content.strip()
except Exception:
try:
return chat["choices"][0]["message"]["content"].strip()
except Exception as e:
print("Unexpected Groq response:", repr(e))
raise
def call_m2m(user_text, target_code):
try:
src_code = detect(user_text)
except LangDetectException:
src_code = "en" # fallback
# if already target language β return as-is
if src_code == target_code:
return user_text
m2m_tokenizer.src_lang = src_code
encoded = m2m_tokenizer(user_text, return_tensors="pt")
generated = m2m_model.generate(
**encoded, forced_bos_token_id=m2m_tokenizer.get_lang_id(target_code)
)
return m2m_tokenizer.decode(generated[0], skip_special_tokens=True)
def translate_text(user_text, target_lang_ui):
user_text = (user_text or "").strip()
if not user_text:
return "β οΈ Please enter some text to translate."
target_code = LANG_UI_TO_CODE.get(target_lang_ui, "en")
# Try Groq first
try:
if groq_client:
out = call_groq(user_text, target_lang_ui)
if out:
return out
except Exception as e:
print("Groq call failed:", repr(e))
# Fallback β M2M100 universal translator
try:
return call_m2m(user_text, target_code)
except Exception as e:
print("M2M100 translation failed:", repr(e))
return "β Translation failed. Check logs."
# ----------------- Gradio UI -----------------
with gr.Blocks() as demo:
gr.Markdown("## π Hackathon Translator (Universal)")
with gr.Row():
txt = gr.Textbox(label="Enter your text", lines=6, placeholder="Type or paste text here...")
tgt = gr.Dropdown(choices=["English","Spanish","French"], value="English", label="Target Language")
out = gr.Textbox(label="Translated Output", lines=6)
btn = gr.Button("Translate")
btn.click(fn=translate_text, inputs=[txt, tgt], outputs=[out])
if __name__ == "__main__":
demo.launch()
|