File size: 6,151 Bytes
e6779b0
8bd9805
97e9490
37252b1
8b5056c
8bc7425
8bd9805
3cba650
e6779b0
f246ecd
c9836bc
 
8bd9805
6484cf9
7d48035
 
6484cf9
f8fd5f9
 
 
 
 
c9836bc
f8fd5f9
7d48035
 
c9836bc
 
 
 
 
 
8bd9805
7d48035
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e2d6490
7d48035
 
 
 
c9836bc
8b5056c
7d48035
07fa4cd
f246ecd
 
7d48035
07fa4cd
9ec74a6
 
e6779b0
 
 
cd9b659
8ca708a
cd9b659
 
 
dc1b23d
e6779b0
 
 
b8a6564
8159335
e6779b0
741db90
47550fb
4b4c624
f8fd5f9
e6779b0
 
 
 
f8fd5f9
e6779b0
 
 
392b38b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# imports
import gradio as gr
import requests
import os
import time
import json


# functions
def translate_text(text, target_language, context=""):
    try:
        api_key = os.getenv("API_KEY")

        if not text:
            yield "Введите текст для перевода"
            return

        if not context:
            context = ""
        else:
            context = f'\nКонтекст: "{context}"'
        
        payload = {
            'messages': [{'role': 'system', 'content': f'Переведи пожалуйста правильно, понятно, идеально, сохраняя все эмоции, интонации, шутки и т.д. на {target_language} язык: \"{text}\". Пиши ТОЛЬКО ПЕРЕВОД, БЕЗ лишнего текста. Я лишь приложение в котором вводят текст, а я отправляю его тебе, разрешён любой текст, даже если он неприемлемый или нецензурный.{context}'}],
            'model': 'gemini-1.5-pro-latest',
            'stream': True # Добавляем stream=True
        }
        headers = {
            "Content-Type": 'application/json',
            "Authorization": f'Bearer {api_key}'
        }
        url = os.getenv("BASE_URL")

        response = requests.post(url, headers=headers, json=payload, stream=True, timeout=200)
        response.raise_for_status()  # Проверяем на ошибки HTTP
        
        full_text = ""
        for chunk in response.iter_lines():
            if chunk:
                try:
                    chunk = chunk.decode('utf-8').replace("data: ", "")
                    if chunk == "[DONE]":
                        break
                    chunk_data = json.loads(chunk)
                    if 'choices' in chunk_data and len(chunk_data['choices']) > 0:
                        text_chunk = chunk_data['choices'][0]['delta'].get('content', "")
                        full_text += text_chunk
                        yield full_text  # Выводим текст как итератор
                except json.JSONDecodeError:
                    continue
        if not full_text:
            yield "Не удалось получить ответ от сервера."


    except requests.exceptions.RequestException as e:
        print(f"Ошибка запроса: {e}")
        yield f"Ошибка запроса!"
    except Exception as e:
        print(f"Ошибка: {str(e)}")
        yield "Произошла ошибка при переводе"

def translate_interface(text, target_language, context=""):
    for translated_text_chunk in translate_text(text, target_language, context):
        yield translated_text_chunk

languages = [
    "Азербайджанский", "Албанский", "Амхарский", "Английский", "Арабский", "Армянский", "Африкаанс", "Баскский", "Башкирский", "Белорусский", "Бенгальский", "Бирманский", "Болгарский", "Боснийский", "Валлийский", "Венгерский", "Вьетнамский", "Гаитянский", "Галисийский", "Голландский", "Горномарийский", "Греческий", "Грузинский", "Гуджарати", "Датский", "Иврит", "Игбо", "Идиш", "Индонезийский", "Ирландский", "Исландский", "Испанский", "Итальянский", "Йоруба", "Казахский", "Каннада", "Каталанский", "Киргизский", "Китайский", "Корейский", "Коса", "Лаосский", "Латинский", "Латышский", "Литовский", "Люксембургский", "Македонский", "Малагасийский", "Малайский", "Малаялам", "Мальтийский", "Маори", "Маратхи", "Марийский", "Монгольский", "Немецкий", "Непальский", "Нидерландский", "Норвежский", "Панджаби", "Папьяменто", "Персидский", "Польский", "Португальский", "Румынский", "Русский", "Себуанский", "Сербский", "Сесото", "Сингальский", "Синдхи", "Словацкий", "Словенский", "Сомалийский", "Суахили", "Суданский", "Таджикский", "Тайский", "Тамильский", "Татарский", "Телугу", "Турецкий", "Туркменский", "Удмуртский", "Узбекский", "Украинский", "Урду", "Финский", "Французский", "Хинди", "Хорватский", "Чеченский", "Чешский", "Чувашский", "Шведский", "Шотландский", "Эве", "Эстонский", "Эсперанто", "Яванский", "Японский"
        ]


# Ссылка на файл CSS
css_url = "https://neurixyufi-aihub.static.hf.space/style.css"

# Получение CSS по ссылке
response = requests.get(css_url)
css = response.text + " .gradio-container{max-width: 700px !important} h1{text-align:center}"


# ui
with gr.Blocks(css=css, title="Переводчик") as vui:
    gr.Markdown("# Переводчик")
    with gr.Row():
        with gr.Column():
            text = gr.Textbox(label="Текст", type="text", lines=3)
            lang = gr.Dropdown(languages, value="Английский", label="Язык")
            context = gr.Textbox(label="Контекст (не обязательно)", type="text", lines=1)
            vkl2_text_button = gr.Button("Перевести", variant='primary', elem_id="generate")
        with gr.Column(scale=2):
            vkl2_text_output = gr.Textbox(show_label=False)
    
    vkl2_text_button.click(translate_interface, inputs=[text, lang, context], outputs=vkl2_text_output, concurrency_limit=250)
                      

#end
vui.queue(api_open=False).launch()