File size: 3,018 Bytes
374d0b6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2f90708
 
 
 
 
 
 
 
 
 
374d0b6
 
 
2f90708
374d0b6
1f5f8ac
 
374d0b6
2f90708
 
1f5f8ac
374d0b6
 
 
 
 
2f90708
 
1f5f8ac
374d0b6
 
 
 
 
2f90708
1f5f8ac
 
 
 
 
2f90708
 
 
1f5f8ac
 
 
 
2f90708
 
 
374d0b6
 
 
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
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

emojis = ['😊', '🤗', '🥺', '😅', '🤭', '😔', '✨', '😜', '🙏']

# Функция для отправки запроса в OpenAI с изображением и получения ответа
def ask_openai_with_image(instructions, image):
    if not instructions and not image:
        emj = random.choice(emojis)
        return [{"text": f"{emj} Заполни пожалуйста хотя бы 1 поле", "sender": "bot"}]

    history = []
    
    if instructions:
        history.append({"text": instructions, "sender": "user"})
        
    if image:
        # Кодируем загруженное изображение в base64
        base64_image = encode_image_to_base64(image)
        history.append({"image": f"data:image/jpeg;base64,{base64_image}", "sender": "user"})

    # Здесь должен быть код для отправки запроса в OpenAI с историей и возвращения ответа
    # ...

    # Для демонстрации вернем историю с добавлением фиктивного ответа от бота
    history.append({"text": "Вот что я нашел по вашему запросу...", "sender": "bot"})
    return history

# Создаем интерфейс с помощью Gradio
with gr.Blocks(theme='YTheme/KidsShool') as demo:
    with gr.Row():
        with gr.Column():
            chat = gr.Chat()
            instruction_input = gr.Textbox(label="Сообщение", lines=3, placeholder="Напишите что-нибудь...", visible=False)
            image_input = gr.Image(label="Загрузить изображение", type="pil", visible=False)
            submit_button = gr.Button("Отправить", variant='primary')
    
    # Соединяем кнопку и функцию
    submit_button.click(
        fn=ask_openai_with_image,
        inputs=[instruction_input, image_input],
        outputs=[chat]
    )

    # Когда пользователь отправляет сообщение в чате, заполняем текстовое поле и нажимаем кнопку отправки
    chat.change(
        fn=lambda text: (text, ""),
        inputs=[chat.text],
        outputs=[instruction_input, image_input]
    )

    # Когда пользователь загружает изображение, заполняем поле изображения и нажимаем кнопку отправки
    chat.upload(
        fn=lambda file: ("", file),
        inputs=[chat.file],
        outputs=[instruction_input, image_input]
    )

demo.launch()