Files
iiEsaywebUI/scripts/test_vision.sh
2026-02-19 18:12:09 +00:00

143 lines
7.4 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# Скрипт для тестирования vision capabilities модели gemma3n:e4b-it-fp16
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
TEST_DIR="$PROJECT_DIR/test_images"
IMAGE_URL="https://yandex-images.clstorage.net/PU5vN2154/532297ZKm/lCuSfyMn0DdbJqcFVeFiB9Ti31Te2dZ1EepiRw3Cs0Qw8cQ1ND5OQRKC1yH4LnhdRtloQ4aXHng5ZSLNmXHy_8k293YSMsBWKnOvYAXBbhPcl6pYmqi-ZGWDazZo2pYkJNHpkJHrg5yiO0bEOIeEICe5cFqrojYgyNQ6mHj4e5IUb_Lri3uxo9fmXv0dMf7f1NvH9J5YVsyhRvvmtD9eTc1QfVxV42d8OotKrLTDfHx7jfDqjpIqHAyt9ngIIHsSjLtOJ7_jTYdHLn4hJWlCj_jj69gGlApIBYaTfoxPrtHFDGlYUd-PjHI3hijAm6hIb-lUFlpOehQAJTbwEGwjcqjjVns323WrR2q6CalVyg9kZ8s0jkBm8OVGr26UH86NHaD1rKnPH6zinwJIKBv8VEdF_FrGLt6QFOVqFOQY776w47YDNy8Biwfefg0lxVaL2E9L5NbAztwh8vuCcMNSEfG8aYQFBxe0Eu9CMPhz1Axz1dgqmkpSYCAR8nSA_GMSKKPa9-tzIUc7ooKthV1ykwSjrzhORKq0eRrvBlTbajF5yAUoVX-7XM7HouyU51xMaxFMBl7atixQFW4o1BznMoi_chuL8_mTO_IKce21CosEQ6Owkkhi9EGSz5pIE56NjURBxKn7pwTKt6K4FB_YYHexZG4qlsIg8GVaiJyIB0p0bx5PF4_FIy-SItWZId5f8M9_RIqg2hRVCqP2hDvSfWGAYUjJd6c8lr9mgGj7kPQbVQBCUgIm1NB9lsxQrIO-wO92fytbOQsjjiqBqa0CK9Qjy6wi6CoIfX5vZjw_pj1BKGm0UVOXuArPFngIN2AUgz3w4mZSTvz8IQYo_IhPVlQ7PiOjhyWD6wZSVZ3NDrvsC-8w4lxmzE32T1qMuy5JOTRxaNHHH0QCp4IkgMv8LH8JeJaOUj4sVOGCBBgQi5KMX74TQzOBW9cGTu35UZr3qAfj5O6kMogxjqNanMOs"
IMAGE_FILE="$TEST_DIR/test_image.jpg"
MODEL="gemma3n:e4b-it-fp16"
echo "=== Тестирование Vision Capabilities модели $MODEL ==="
echo ""
# Определяем команду docker (с sudo или без)
DOCKER_CMD="docker"
if ! docker ps >/dev/null 2>&1; then
DOCKER_CMD="sudo docker"
fi
# Проверка контейнера Ollama
echo "1. Проверка контейнера Ollama..."
if ! $DOCKER_CMD ps --format '{{.Names}}' 2>/dev/null | grep -q "^ollama$"; then
echo " ✗ Ошибка: Контейнер ollama не запущен"
echo " Запустите: docker compose up -d ollama"
exit 1
fi
echo " ✓ Контейнер ollama запущен"
# Проверка модели
echo ""
echo "2. Проверка загруженных моделей..."
MODELS=$($DOCKER_CMD exec ollama ollama list 2>/dev/null)
if echo "$MODELS" | grep -q "$MODEL"; then
echo " ✓ Модель $MODEL найдена"
echo "$MODELS" | grep "$MODEL"
else
echo " ✗ Модель $MODEL не найдена"
echo " Загрузите модель: docker exec ollama ollama pull $MODEL"
exit 1
fi
# Создаем директорию для тестовых изображений
mkdir -p "$TEST_DIR"
cd "$TEST_DIR"
# Скачиваем изображение
echo ""
echo "3. Подготовка тестового изображения..."
if [ ! -f "$IMAGE_FILE" ]; then
echo " Скачиваю изображение..."
curl -L -o "$IMAGE_FILE" "$IMAGE_URL" || {
echo " ✗ Ошибка: не удалось скачать изображение"
exit 1
}
echo " ✓ Изображение скачано: $IMAGE_FILE"
else
echo " ✓ Изображение уже существует: $IMAGE_FILE"
fi
# Проверяем размер файла
if [ -f "$IMAGE_FILE" ]; then
FILE_SIZE=$(stat -c%s "$IMAGE_FILE" 2>/dev/null || stat -f%z "$IMAGE_FILE" 2>/dev/null)
echo " Размер файла: $(numfmt --to=iec-i --suffix=B $FILE_SIZE 2>/dev/null || echo "${FILE_SIZE} bytes")"
# Проверяем тип файла
FILE_TYPE=$(file "$IMAGE_FILE" 2>/dev/null | cut -d: -f2)
echo " Тип файла: $FILE_TYPE"
fi
# Кодируем изображение в base64
echo ""
echo "4. Кодирование изображения в base64..."
IMAGE_B64=$(base64 -w 0 "$IMAGE_FILE" 2>/dev/null || base64 "$IMAGE_FILE" | tr -d '\n')
B64_LENGTH=${#IMAGE_B64}
echo " ✓ Изображение закодировано (длина: $B64_LENGTH символов)"
# Отправляем запрос к Ollama API
echo ""
echo "5. Отправка запроса к Ollama API..."
echo " Модель: $MODEL"
echo " Промпт: Опиши это изображение на русском языке. Что ты видишь на картинке?"
echo ""
# Отправляем запрос через Docker exec к Ollama API
# Используем временный файл для передачи большого base64
echo " Отправка запроса (это может занять некоторое время)..."
TEMP_FILE=$(mktemp)
cat > "$TEMP_FILE" <<EOF
{
"model": "$MODEL",
"prompt": "Опиши это изображение на русском языке. Что ты видишь на картинке?",
"images": ["$IMAGE_B64"],
"stream": false
}
EOF
# Копируем файл в контейнер и отправляем запрос
$DOCKER_CMD cp "$TEMP_FILE" ollama:/tmp/request.json >/dev/null 2>&1
RESPONSE=$($DOCKER_CMD exec ollama sh -c "curl -s --max-time 120 -X POST http://localhost:11434/api/generate \
-H 'Content-Type: application/json' \
-d @/tmp/request.json" 2>&1)
# Удаляем временный файл
rm -f "$TEMP_FILE"
# Проверяем ответ
if echo "$RESPONSE" | grep -q '"response"'; then
echo " ✓ Успешно! Ответ модели:"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
# Извлекаем ответ более надежным способом
echo "$RESPONSE" | python3 -c "import sys, json; data=json.load(sys.stdin); print(data.get('response', ''))" 2>/dev/null || \
echo "$RESPONSE" | grep -o '"response":"[^"]*"' | sed 's/"response":"\(.*\)"/\1/' | sed 's/\\n/\n/g' | sed 's/\\"/"/g' | head -20
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "=== ✓ Тест завершен успешно! Vision работает! ==="
elif echo "$RESPONSE" | grep -q "error\|Error\|ERROR"; then
echo " ✗ Ошибка при запросе к API:"
echo "$RESPONSE" | grep -i error || echo "$RESPONSE"
echo ""
echo "Проверьте:"
echo " 1. Логи Ollama: $DOCKER_CMD logs ollama --tail 30"
echo " 2. Поддерживает ли модель vision: $DOCKER_CMD exec ollama ollama show $MODEL"
else
echo " ⚠ Неожиданный ответ от API:"
echo "$RESPONSE"
echo ""
echo "Попробуйте проверить через веб-интерфейс Open WebUI"
fi
echo ""
echo "6. Инструкции для тестирования через веб-интерфейс:"
echo ""
echo " Шаг 1: Откройте Open WebUI: https://odo.iieasy.ru"
echo " Шаг 2: Выберите модель: $MODEL"
echo " Шаг 3: Найдите кнопку загрузки изображения в поле ввода (📎 или 📷)"
echo " Шаг 4: Загрузите изображение: $IMAGE_FILE"
echo " Шаг 5: Задайте вопрос: \"Опиши это изображение на русском языке. Что ты видишь?\""
echo ""
echo "Файл изображения: $IMAGE_FILE"