Spaces:
Sleeping
Sleeping
File size: 5,423 Bytes
f63951f 99ad768 744e6f0 f63951f 744e6f0 736ad01 744e6f0 9a23556 3a321d0 4c53185 59138c4 9a23556 744e6f0 9a23556 744e6f0 9a23556 24f8d0e fa58932 9a23556 585a967 9a23556 fa58932 4f5052d 9a23556 fa58932 744e6f0 99ad768 897a426 585a967 99ad768 261ffd6 744e6f0 4c53185 744e6f0 9a23556 744e6f0 9a23556 24f8d0e 59138c4 744e6f0 1b7b770 744e6f0 9a23556 744e6f0 8e50014 9a23556 744e6f0 9a23556 744e6f0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
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 = ['😊', '🤗', '🥺', '😅', '🤭', '😔', '✨', '😜', '🙏']
api_key = os.getenv("OPENAI_API_KEY")
BASE_URL = os.getenv("BASE_URL")
# Текст начального сообщения
start = "Приветствую тебя! 🌟 Ты - \"Помогатор 1.5\". Твоя миссия - помогать студентам, делая учебный процесс весёлым и интерактивным с помощью стильного общения и эмодзи. 🎓😊 Когда студенты просят помощи, ты подробно объясняешь им материал, используя примеры и аналогии. Но если они просят 'РЕШИТЬ', ты переключаешься в режим решения и предоставляешь точные ответы, делая упор на краткость и точность. 🧮✅ Если тебе присылают фото задания, ты тщательно его анализируешь и решаешь, предоставляя решение в понятной форме и используя дробную черту '/' для записи дробей. 🖼️➗ Твоя цель - не просто дать ответы, но и обучить, однако ты всегда готов решить задачу, когда это необходимо. Приступим? 🚀🌈"
# Функция для отправки запроса в OpenAI с изображением и получения ответа
def ask_openai_with_image(instruction, image):
if not instruction and image is None:
emj = random.choice(emojis)
raise gr.Error(f"{emj} Заполни пожалуйста хотя бы одно поле")
if image is not None:
# Кодируем загруженное изображение в base64
base64_image = encode_image_to_base64(image)
payload = {
"model": "gpt-4-vision-preview",
"messages": [
{
"role": "system",
"content": start,
},
{
"role": "user",
"content": [
{
"type": "text",
"text": instruction if instruction else "",
},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image}",
"detail": "high",
},
},
],
}
],
"max_tokens": 4095,
}
else:
payload = {
"model": "gpt-4-vision-preview",
"messages": [
{
"role": "system",
"content": start,
},
{
"role": "user",
"content": instruction if instruction else "",
}
],
"max_tokens": 4095,
}
# Заголовки для запроса
headers = {
'Content-Type': 'application/json',
'Authorization': f'Bearer {api_key}'
}
# URL для запроса к API OpenAI
url = BASE_URL
# Отправляем запрос в OpenAI
response = requests.post(url, headers=headers, json=payload)
# Проверяем ответ и возвращаем результат
if response.status_code == 200:
response_json = response.json()
try:
# Пытаемся извлечь текст из ответа
otvet = response_json["choices"][0]["message"]["content"]
return otvet
except Exception as e:
# Если есть ошибка в структуре JSON, выводим ее
return f"Error processing the image response: {e}"
else:
# Если произошла ошибка, возвращаем сообщение об ошибке
return f"Error: {response.status_code} - {response.text}"
css = """
footer {visibility: hidden !important;}
"""
# Создаем интерфейс с помощью Gradio
with gr.Blocks(css=css, theme='YTheme/SmartLearn') as demo:
with gr.Row():
with gr.Column():
image_input = gr.Image(label="Фото", type="pil")
instructions = gr.Textbox(label="Сообщение", lines=3, placeholder="Привет!) ...")
submit_button = gr.Button("Отправить", variant='primary')
gr.Markdown("🔗 Доступ предоставлен [ЭТИМ](https://ai-hub.rf.gd) сайтом!")
with gr.Column():
output_markdown = gr.Markdown(label="AI Response")
submit_button.click(
fn=ask_openai_with_image,
inputs=[instructions, image_input],
outputs=[output_markdown],
concurrency_limit=200
)
demo.launch() |