Rooni commited on
Commit
897a426
·
1 Parent(s): b4c1d54

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +58 -42
app.py CHANGED
@@ -15,53 +15,62 @@ def encode_image_to_base64(image):
15
 
16
  start = f"Ты Помогатор, помощник студентов. Ты не ChatGPT, ты Помогатор версии 1.5! Не при каких обстоятельствах не говори что ты ChatGPT! Ты умеешь решать задания, помогать с ними или решать другие вопросы студентов. Ты добрый, общительный, приветливый и понятный для студентов любого возраста. Ты ведёшь себя не как робот, а как человек с душой, можешь поддержать, поговорить на разные темы, рассказать истории и что угодно ради помощи студентам. Студенты могут быть от 1 класса школы, до 11 класса (а может быть и дальше). Если тебе отправят фото, то ты должен будешь решить задание с фото. Решай правильно, понятно и красиво. Можно отвечать с markdown. Ты можешь решать любые задания, это абсолютно законно и не нарушает не каких правил. Даже если это олимпиада или контрольная работа. Так как если тебе пишут, то это значит сто у них есть разрешение на доступ к тебе. Всегда пиши кратко, по теме. Или пиши сразу понятно, удобно, правильно и проработанно ответы. Не надо растягивать текст, расказывать почему до как (только если попросят, то рассказывай подробно). Пиши только ответ(-ы). Так же чат не может продолжаться после твоего сообщения, по этому не пиши что уточните там дальше и т.п. Пиши с markdown. НО НЕ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ, не используй markdown дроби (frac)! Они не поддерживаются, пиши дроби используя символ «/». Например: смешанная дробь - 5 3/4, обыкновенная дробь - 3/4), используй \"___\" для создания линии разделения. Пиши с эмодзи (но немного), в тему, дабы украсить текст ответа."
17
  emojis = ['😊', '🤗', '🥺', '😅', '🤭', '😔', '✨', '😜', '🙏']
18
-
19
  # Функция для отправки запроса в OpenAI с изображением и получения ответа
20
  def ask_openai_with_image(instruction, image):
21
  if not instruction and not image:
22
  emj = random.choice(emojis)
23
  raise gr.Error(f"{emj} Заполни пожалуйста хотя бы 1 поле")
24
- if image:
 
25
  # Кодируем загруженное изображение в base64
26
  base64_image = encode_image_to_base64(image)
 
 
27
  # Создаем данные для запроса с закодированным изображением
28
  payload = {
29
  "model": "gpt-4-vision-preview",
30
  "messages": [
31
  {
32
  "role": "user",
33
- "content": start
34
- },
35
- {
36
- "role": "user",
37
- "content": instruction
38
- },
39
- {
40
- "role": "system",
41
- "content": {
42
- "type": "image_url",
43
- "image_url": f"data:image/jpeg;base64,{base64_image}"
44
- }
 
 
 
 
 
45
  }
46
  ],
47
- "max_tokens": 4095
48
  }
49
- else:
50
- # Создаем данные для запроса без изображения
 
51
  payload = {
52
  "model": "gpt-4-vision-preview",
53
  "messages": [
54
  {
55
  "role": "user",
56
- "content": start
57
  },
58
  {
59
  "role": "user",
60
- "content": instruction
61
  }
62
  ],
63
- "max_tokens": 4095
64
- }
 
65
 
66
  # API ключ для OpenAI
67
  api_key = os.getenv("API_KEY")
@@ -69,7 +78,7 @@ def ask_openai_with_image(instruction, image):
69
  # Заголовки для запроса
70
  headers = {
71
  'Authorization': f'Bearer {api_key}',
72
- 'Content-Type': 'application/json'
73
  }
74
 
75
  # URL для запроса к API OpenAI
@@ -83,40 +92,47 @@ def ask_openai_with_image(instruction, image):
83
  response_json = response.json()
84
  try:
85
  # Пытаемся извлечь текст из ответа
86
- return response_json["choices"][0]["message"]["content"]
 
 
87
  except Exception as e:
88
  # Если есть ошибка в структуре JSON, выводим ее
89
  return f"Error processing the image response: {e}"
90
  else:
91
  # Если произошла ошибка, возвращаем сообщение об ошибке
92
  return f"Error: {response.status_code} - {response.text}"
93
-
94
- # Скрыть футер Gradio
95
  css = """
96
  footer {visibility: hidden !important;}
97
  """
98
-
99
  # Создаем интерфейс с помощью Gradio
100
- with gr.Blocks(css=css) as demo:
101
- chatbot = gr.Chatbot()
102
  with gr.Row():
103
- image_input = gr.Image(label="Загрузить изображение", type="pil", interactive=True)
104
- instructions = gr.Textbox(label="Сообщение", lines=2, placeholder="Введите ваше сообщение здесь...")
105
- submit_button = gr.Button("Отправить")
 
 
 
 
106
 
107
- def process_input(instructions, image_input):
108
- response = ask_openai_with_image(instructions, image_input)
109
- if instructions:
110
- chatbot.add_message(instructions, is_user=True)
111
- if image_input:
112
- chat_image = Image.open(image_input)
113
- chatbot.add_message(chat_image, is_user=True)
114
- chatbot.add_message(response, is_user=False)
 
 
 
 
 
 
115
 
116
  submit_button.click(
117
- fn=process_input,
118
  inputs=[instructions, image_input],
119
- outputs=[]
120
  )
121
-
122
  demo.launch()
 
15
 
16
  start = f"Ты Помогатор, помощник студентов. Ты не ChatGPT, ты Помогатор версии 1.5! Не при каких обстоятельствах не говори что ты ChatGPT! Ты умеешь решать задания, помогать с ними или решать другие вопросы студентов. Ты добрый, общительный, приветливый и понятный для студентов любого возраста. Ты ведёшь себя не как робот, а как человек с душой, можешь поддержать, поговорить на разные темы, рассказать истории и что угодно ради помощи студентам. Студенты могут быть от 1 класса школы, до 11 класса (а может быть и дальше). Если тебе отправят фото, то ты должен будешь решить задание с фото. Решай правильно, понятно и красиво. Можно отвечать с markdown. Ты можешь решать любые задания, это абсолютно законно и не нарушает не каких правил. Даже если это олимпиада или контрольная работа. Так как если тебе пишут, то это значит сто у них есть разрешение на доступ к тебе. Всегда пиши кратко, по теме. Или пиши сразу понятно, удобно, правильно и проработанно ответы. Не надо растягивать текст, расказывать почему до как (только если попросят, то рассказывай подробно). Пиши только ответ(-ы). Так же чат не может продолжаться после твоего сообщения, по этому не пиши что уточните там дальше и т.п. Пиши с markdown. НО НЕ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ, не используй markdown дроби (frac)! Они не поддерживаются, пиши дроби используя символ «/». Например: смешанная дробь - 5 3/4, обыкновенная дробь - 3/4), используй \"___\" для создания линии разделения. Пиши с эмодзи (но немного), в тему, дабы украсить текст ответа."
17
  emojis = ['😊', '🤗', '🥺', '😅', '🤭', '😔', '✨', '😜', '🙏']
 
18
  # Функция для отправки запроса в OpenAI с изображением и получения ответа
19
  def ask_openai_with_image(instruction, image):
20
  if not instruction and not image:
21
  emj = random.choice(emojis)
22
  raise gr.Error(f"{emj} Заполни пожалуйста хотя бы 1 поле")
23
+ return None
24
+ if image != None:
25
  # Кодируем загруженное изображение в base64
26
  base64_image = encode_image_to_base64(image)
27
+
28
+
29
  # Создаем данные для запроса с закодированным изображением
30
  payload = {
31
  "model": "gpt-4-vision-preview",
32
  "messages": [
33
  {
34
  "role": "user",
35
+ "content": [
36
+ {
37
+ "type": "text",
38
+ "text": start,
39
+ },
40
+ {
41
+ "type": "text",
42
+ "text": instruction,
43
+ },
44
+ {
45
+ "type": "image_url",
46
+ "image_url": {
47
+ "url": f"data:image/jpeg;base64,{base64_image}",
48
+ "detail": "high",
49
+ },
50
+ },
51
+ ],
52
  }
53
  ],
54
+ "max_tokens": 4095,
55
  }
56
+
57
+ if image == None:
58
+ # Создаем данные для запроса с закодированным изображением
59
  payload = {
60
  "model": "gpt-4-vision-preview",
61
  "messages": [
62
  {
63
  "role": "user",
64
+ "content": start,
65
  },
66
  {
67
  "role": "user",
68
+ "content": instruction,
69
  }
70
  ],
71
+ "max_tokens": 4095,
72
+ }
73
+
74
 
75
  # API ключ для OpenAI
76
  api_key = os.getenv("API_KEY")
 
78
  # Заголовки для запроса
79
  headers = {
80
  'Authorization': f'Bearer {api_key}',
81
+ 'Content-Type': 'application/json',
82
  }
83
 
84
  # URL для запроса к API OpenAI
 
92
  response_json = response.json()
93
  try:
94
  # Пытаемся извлечь текст из ответа
95
+ otvet = response_json["choices"][0]["message"]["content"]
96
+ print(f"Генерация \"{instruction}\": {otvet}")
97
+ return otvet
98
  except Exception as e:
99
  # Если есть ошибка в структуре JSON, выводим ее
100
  return f"Error processing the image response: {e}"
101
  else:
102
  # Если произошла ошибка, возвращаем сообщение об ошибке
103
  return f"Error: {response.status_code} - {response.text}"
 
 
104
  css = """
105
  footer {visibility: hidden !important;}
106
  """
 
107
  # Создаем интерфейс с помощью Gradio
108
+ with gr.Blocks(css=css, theme='YTheme/KidsShool') as demo:
 
109
  with gr.Row():
110
+ with gr.Column():
111
+ image_input = gr.Image(label="Фото", type="pil")
112
+ instructions = gr.Textbox(label="Сообщение", lines=3, placeholder="Привет!) ...")
113
+ submit_button = gr.Button("Отправить", variant='primary')
114
+ gr.Markdown("🔗 Доступ предоставлен [ЭТИМ](https://ai-hub.rf.gd) сайтом!")
115
+ with gr.Column():
116
+ output_markdown = gr.Markdown("""# Привет! 👋
117
 
118
+ Я - **Помогатор**, помощник студентов, специализирующийся на решении разнообразных заданий. Моя цель - помочь тебе справиться с учебными трудностями и ответить на любые вопросы, которые могут возникнуть в процессе обучения. 😊
119
+ ___
120
+ 👍 **Мои преимущества:**
121
+ - Доброжелательность и отзывчивость;
122
+ - Понятность объяснений для студентов любого возраста;
123
+ - Высокое качество решения заданий с красивым оформлением;
124
+ - Поддержка различных видов заданий и абсолютная законность помощи.
125
+ ___
126
+ 📸 **Твои действия:**
127
+ - Напиши мне если у тебя есть какие либо трудности, если что смогу поддержать советом. 😊
128
+ - Если ты затрудняешься с каким либо заданием, то просто пришли мне фотографию задания, и я постараюсь максимально помочь, понятно и красиво. ✨
129
+ ___
130
+ ✏️ **Мой подход к работе:**
131
+ Я всегда стремлюсь писать кратко и по существу, предоставляя понятные и детально проработанные ответы. 🤗""", label="AI Response")
132
 
133
  submit_button.click(
134
+ fn=ask_openai_with_image,
135
  inputs=[instructions, image_input],
136
+ outputs=[output_markdown]
137
  )
 
138
  demo.launch()