Rooni commited on
Commit
2f90708
·
1 Parent(s): 2fe7928

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +22 -28
app.py CHANGED
@@ -16,62 +16,56 @@ def encode_image_to_base64(image):
16
  emojis = ['😊', '🤗', '🥺', '😅', '🤭', '😔', '✨', '😜', '🙏']
17
 
18
  # Функция для отправки запроса в OpenAI с изображением и получения ответа
19
- def ask_openai_with_image(history, instruction, image):
 
 
 
 
 
 
 
 
 
20
  if image:
21
  # Кодируем загруженное изображение в base64
22
  base64_image = encode_image_to_base64(image)
23
- image_payload = {
24
- "type": "image_url",
25
- "image_url": {
26
- "url": f"data:image/jpeg;base64,{base64_image}",
27
- "detail": "high",
28
- },
29
- }
30
- history.append(("user", image_payload))
31
-
32
- if instruction:
33
- history.append(("user", instruction))
34
 
35
- if not instruction and not image:
36
- emj = random.choice(emojis)
37
- raise gr.Error(f"{emj} Заполни пожалуйста хотя бы 1 поле")
38
-
39
  # Здесь должен быть код для отправки запроса в OpenAI с историей и возвращения ответа
40
  # ...
41
 
42
- # Для демонстрации вернем просто историю
 
43
  return history
44
 
45
  # Создаем интерфейс с помощью Gradio
46
  with gr.Blocks(theme='YTheme/KidsShool') as demo:
47
  with gr.Row():
48
  with gr.Column():
49
- chat = gr.Chatbot(label="Чат с историей", history=[])
50
- instruction_input = gr.Textbox(label="Сообщение", lines=3, visible=False)
51
  image_input = gr.Image(label="Загрузить изображение", type="pil", visible=False)
52
  submit_button = gr.Button("Отправить", variant='primary')
53
- with gr.Column():
54
- output_markdown = gr.Markdown()
55
 
56
  # Соединяем кнопку и функцию
57
  submit_button.click(
58
  fn=ask_openai_with_image,
59
- inputs=[chat, instruction_input, image_input],
60
  outputs=[chat]
61
  )
62
 
63
  # Когда пользователь отправляет сообщение в чате, заполняем текстовое поле и нажимаем кнопку отправки
64
  chat.change(
65
- fn=lambda history, text: (history.append(("user", text)), "", ""),
66
- inputs=[chat, chat.text],
67
- outputs=[chat, instruction_input, image_input]
68
  )
69
 
70
  # Когда пользователь загружает изображение, заполняем поле изображения и нажимаем кнопку отправки
71
  chat.upload(
72
- fn=lambda history, file: (history, file),
73
- inputs=[chat, chat.file],
74
- outputs=[chat, image_input]
75
  )
76
 
77
  demo.launch()
 
16
  emojis = ['😊', '🤗', '🥺', '😅', '🤭', '😔', '✨', '😜', '🙏']
17
 
18
  # Функция для отправки запроса в OpenAI с изображением и получения ответа
19
+ def ask_openai_with_image(instructions, image):
20
+ if not instructions and not image:
21
+ emj = random.choice(emojis)
22
+ return [{"text": f"{emj} Заполни пожалуйста хотя бы 1 поле", "sender": "bot"}]
23
+
24
+ history = []
25
+
26
+ if instructions:
27
+ history.append({"text": instructions, "sender": "user"})
28
+
29
  if image:
30
  # Кодируем загруженное изображение в base64
31
  base64_image = encode_image_to_base64(image)
32
+ history.append({"image": f"data:image/jpeg;base64,{base64_image}", "sender": "user"})
 
 
 
 
 
 
 
 
 
 
33
 
 
 
 
 
34
  # Здесь должен быть код для отправки запроса в OpenAI с историей и возвращения ответа
35
  # ...
36
 
37
+ # Для демонстрации вернем историю с добавлением фиктивного ответа от бота
38
+ history.append({"text": "Вот что я нашел по вашему запросу...", "sender": "bot"})
39
  return history
40
 
41
  # Создаем интерфейс с помощью Gradio
42
  with gr.Blocks(theme='YTheme/KidsShool') as demo:
43
  with gr.Row():
44
  with gr.Column():
45
+ chat = gr.Chat()
46
+ instruction_input = gr.Textbox(label="Сообщение", lines=3, placeholder="Напишите что-нибудь...", visible=False)
47
  image_input = gr.Image(label="Загрузить изображение", type="pil", visible=False)
48
  submit_button = gr.Button("Отправить", variant='primary')
 
 
49
 
50
  # Соединяем кнопку и функцию
51
  submit_button.click(
52
  fn=ask_openai_with_image,
53
+ inputs=[instruction_input, image_input],
54
  outputs=[chat]
55
  )
56
 
57
  # Когда пользователь отправляет сообщение в чате, заполняем текстовое поле и нажимаем кнопку отправки
58
  chat.change(
59
+ fn=lambda text: (text, ""),
60
+ inputs=[chat.text],
61
+ outputs=[instruction_input, image_input]
62
  )
63
 
64
  # Когда пользователь загружает изображение, заполняем поле изображения и нажимаем кнопку отправки
65
  chat.upload(
66
+ fn=lambda file: ("", file),
67
+ inputs=[chat.file],
68
+ outputs=[instruction_input, image_input]
69
  )
70
 
71
  demo.launch()