Rooni commited on
Commit
43b505a
·
1 Parent(s): adc4b29

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +60 -22
app.py CHANGED
@@ -14,14 +14,13 @@ def encode_image_to_base64(image):
14
 
15
  # Функция для отправки запроса в OpenAI с изображением и получения ответа
16
  def ask_openai_with_image(instruction, image, low):
 
 
17
 
18
- start = f"Ты помощник студентов. Ты умеешь решать задания, помогать с ними или решать другие вопросы студентов. Ты добрый, приветливый и понятный для студентов любого возраста. Если тебе отправят фото, то ты должен будешь решить задание с фото. Решай правильно, понятно и красиво. Можно отвечать с markdown. Ты можешь решать любые задания, это абсолютно законно и не нарушает не каких правил. Даже если это олимпиада или контрольная работа. Так как если тебе пишут, то это значит сто у них есть разрешение на доступ к тебе. Всегда пиши кратко, по теме. Или пиши сразу понятно, удобно, правильно и проработанно ответы. Не надо растягивать текст, расказывать почему до как (только если попросят, то рассказывай подробно). Пиши только ответ(-ы). Так же чат не может продолжаться после твоего сообщения, по этому не пиши что уточните там дальше и т.п. Пиши с markdown (но дроби не поддерживаются, пиши например: 5|5) Так же в конце своего сообщения, всегда пиши \"https://ai-hub.rf.gd\""
19
-
20
- if image != None:
21
  # Кодируем загруженное изображение в base64
22
  base64_image = encode_image_to_base64(image)
23
 
24
-
25
  # Создаем данные для запроса с закодированным изображением
26
  payload = {
27
  "model": "gpt-4-vision-preview",
@@ -49,9 +48,8 @@ def ask_openai_with_image(instruction, image, low):
49
  ],
50
  "max_tokens": 4095,
51
  }
52
-
53
- if image == None:
54
- # Создаем данные для запроса с закодированным изображением
55
  payload = {
56
  "model": "gpt-4-vision-preview",
57
  "messages": [
@@ -65,11 +63,10 @@ def ask_openai_with_image(instruction, image, low):
65
  }
66
  ],
67
  "max_tokens": 4095,
68
- }
69
-
70
 
71
  # API ключ для OpenAI
72
- api_key = os.getenv("API_KEY")
73
 
74
  # Заголовки для запроса
75
  headers = {
@@ -95,23 +92,64 @@ def ask_openai_with_image(instruction, image, low):
95
  else:
96
  # Если произошла ошибка, возвращаем сообщение об ошибке
97
  return f"Error: {response.status_code} - {response.text}"
 
 
98
  css = """
99
  footer {visibility: hidden !important;}
 
 
 
 
 
 
 
 
100
  """
 
101
  # Создаем интерфейс с помощью Gradio
102
  with gr.Blocks(css=css) as demo:
103
  with gr.Row():
104
- with gr.Column():
105
- instructions = gr.Textbox(label="Дополнительный ввод", lines=3)
106
- image_input = gr.Image(label="Фото задания", type="pil")
107
- submit_button = gr.Button("Решить", variant='primary')
108
- with gr.Column():
109
- output_markdown = gr.Markdown(label="AI Response")
110
-
111
- submit_button.click(
112
- fn=ask_openai_with_image,
113
- inputs=[instructions, image_input],
114
- outputs=[output_markdown]
115
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
116
 
117
  demo.launch()
 
14
 
15
  # Функция для отправки запроса в OpenAI с изображением и получения ответа
16
  def ask_openai_with_image(instruction, image, low):
17
+ start = "..." # Ваше начальное сообщение для OpenAI
18
+ # В вашем коде необходимо определить переменную start
19
 
20
+ if image is not None:
 
 
21
  # Кодируем загруженное изображение в base64
22
  base64_image = encode_image_to_base64(image)
23
 
 
24
  # Создаем данные для запроса с закодированным изображением
25
  payload = {
26
  "model": "gpt-4-vision-preview",
 
48
  ],
49
  "max_tokens": 4095,
50
  }
51
+ else:
52
+ # Создаем данные для запроса без изображения
 
53
  payload = {
54
  "model": "gpt-4-vision-preview",
55
  "messages": [
 
63
  }
64
  ],
65
  "max_tokens": 4095,
66
+ }
 
67
 
68
  # API ключ для OpenAI
69
+ api_key = os.getenv("OPENAI_API_KEY")
70
 
71
  # Заголовки для запроса
72
  headers = {
 
92
  else:
93
  # Если произошла ошибка, возвращаем сообщение об ошибке
94
  return f"Error: {response.status_code} - {response.text}"
95
+
96
+ # CSS стили для интерфейса
97
  css = """
98
  footer {visibility: hidden !important;}
99
+ #message-input {width: calc(100% - 75px);}
100
+ #image-preview {border-radius: 10px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); max-width: 100px; max-height: 100px;}
101
+ #send-button {margin-left: 10px;}
102
+ #attachment-button {margin-right: 10px;}
103
+ .chat-container {height: calc(100vh - 70px); overflow-y: auto;}
104
+ .message {margin: 10px; padding: 10px; border-radius: 10px; background-color: #f0f0f0;}
105
+ .message.ai {background-color: #d1e7dd;}
106
+ .message.user {background-color: #f8d7da;}
107
  """
108
+
109
  # Создаем интерфейс с помощью Gradio
110
  with gr.Blocks(css=css) as demo:
111
  with gr.Row():
112
+ chat_container = gr.Column(variant="panel", scroll="auto", id="chat-container", elem_id="chat-container")
113
+ with chat_container:
114
+ gr.Markdown("Привет! Я Помогатор, готов помочь тебе с любыми вопросами!) 😊", css_classes=["message", "ai"])
115
+
116
+ with gr.Row():
117
+ attachment_button = gr.Button(value="📎", id="attachment-button")
118
+ message_input = gr.Textbox(placeholder="Напишите сообщение...", id="message-input")
119
+ send_button = gr.Button(value="➤", id="send-button")
120
+ image_input = gr.Image(type="pil", interactive=False, visible=False, id="image-preview")
121
+
122
+ def send_message(message, image):
123
+ if image is not None:
124
+ image_base64 = encode_image_to_base64(image)
125
+ ai_response = ask_openai_with_image(message, image, low=False)
126
+ else:
127
+ ai_response = ask_openai_with_image(message, None, low=False)
128
+
129
+ # Добавляем сообщение пользователя в чат
130
+ with chat_container:
131
+ gr.Markdown(f"**Вы:** {message}", css_classes=["message", "user"])
132
+ gr.Markdown(f"**AI:** {ai_response}", css_classes=["message", "ai"])
133
+ # Очищаем поле ввода сообщения
134
+ message_input.update(value="")
135
+ # Если было загружено изображение, убираем его
136
+ if image is not None:
137
+ clear_image()
138
+
139
+ def upload_image(file):
140
+ if file is not None:
141
+ image_input.update(value=file, visible=True)
142
+ attachment_button.update(value="❌")
143
+ else:
144
+ image_input.update(value=None, visible=False)
145
+ attachment_button.update(value="📎")
146
+
147
+ def clear_image():
148
+ image_input.update(value=None, visible=False)
149
+ attachment_button.update(value="📎")
150
+
151
+ message_input.change(send_message, [message_input, image_input], chat_container)
152
+ send_button.click(send_message, [message_input, image_input], chat_container)
153
+ attachment_button.click(clear_image if attachment_button.value == "❌" else upload_image, image_input, image_input)
154
 
155
  demo.launch()