Spaces:
Runtime error
Runtime error
# imports | |
import gradio as gr | |
import requests | |
import json | |
import os | |
import tempfile | |
import subprocess | |
# functions | |
def generate(clas, sloh, zad, theme, pred, model, max_tokens): | |
if not clas or not sloh or not zad: | |
return "" | |
headers = { | |
'Content-Type': 'application/json', | |
'Authorization': f'Bearer {os.getenv("API_KEY")}' | |
} | |
payload = { | |
'messages': [{'role': 'system', 'content': f'MARKDOWN НЕ ПОДДЕРЖИВАЕТСЯ! ПИШИ ПОЖАЛУЙСТА БЕЗ НЕГО. В этом чате тебе букду присылать описание школьных работ, а ты должен будешь сгенерировать текст для школы (для учителя, что бы учитель дал это задание ученикам)'}, {'role': 'system', 'content': f'Сгенерируй пожалуйста {zad} для учеников {clas} класса из мбоу школы в России, для урока \"{pred}\". Сложность: {sloh}/10.0. Тема: \"{theme}\", если пусто, то на твой выбор.'}], | |
'max_tokens': max_tokens, | |
'model': model | |
} | |
while True: | |
response = requests.post(os.getenv("BASE_URL"), headers=headers, json=payload) | |
data = json.loads(response.text) | |
if 'choices' in data and len(data['choices']) > 0: | |
command = data['choices'][0]['message']['content'].strip() | |
return command | |
elif 'error' in data: | |
error_message = data['error']['message'] | |
print(f'Ошибка {error_message}') | |
return None | |
else: | |
print(f'Не удалось сгенерировать текст. Повторите попытку позже...') | |
return None | |
# css | |
css = """ | |
footer {visibility: hidden !important;} | |
#generate { | |
display: inline-block; | |
color: #fff; | |
font-size: 16px; | |
padding: 10px 20px; | |
border: 3px solid #F6AE2D; | |
border-radius: 15px; | |
text-decoration: none; | |
transition: background-color 0.5s ease-in-out; | |
font-weight: normal; | |
background: transparent !important; | |
} | |
#generate:hover { | |
background: #F6AE2D !important; | |
} | |
""" | |
# ui | |
with gr.Blocks(css=css, theme='YTheme/Sketch') as vui: | |
with gr.Row(): | |
with gr.Column(): | |
with gr.Tab("Запрос", id='request v'): | |
with gr.Row(): | |
with gr.Column(scale=3): | |
pred = gr.Dropdown(label="Предмет", value="Математика", choices=["Математика", "Русский язык", "Алгебра", "Физика", "Геометрия", "Химия", "Биология", "Информатика", "История", "Обществознание", "Литература", "География", "Английский язык", "Физическая культура", "Основы безопасности жизнедеятельности", "Труды", "Музыка", "Изобразительное искусство", "Технология", "Родной язык", "Основы Духовно Нравственной Культуры России"]) | |
zad = gr.Dropdown(label="Задача", value="Контрольная работа", choices=["Контрольная работа", "Домашнее задание", "Тест", "Пятиминутка"]) | |
theme = gr.Textbox(label="Тема", placeholder="Не обязательно") | |
sloh = gr.Slider(label="Сложность", value=2, minimum=0.5, maximum=10, step=0.5) | |
clas = gr.Slider(label="Класс", value=6, minimum=1, maximum=11, step=1) | |
with gr.Tab("Настройки", id='settingsv'): | |
with gr.Row(): | |
with gr.Column(): | |
model = gr.Radio(label="Модель", interactive=True, choices=["gpt-3.5-turbo", "gpt-3.5-turbo-16k", "gpt-3.5-turbo-16k-0613", "gpt-4", "gpt-4-vision-preview"], value="gpt-4-vision-preview") | |
max_tokens = gr.Slider(show_label=True, label="Максимальное количество токенов", minimum=100, maximum=4500, value=2500, step=1) | |
text_button = gr.Button("Генерация", variant='primary', elem_id="generate") | |
with gr.Column(): | |
with gr.Tab("Ответ"): | |
text_output = gr.Textbox(show_label=False, placeholder="Здравствуйте, давайте начнём!") | |
text_button.click(generate, inputs=[clas, sloh, zad, theme, pred, model, max_tokens], outputs=text_output, queue=False) | |
#end | |
vui.queue(api_open=False).launch() | |