/
github_better
/
GenAI
Обзор
Документация
Войти
/
github_better
/
GenAI
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Translate_text.py
113 строк
4 KB
github_better
New
22 дек 2025, 08:52
22 дек 2025, 08:52
b68d8c4
Код
Авторство
О чём код?
import re import logging import argostranslate.package import argostranslate.translate import Lib.AI_request as AI_request from Lib.Debugger import debug_print logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) # -- Глушим логи от этой библиотеки (нужно на серваке) -- logging.getLogger("argostranslate").setLevel(logging.CRITICAL) logging.getLogger("argostranslate.utils").setLevel(logging.CRITICAL) logging.getLogger("argostranslate.package").setLevel(logging.CRITICAL) def translate_text(text, from_lang, to_lang)->str: debug_print(logger) """ Перевод сообщения с одного языка на другой с помощью встроенного переводчика :param text: исходный текст :param from_lang: с какого языка переводить :param to_lang: на какой язык переводить :return: переведенный текст """ try: # Находим все фрагменты в скобках <> protected_parts = re.findall(r'<[^>]*>', text) # Заменяем защищенные части на временные метки temp_text = text for i, part in enumerate(protected_parts): temp_text = temp_text.replace(part, f'<PROTECTED_{i}>') # Переводим текст с временными метками translated_temp_text = argostranslate.translate.translate(temp_text, from_lang, to_lang) # Восстанавливаем защищенные части translated_text = translated_temp_text for i, part in enumerate(protected_parts): translated_text = translated_text.replace(f'<PROTECTED_{i}>', part) return translated_text except Exception as e: return f"Error: {e}" def translate_text_with_AI(text: str, to_lang: str, from_lang: str = "auto") -> str: """ Переводит текст на указанный язык с помощью DeepSeek API. Экономная функция с минимальным использованием токенов. :param text: Текст для перевода :param to_lang: Целевой язык ('en', 'ru', 'es', 'de', и т.д.) :param from_lang: Исходный язык (по умолчанию 'auto' - автоопределение) :return: Переведенный текст """ system_prompt = f"""You are a translator. Translate text to {to_lang}. Rules: - Output ONLY the translation, no explanations - Preserve formatting and punctuation - Keep proper names unchanged - Maintain the original tone and style""" # Если исходный язык указан явно if from_lang != "auto": user_prompt = f"Translate from {from_lang} to {to_lang}:\n{text}" else: user_prompt = f"Translate to {to_lang}:\n{text}" res = AI_request.send_to_AI( user_prompt=user_prompt, system_prompt=system_prompt, history=None, temp=0.1, # Низкая для детерминированности top_p=0.5, # Узкий выбор для точности tokens=len(text.split()) * 2 + 50, # Динамический лимит model="deepseek-chat", # Дешевая модель stream=False ) return res def download_language(from_lang, to_lang): debug_print(logger) """ Скачивание языковой пары на компьютер :param from_lang: с какого языка скачивать (from_lang->to_lang) :param to_lang: на какой язык """ try: available_packages = argostranslate.package.get_available_packages() package_to_install = next( (pkg for pkg in available_packages if pkg.from_code == from_lang and pkg.to_code == to_lang), None ) if package_to_install: debug_print(logger, f"Installing: {from_lang} → {to_lang}") download_path = package_to_install.download() argostranslate.package.install_from_path(download_path) else: debug_print(logger, f"No package found for: {from_lang} → {to_lang}") except Exception as e: debug_print(logger, "error")