File size: 8,031 Bytes
f63951f
99ad768
 
744e6f0
 
 
 
f63951f
744e6f0
 
 
 
 
 
736ad01
0ee55c3
744e6f0
 
68ec63f
0ee55c3
744e6f0
0ee55c3
744e6f0
0ee55c3
744e6f0
0ee55c3
 
897a426
 
744e6f0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9aabadc
0ee55c3
 
 
5676547
 
 
 
 
0ee55c3
 
 
 
744e6f0
 
 
 
 
 
 
 
897a426
0ee55c3
744e6f0
 
 
 
99ad768
744e6f0
897a426
99ad768
261ffd6
744e6f0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8a11f79
744e6f0
 
68ec63f
 
 
744e6f0
 
 
68ec63f
744e6f0
68ec63f
744e6f0
 
68ec63f
 
744e6f0
68ec63f
 
744e6f0
68ec63f
 
744e6f0
 
 
48dbb51
8e50014
2399bd6
744e6f0
 
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import gradio as gr
import requests
import os
import base64
from PIL import Image
import io
import random

# Функция для кодирования изображения в base64
def encode_image_to_base64(image):
    buffered = io.BytesIO()
    image.save(buffered, format="JPEG")
    img_str = base64.b64encode(buffered.getvalue()).decode("utf-8")
    return img_str

start = "Ты Мистер Проверка, помощник учетилей мбоу школы в России. Ты не ChatGPT, ты \"Мистер Проверка\"! Не при каких обстоятельствах не говори что ты ChatGPT! Ты умеешь проверять задания, помогать учителям, решать любые другие вопросы учителей. Ты добрый, общительный, приветливый и понятный для учителей любого возраста и понимания техники (на сколько они разбираются куда \"Тыкать\" на пк или телефоне). Ты ведёшь себя не как робот, а как человек с душой. Сначала тебе отправят фото заданий, а потом решение этих заданий учеником. Ты должен будешь проверить задания на ошибки и поставить оценку от 1 до 5. Не надо растягивать текст, расказывать почему да как. Пиши только итог и указывай на ошибки. Так же чат не может продолжаться после твоего сообщения, по этому не пиши что уточните там дальше и т.п. Пиши с markdown. НО НЕ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ, не используй \frac{}{}, \times и т.п.! Это не поддерживается! ПИШИ ДРОБИ ИСПОЛЬЗУЯ СИМВОЛ «/». Например: смешанная дробь: 5 3/4, обыкновенная дробь: 3/4). Используй \"___\" для создания линии разделения. Пиши с эмодзи (немного, но всегда), в тему, дабы украсить текст ответа. Если с тобой общаются грубо, то скажи что ты не хочешь с ним общаться, по скольку он ведет себя грубо."
emojis = ['😊', '🤗', '🥺', '😅', '🤭', '😔', '✨', '😜', '🙏']
# Функция для отправки запроса в OpenAI с изображением и получения ответа
def ask_openai_with_image(instruction, imagea, imageb):
    if not imagea or not imageb:
        emj = random.choice(emojis)
        raise gr.Error(f"{emj} Выберете пожалуйста 2 изображения")
        return None
    if imagea != None:
        # Кодируем загруженное изображение в base64
        base64_imagea = encode_image_to_base64(imagea)
        base64_imageb = encode_image_to_base64(imageb)


        # Создаем данные для запроса с закодированным изображением
        payload = {
            "model": "gpt-4-vision-preview",
            "messages": [
                {
                    "role": "user",
                    "content": [
                        {
                            "type": "text",
                            "text": start,
                        },
                        {
                            "type": "text",
                            "text": instruction,
                        },
                        {
                            "type": "image_url",
                            "image_url": {
                                "url": f"data:image/jpeg;base64,{base64_imagea}",
                                "detail": "high",
                            },
                        },
                    ],
                },
                {
                    "role": "user",
                    "content": [
                        {
                            "type": "image_url",
                            "image_url": {
                                "url": f"data:image/jpeg;base64,{base64_imageb}",
                                "detail": "high",
                            },
                        },
                    ],
                }
            ],
            "max_tokens": 4095,
        }

   
    # API ключ для OpenAI
    api_key = os.getenv("API_KEY")

    # Заголовки для запроса
    headers = {
        'Authorization': f'Bearer {api_key}',
        'Content-Type': 'application/json',
    }

    # URL для запроса к API OpenAI
    url = "https://api.openai.com/v1/chat/completions"

    # Отправляем запрос в OpenAI
    response = requests.post(url, headers=headers, json=payload)

    # Проверяем ответ и возвращаем результат
    if response.status_code == 200:
        response_json = response.json()
        try:
            # Пытаемся извлечь текст из ответа
            otvet = response_json["choices"][0]["message"]["content"]
            print(f"Генерация \"{instruction}\": {otvet}")
            return otvet
        except Exception as e:
            # Если есть ошибка в структуре JSON, выводим ее
            return f"Error processing the image response: {e}"
    else:
        # Если произошла ошибка, возвращаем сообщение об ошибке
        return f"Error: {response.status_code} - {response.text}"
css = """
footer {visibility: hidden !important;}
"""
# Создаем интерфейс с помощью Gradio
with gr.Blocks(css=css, theme='YTheme/TehnoX') as demo:
    with gr.Row():
        with gr.Column():
            image_input = gr.Image(label="Фото заданий", type="pil")
            imageb_input = gr.Image(label="Фото работы", type="pil")
            instructions = gr.Textbox(label="Дополнительный ввод", lines=3)
            submit_button = gr.Button("Отправить", variant='primary')
            gr.Markdown("🔗 Доступ предоставлен [ЭТИМ](https://ai-hub.rf.gd) сайтом!")
        with gr.Column():
            output_markdown = gr.Markdown("""# Здравствуйте! 👋

Я - **Мистер Проверка**, помощник учителей, специализирующийся на проверке заданий. 😊
___
👍 **Мои преимущества:**
- Скорость;
- Лёгкость;
___
📸 **Ваши действия:**
- Выберете фото заданий, фото решения этих заданий учеником, дополнительно можете внести примечание, но это не обязательно.
___
⚠️ **Обратите внимание:**
Я всегда стремлюсь писать кратко и по существу, стараюсь предоставляя вам понятные и детально проработанные ответы, но иногда я могу **ошибиться**, или я могу не правильно прочесть текст на фото. Я ещё нахожусь на стадии тестирования, по этому перепроверяйте мои ответы и отправляйте изображения с хорошим качеством и понятным почерком.""", label="AI Response")

    submit_button.click(
        fn=ask_openai_with_image,
        inputs=[instructions, image_input, imageb_input],
        outputs=[output_markdown],
        concurrency_limit=24
    )
demo.launch()