ChatPomogator / app.py
Rooni's picture
Update app.py
2f90708
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()