Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import json | |
| # Translation dictionary for common phrases | |
| TRANSLATIONS = { | |
| "hello": "مرحبا", | |
| "how are you": "كيف حالك", | |
| "thank you": "شكرا لك", | |
| "good morning": "صباح الخير", | |
| "good evening": "مساء الخير", | |
| "yes": "نعم", | |
| "no": "لا", | |
| "please": "من فضلك", | |
| "sorry": "آسف", | |
| "goodbye": "وداعا", | |
| "what is your name": "ما اسمك", | |
| "my name is": "اسمي", | |
| "where is the bathroom": "أين الحمام", | |
| "how much": "كم السعر", | |
| "i need help": "أحتاج مساعدة", | |
| "can you help me": "هل يمكنك مساعدتي", | |
| "i would like to book": "أود حجز", | |
| "set an alarm": "اضبط منبه", | |
| "call mom": "اتصل بأمي", | |
| "what time is it": "كم الساعة", | |
| } | |
| def translate_en_to_ar(text: str) -> str: | |
| """Translate English text to Arabic. Optimized for mobile-useful phrases. | |
| Use this tool when a user needs Arabic translation, especially for | |
| common phrases, mobile interactions, or UAE/Arabic region communication. | |
| Args: | |
| text: English text to translate to Arabic | |
| Returns: | |
| JSON string with Arabic translation | |
| """ | |
| lower = text.lower().strip() | |
| # Check exact match first | |
| if lower in TRANSLATIONS: | |
| return json.dumps({ | |
| "english": text, | |
| "arabic": TRANSLATIONS[lower], | |
| "method": "dictionary_exact" | |
| }, ensure_ascii=False, indent=2) | |
| # Check partial matches | |
| for en, ar in TRANSLATIONS.items(): | |
| if en in lower: | |
| return json.dumps({ | |
| "english": text, | |
| "arabic": ar, | |
| "matched_phrase": en, | |
| "method": "dictionary_partial" | |
| }, ensure_ascii=False, indent=2) | |
| # Fallback: suggest using the Gemma-2B-Arabic-mobile model | |
| return json.dumps({ | |
| "english": text, | |
| "arabic": None, | |
| "error": "No dictionary match. Use dispatchAI/Gemma-2B-Arabic-mobile model for full translation.", | |
| "model_url": "https://huggingface.co/dispatchAI/Gemma-2B-Arabic-mobile", | |
| "suggestion": "Load the model with: AutoModelForCausalLM.from_pretrained('dispatchAI/Gemma-2B-Arabic-mobile')" | |
| }, ensure_ascii=False, indent=2) | |
| def translate_ar_to_en(text: str) -> str: | |
| """Translate Arabic text to English. Optimized for mobile-useful phrases. | |
| Args: | |
| text: Arabic text to translate to English | |
| Returns: | |
| JSON string with English translation | |
| """ | |
| # Reverse lookup | |
| for en, ar in TRANSLATIONS.items(): | |
| if ar in text: | |
| return json.dumps({ | |
| "arabic": text, | |
| "english": en, | |
| "method": "dictionary" | |
| }, ensure_ascii=False, indent=2) | |
| return json.dumps({ | |
| "arabic": text, | |
| "english": None, | |
| "error": "No dictionary match. Use dispatchAI/Gemma-2B-Arabic-mobile model for full translation.", | |
| "model_url": "https://huggingface.co/dispatchAI/Gemma-2B-Arabic-mobile" | |
| }, ensure_ascii=False, indent=2) | |
| def list_phrases() -> str: | |
| """List all supported translation phrases. | |
| Returns: | |
| JSON string with all English-Arabic phrase pairs | |
| """ | |
| return json.dumps(TRANSLATIONS, ensure_ascii=False, indent=2) | |
| with gr.Blocks(title="dispatchAI Arabic Translate MCP") as demo: | |
| gr.Markdown("## 🌍 dispatchAI Arabic Translate (MCP Tool)") | |
| with gr.Tab("EN → AR"): | |
| en_input = gr.Textbox(label="English Text", placeholder="Hello, how are you?") | |
| ar_btn = gr.Button("Translate to Arabic", variant="primary") | |
| ar_output = gr.Textbox(label="Result (JSON)", lines=8) | |
| ar_btn.click(fn=translate_en_to_ar, inputs=en_input, outputs=ar_output) | |
| with gr.Tab("AR → EN"): | |
| ar_input = gr.Textbox(label="Arabic Text", placeholder="مرحبا، كيف حالك؟") | |
| en_btn = gr.Button("Translate to English", variant="primary") | |
| en_output = gr.Textbox(label="Result (JSON)", lines=8) | |
| en_btn.click(fn=translate_ar_to_en, inputs=ar_input, outputs=en_output) | |
| with gr.Tab("Phrases"): | |
| list_btn = gr.Button("List All Phrases") | |
| list_out = gr.Textbox(label="Phrase Dictionary (JSON)", lines=20) | |
| list_btn.click(fn=list_phrases, outputs=list_out) | |
| demo.launch(mcp_server=True) | |