Spaces:
Running
Running
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() |