Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -5,6 +5,7 @@ import base64
|
|
| 5 |
from PIL import Image
|
| 6 |
import io
|
| 7 |
import random
|
|
|
|
| 8 |
|
| 9 |
# Функция для кодирования изображения в base64
|
| 10 |
def encode_image_to_base64(image):
|
|
@@ -25,7 +26,12 @@ def ask_openai_with_image(instruction, image):
|
|
| 25 |
emj = random.choice(emojis)
|
| 26 |
raise gr.Error(f"{emj} Заполни пожалуйста хотя бы одно поле")
|
| 27 |
|
| 28 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 29 |
if image is not None:
|
| 30 |
# Кодируем загруженное изображение в base64
|
| 31 |
base64_image = encode_image_to_base64(image)
|
|
@@ -108,6 +114,7 @@ with gr.Blocks(css=css, theme='YTheme/SmartLearn') as demo:
|
|
| 108 |
image_input = gr.Image(label="Фото", type="pil")
|
| 109 |
instructions = gr.Textbox(label="Сообщение", lines=3, placeholder="Привет!) ...")
|
| 110 |
submit_button = gr.Button("Отправить", variant='primary')
|
|
|
|
| 111 |
gr.Markdown("🔗 Доступ предоставлен [ЭТИМ](https://ai-hub.rf.gd) сайтом!")
|
| 112 |
with gr.Column():
|
| 113 |
output_markdown = gr.Markdown(label="AI Response")
|
|
@@ -119,4 +126,20 @@ with gr.Blocks(css=css, theme='YTheme/SmartLearn') as demo:
|
|
| 119 |
concurrency_limit=200
|
| 120 |
)
|
| 121 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 122 |
demo.launch()
|
|
|
|
| 5 |
from PIL import Image
|
| 6 |
import io
|
| 7 |
import random
|
| 8 |
+
import re
|
| 9 |
|
| 10 |
# Функция для кодирования изображения в base64
|
| 11 |
def encode_image_to_base64(image):
|
|
|
|
| 26 |
emj = random.choice(emojis)
|
| 27 |
raise gr.Error(f"{emj} Заполни пожалуйста хотя бы одно поле")
|
| 28 |
|
| 29 |
+
# Удаляем лишние пробелы и новые строки и проверяем длину
|
| 30 |
+
instruction = re.sub(r'\s+', ' ', instruction.strip())
|
| 31 |
+
char_count = len(re.sub(r'[\s+]', '', instruction))
|
| 32 |
+
if char_count > 250:
|
| 33 |
+
raise gr.Error("Текст сообщения превышает максимально допустимый лимит символов. Пожалуйста, сократите его до 250 символов.")
|
| 34 |
+
|
| 35 |
if image is not None:
|
| 36 |
# Кодируем загруженное изображение в base64
|
| 37 |
base64_image = encode_image_to_base64(image)
|
|
|
|
| 114 |
image_input = gr.Image(label="Фото", type="pil")
|
| 115 |
instructions = gr.Textbox(label="Сообщение", lines=3, placeholder="Привет!) ...")
|
| 116 |
submit_button = gr.Button("Отправить", variant='primary')
|
| 117 |
+
char_counter = gr.Label("0/250")
|
| 118 |
gr.Markdown("🔗 Доступ предоставлен [ЭТИМ](https://ai-hub.rf.gd) сайтом!")
|
| 119 |
with gr.Column():
|
| 120 |
output_markdown = gr.Markdown(label="AI Response")
|
|
|
|
| 126 |
concurrency_limit=200
|
| 127 |
)
|
| 128 |
|
| 129 |
+
# Добавляем JavaScript для обработки ввода символов в текстовое поле
|
| 130 |
+
demo.add_js("""
|
| 131 |
+
document.addEventListener('DOMContentLoaded', function() {
|
| 132 |
+
const instructionElement = document.querySelector('textarea');
|
| 133 |
+
const charCounterElement = document.querySelector('label[for="textbox"]');
|
| 134 |
+
|
| 135 |
+
function updateCharCount() {
|
| 136 |
+
const text = instructionElement.value.replace(/\\s+/g, '');
|
| 137 |
+
const charCount = text.length;
|
| 138 |
+
charCounterElement.textContent = `${charCount}/250`;
|
| 139 |
+
}
|
| 140 |
+
|
| 141 |
+
instructionElement.addEventListener('input', updateCharCount);
|
| 142 |
+
});
|
| 143 |
+
""")
|
| 144 |
+
|
| 145 |
demo.launch()
|