import os import gradio as gr from transformers import MarianMTModel, MarianTokenizer, M2M100ForConditionalGeneration, M2M100Tokenizer # Отключение HF_HUB_ENABLE_HF_TRANSFER os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "false" # Модель для перевода с грузинского на русский (Helsinki-NLP) model_name_ka_ru = 'Helsinki-NLP/opus-mt-ka-ru' tokenizer_ka_ru = MarianTokenizer.from_pretrained(model_name_ka_ru, token=True) model_ka_ru = MarianMTModel.from_pretrained(model_name_ka_ru, token=True) # Модель для перевода с русского на грузинский (M2M100) model_name_ru_ka = "facebook/m2m100_1.2B" tokenizer_ru_ka = M2M100Tokenizer.from_pretrained(model_name_ru_ka, token=True) model_ru_ka = M2M100ForConditionalGeneration.from_pretrained(model_name_ru_ka, token=True) def translate(text, direction): if direction == "Грузинский -> Русский": # Перевод с грузинского на русский inputs = tokenizer_ka_ru(text, return_tensors="pt", padding=True, truncation=True) translated = model_ka_ru.generate(**inputs) translated_text = tokenizer_ka_ru.decode(translated[0], skip_special_tokens=True) else: # Перевод с русского на грузинский (M2M100) tokenizer_ru_ka.src_lang = "ru" # Установка исходного языка на русский target_lang = "ka" # Целевой язык: грузинский try: inputs = tokenizer_ru_ka(text, return_tensors="pt", padding=True, truncation=True) translated_tokens = model_ru_ka.generate( **inputs, forced_bos_token_id=tokenizer_ru_ka.get_lang_id(target_lang), # Установка целевого языка max_length=200, num_beams=4, # Оптимальное количество лучей для M2M100 early_stopping=True ) translated_text = tokenizer_ru_ka.decode(translated_tokens[0], skip_special_tokens=True) except Exception as e: translated_text = f"Ошибка: {str(e)}" return translated_text # Интерфейс Gradio iface = gr.Interface( fn=translate, inputs=[ gr.Textbox(label="Введите текст"), gr.Radio(["Грузинский -> Русский", "Русский -> Грузинский"], label="Выберите направление") ], outputs="text", title="Русско-Грузинский Переводчик (Helsinki-NLP и M2M100, оптимизированный)", description="Перевод с использованием проверенных моделей Helsinki-NLP и M2M100" ) iface.launch()