File size: 4,790 Bytes
11a668a
f92a51b
 
6eccccd
ec1e4af
5cdf428
 
1ee36a6
11a668a
 
 
2a00b0f
718a02b
05c35aa
 
d8abe74
6eccccd
23a6746
d8abe74
c8178ad
6eccccd
2a00b0f
814439a
 
d8abe74
c8178ad
5395fc0
 
 
2ed3994
5395fc0
 
 
 
 
5af24ce
1ee36a6
5395fc0
c6b109e
1ee36a6
11a668a
5cdf428
 
11a668a
 
 
7cd9469
 
 
 
 
 
 
 
 
 
288b3ad
7cd9469
 
 
288b3ad
7cd9469
11a668a
 
 
 
a5eff76
2290b15
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f379d23
1177baa
99151d2
820232a
11a668a
6106374
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
# 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()