import gradio as gr import os import torch, time from huggingface_hub import hf_hub_download, snapshot_download, login import sys import gc import base64 import torch login(token=os.environ["HF_TOKEN"]) repo_id = os.environ["REPO_ID"] torch.set_num_threads(1) if torch.cuda.is_available(): torch.backends.cudnn.benchmark = True try: generate_file = hf_hub_download(repo_id=repo_id, filename="gen1.py", token=os.environ["HF_TOKEN"]) os.system(f"cp {generate_file} ./gen1.py") except Exception as e: print(f"Error downloading files: {e}") from gen1 import setup_translation, translate_text as gen_translate LOGO_PATH = "static/logo.png" if os.path.isfile(LOGO_PATH): with open(LOGO_PATH, "rb") as f: LOGO_B64 = base64.b64encode(f.read()).decode() LOGO_HTML = f'Maruth Labs Logo' FAVICON_HTML = f'' else: LOGO_HTML = '
' FAVICON_HTML = '' def init_translation_model(): success = setup_translation(repo_id=os.environ["REPO_ID"], token=os.environ["HF_TOKEN"]) if success: print("Model loaded successfully!") else: print("Failed to load model") def translate_text(source_text, source_lang, target_lang, temperature, top_k, repetition_penalty, max_tokens): return gen_translate(source_text, source_lang, target_lang, temperature, top_k, repetition_penalty, max_tokens) languages = ["English", "Hindi", "Bengali", "Tamil", "Telugu", "Kannada", "Panjabi"] theme_lock_css = """ .gradio-container .theme-toggle, .gradio-container button[aria-label*="theme"], .gradio-container button[title*="theme"], .gradio-container .settings button, .gradio-container [data-testid="theme-toggle"] { display: none !important; } :root { color-scheme: dark !important; } body, .gradio-container { background-color: #0a1628 !important; color: #e6eef8 !important; } /* Mobile-responsive header fixes */ .main-header { padding: 10px 5px !important; } .header-container { display: flex; align-items: center; justify-content: space-between; width: 100%; flex-wrap: wrap; gap: 10px; } .logo-section { display: flex; align-items: center; flex-shrink: 0; min-width: 0; } .logo-section h3 { margin-left: 8px; margin-top: 0; margin-bottom: 0; white-space: nowrap; font-size: 1rem; } .main-title { flex: 1; text-align: center; min-width: 0; } .main-title h1 { margin: 0; font-size: 1.5rem; line-height: 1.2; word-break: break-word; } /* Mobile responsiveness */ @media (max-width: 768px) { .header-container { flex-direction: column; align-items: center; text-align: center; gap: 15px; } .logo-section { order: 1; } .main-title { order: 2; width: 100%; } .main-title h1 { font-size: 1.3rem; margin: 0; } .logo-section h3 { font-size: 0.9rem; } } @media (max-width: 480px) { .main-title h1 { font-size: 1.1rem; } .logo-section h3 { font-size: 0.8rem; } .main-header { padding: 8px 3px !important; } } """ locked_theme = gr.themes.Monochrome(primary_hue="blue", secondary_hue="slate", neutral_hue="slate").set( background_fill_primary="#0a1628", background_fill_secondary="#1f2937", block_background_fill="#374151", border_color_primary="#374151", color_accent_soft="#2563eb", block_title_text_color="#e6eef8", block_label_text_color="#e6eef8", body_text_color="#e6eef8" ) with gr.Blocks( title="Madhuram Translation - MaruthLabs", css=theme_lock_css, theme=locked_theme, js=f""" function() {{ {f'document.head.insertAdjacentHTML("beforeend", `{FAVICON_HTML}`);' if FAVICON_HTML else ''} document.documentElement.setAttribute('data-theme', 'dark'); document.body.classList.add('dark'); document.body.classList.remove('light'); const observer = new MutationObserver(function(mutations) {{ mutations.forEach(function(mutation) {{ mutation.addedNodes.forEach(function(node) {{ if (node.nodeType === 1) {{ const toggles = node.querySelectorAll('.theme-toggle, button[aria-label*="theme"], button[title*="theme"]'); toggles.forEach(toggle => toggle.style.display = 'none'); }} }}); }}); }}); observer.observe(document.body, {{ childList: true, subtree: true }}); }} """ ) as demo: with gr.Row(elem_classes="main-header"): with gr.Column(): gr.HTML(f"""
{LOGO_HTML}

Maruth Labs

Madhuram Translation Model

""") with gr.Row(): with gr.Column(): gr.HTML("""
Important: Use the original script of the languages for best translation results.
""") with gr.Row(equal_height=False): with gr.Column(scale=1.5, elem_classes="settings-panel"): gr.Markdown("## Translation Settings") with gr.Row(): source_lang = gr.Dropdown(choices=languages, label="Source Language", value="English") target_lang = gr.Dropdown(choices=languages, label="Target Language", value="Hindi") swap_btn = gr.Button("Swap Languages", variant="secondary", size="sm") with gr.Accordion("Advanced Settings", open=False): temperature = gr.Slider(0.001, 1.001, 0.001, step=0.1, label="Temperature") top_k = gr.Slider(1, 100, 10, step=1, label="Top-k") repetition_penalty = gr.Slider(1.0, 2.0, 1.2, step=0.1, label="Repetition Penalty") max_tokens = gr.Slider(100, 2000, 400, step=50, label="Max Tokens") with gr.Column(scale=2, elem_classes="translation-card"): gr.Markdown("## Translation Interface") source_text = gr.Textbox(label="Enter text to translate", placeholder="Type or paste your text here", lines=6, max_lines=12) with gr.Row(): translate_btn = gr.Button("Translate", variant="primary", size="lg") clear_btn = gr.Button("Clear All", variant="secondary", size="lg") translated_text = gr.Textbox(label="Translation Result", lines=6, max_lines=12, interactive=False, placeholder="Translation will appear here") with gr.Row(): with gr.Column(): gr.Markdown("### Quick Examples") gr.Examples( examples=[ ["Hello, how are you today?", "English", "Hindi"], ["তুমি কোথায় যাচ্ছ?", "Bengali", "English"], ["நீங்கள் எப்படி இருக்கிறீர்கள்?", "Tamil", "Telugu"], ["ನಿನ್ನ ಹೆಸರು ಏನು?", "Kannada", "English"], ["ਸਤ ਸ੍ਰੀ ਅਕਾਲ", "Panjabi", "Hindi"], ], inputs=[source_text, source_lang, target_lang], ) gr.Markdown("*Disclaimer - This is a demo version of Madhuram-Translate. It may occasionally generate incorrect or incomplete responses. Please verify independently. The complete model will be available through our own playground where the missing features will be incorporated.*", elem_classes="disclaimer") def swap_languages(src, tgt): return tgt, src def clear_all(): return "", "" swap_btn.click(fn=swap_languages, inputs=[source_lang, target_lang], outputs=[source_lang, target_lang]) clear_btn.click(fn=clear_all, outputs=[source_text, translated_text]) translate_btn.click(fn=translate_text, inputs=[source_text, source_lang, target_lang, temperature, top_k, repetition_penalty, max_tokens], outputs=[translated_text]) demo.load(fn=init_translation_model) if __name__ == "__main__": demo.launch()