Spaces:
Runtime error
Runtime error
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() |