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() |