ZunairaHawwar commited on
Commit
9fd9d4b
Β·
verified Β·
1 Parent(s): 304043d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +91 -38
app.py CHANGED
@@ -1,52 +1,105 @@
 
1
  import gradio as gr
2
- import os
3
  from groq import Groq
 
4
 
5
- # Initialize Groq client
6
- groq_api_key = "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"
7
- client = Groq(api_key=groq_api_key)
8
-
9
- lang_options = ["English", "Urdu", "Spanish", "French", "Arabic", "Chinese", "German"]
10
-
11
- def translate_with_groq(text, src_lang, tgt_lang):
12
- if src_lang == tgt_lang:
13
- return text
14
 
 
 
 
 
15
  prompt = (
16
- f"You are a translation assistant. Translate the following text from {src_lang} to {tgt_lang}:\n\n\"{text}\""
 
 
 
 
 
 
 
17
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
 
19
- try:
20
- resp = client.chat.completions.create(
21
- model="mistral-saba-24b",
22
- messages=[
23
- {"role": "system", "content": "You are a multilingual translation assistant."},
24
- {"role": "user", "content": prompt}
25
- ],
26
- temperature=0.2,
27
- max_completion_tokens=512
28
- )
29
- return resp.choices[0].message.content.strip()
30
- except Exception as e:
31
- return f"❌ Error: {e}"
32
-
33
- # Gradio UI (Blocks with improved layout)
 
 
 
 
 
 
 
 
34
  with gr.Blocks(theme=gr.themes.Default(primary_hue="teal", font="poppins")) as demo:
35
- gr.Markdown("# 🌍 AI Multilingual Translator")
36
- gr.Markdown("Translate between multiple languages using **Groq's Mistral-Saba 24B** model.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
 
38
- with gr.Row():
39
- with gr.Column():
40
- input_text = gr.Textbox(label="πŸ“ Input Text", lines=5, placeholder="Type your text here...")
41
- src_lang = gr.Dropdown(lang_options, value="English", label="🌐 From")
42
- tgt_lang = gr.Dropdown(lang_options, value="Urdu", label="🌐 To")
43
- translate_btn = gr.Button("πŸ” Translate", variant="primary")
44
- with gr.Column():
45
- output_text = gr.Textbox(label="βœ… Translated Text", lines=5)
 
 
46
 
47
- gr.Markdown("---\nPowered by Groq & Gradio")
48
 
49
- translate_btn.click(translate_with_groq, inputs=[input_text, src_lang, tgt_lang], outputs=output_text)
50
 
51
  if __name__ == "__main__":
52
  demo.launch()
 
1
+ import os, tempfile, uuid, pdfplumber
2
  import gradio as gr
 
3
  from groq import Groq
4
+ from docx import Document # python-docx
5
 
6
+ # ── Groq setup ──────────────────────────────────────────────────────────────────
7
+ client = Groq("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")
8
+ MODEL_NAME = "mixtral-8x7b"
9
+ LANGS = ["English", "Urdu", "Spanish", "French", "Arabic", "Chinese", "German","Hindi","Turkish"]
 
 
 
 
 
10
 
11
+ # ── Core translator (single chunk) ──────────────────────────────────────────────
12
+ def llm_translate(chunk: str, src: str, tgt: str) -> str:
13
+ if src == tgt: # shortcut
14
+ return chunk
15
  prompt = (
16
+ "You are a professional multilingual translator. "
17
+ f"Translate the following text from {src} to {tgt}.\n\n{chunk}"
18
+ )
19
+ resp = client.chat.completions.create(
20
+ model=MODEL_NAME,
21
+ messages=[{"role": "system", "content": "Translator"}, {"role": "user", "content": prompt}],
22
+ temperature=0.2,
23
+ max_completion_tokens=2048,
24
  )
25
+ return resp.choices[0].message.content.strip()
26
+
27
+ # ── Document helpers ────────────────────────────────────────────────────────────
28
+ MAX_CHARS = 6000 # stay far below LLM context; tune as needed
29
+
30
+ def translate_long_text(text, src, tgt):
31
+ """Chunk long text on paragraph boundaries and re‑assemble."""
32
+ out, buff = [], []
33
+ for para in text.splitlines(keepends=True):
34
+ buff.append(para)
35
+ if sum(len(p) for p in buff) >= MAX_CHARS:
36
+ out.append(llm_translate("".join(buff), src, tgt))
37
+ buff = []
38
+ if buff:
39
+ out.append(llm_translate("".join(buff), src, tgt))
40
+ return "\n".join(out)
41
 
42
+ def handle_docx(path, src, tgt):
43
+ doc_in = Document(path)
44
+ doc_out = Document()
45
+ for para in doc_in.paragraphs:
46
+ translated = translate_long_text(para.text, src, tgt)
47
+ doc_out.add_paragraph(translated)
48
+ out_path = os.path.join(tempfile.gettempdir(), f"{uuid.uuid4()}.docx")
49
+ doc_out.save(out_path)
50
+ return out_path
51
+
52
+ def handle_pdf(path, src, tgt):
53
+ txt = []
54
+ with pdfplumber.open(path) as pdf:
55
+ for page in pdf.pages:
56
+ txt.append(page.extract_text() or "")
57
+ translated_text = translate_long_text("\n".join(txt), src, tgt)
58
+ # save as .txt for simplicity; could generate PDF if you prefer
59
+ out_path = os.path.join(tempfile.gettempdir(), f"{uuid.uuid4()}.txt")
60
+ with open(out_path, "w", encoding="utf-8") as f:
61
+ f.write(translated_text)
62
+ return out_path
63
+
64
+ # ── Gradio UI (Blocks) ──────────────────────────────────────────────────────────
65
  with gr.Blocks(theme=gr.themes.Default(primary_hue="teal", font="poppins")) as demo:
66
+ gr.Markdown("# πŸŒβ€―AI Multilingual Translator\nBlazing‑fast Groq (Mistral‑Sabaβ€―24B)")
67
+
68
+ with gr.Tab("✏️ Text"):
69
+ with gr.Row():
70
+ with gr.Column():
71
+ txt_in = gr.Textbox(lines=5, label="Input")
72
+ src1 = gr.Dropdown(LANGS, value="English", label="From")
73
+ tgt1 = gr.Dropdown(LANGS, value="Urdu", label="To")
74
+ btn1 = gr.Button("πŸ”Β Translate", variant="primary")
75
+ with gr.Column():
76
+ txt_out = gr.Textbox(lines=5, label="Translation")
77
+ btn1.click(llm_translate, inputs=[txt_in, src1, tgt1], outputs=txt_out)
78
+
79
+ with gr.Tab("πŸ“„Β Document"):
80
+ with gr.Row():
81
+ with gr.Column():
82
+ file_in = gr.File(label="Upload PDF or DOCX")
83
+ src2 = gr.Dropdown(LANGS, value="English", label="From")
84
+ tgt2 = gr.Dropdown(LANGS, value="Urdu", label="To")
85
+ btn2 = gr.Button("πŸš€Β Translate File", variant="primary")
86
+ with gr.Column():
87
+ file_out = gr.File(label="Download translated file")
88
 
89
+ def translate_file(file, src, tgt):
90
+ if file is None:
91
+ raise gr.Error("Please upload a file.")
92
+ ext = os.path.splitext(file.name)[1].lower()
93
+ if ext == ".docx":
94
+ return handle_docx(file.name, src, tgt)
95
+ elif ext == ".pdf":
96
+ return handle_pdf(file.name, src, tgt)
97
+ else:
98
+ raise gr.Error("Unsupported format (only PDF & DOCX).")
99
 
100
+ btn2.click(translate_file, inputs=[file_in, src2, tgt2], outputs=file_out)
101
 
102
+ gr.Markdown("---\nMade with ❀️ by Groq & Gradio")
103
 
104
  if __name__ == "__main__":
105
  demo.launch()