Files
microdao-daarion/test-vision-encoder.sh

162 lines
5.0 KiB
Bash
Executable File

#!/bin/bash
# test-vision-encoder.sh - Smoke tests for Vision Encoder service
# Tests: health, model info, text embedding, image embedding, Router integration
set -e
BASE_URL="${VISION_ENCODER_URL:-http://localhost:8001}"
ROUTER_URL="${ROUTER_URL:-http://localhost:9102}"
echo "======================================"
echo "Vision Encoder Smoke Tests"
echo "======================================"
echo "Vision Encoder: $BASE_URL"
echo "DAGI Router: $ROUTER_URL"
echo ""
# Test 1: Health Check
echo "Test 1: Health Check"
echo "------------------------------------"
HEALTH=$(curl -s "$BASE_URL/health")
echo "$HEALTH" | jq .
STATUS=$(echo "$HEALTH" | jq -r '.status')
DEVICE=$(echo "$HEALTH" | jq -r '.device')
if [ "$STATUS" != "healthy" ]; then
echo "❌ FAIL: Service not healthy"
exit 1
fi
echo "✅ PASS: Service is healthy (device: $DEVICE)"
echo ""
# Test 2: Model Info
echo "Test 2: Model Info"
echo "------------------------------------"
INFO=$(curl -s "$BASE_URL/info")
echo "$INFO" | jq .
MODEL_NAME=$(echo "$INFO" | jq -r '.model_name')
EMBEDDING_DIM=$(echo "$INFO" | jq -r '.embedding_dim')
if [ "$EMBEDDING_DIM" -lt 512 ]; then
echo "❌ FAIL: Invalid embedding dimension: $EMBEDDING_DIM"
exit 1
fi
echo "✅ PASS: Model info retrieved (model: $MODEL_NAME, dim: $EMBEDDING_DIM)"
echo ""
# Test 3: Text Embedding
echo "Test 3: Text Embedding"
echo "------------------------------------"
TEXT_EMBED=$(curl -s -X POST "$BASE_URL/embed/text" \
-H "Content-Type: application/json" \
-d '{"text": "токеноміка DAARION city governance", "normalize": true}')
echo "$TEXT_EMBED" | jq '{dimension, model, normalized}'
TEXT_DIM=$(echo "$TEXT_EMBED" | jq -r '.dimension')
TEXT_NORMALIZED=$(echo "$TEXT_EMBED" | jq -r '.normalized')
if [ "$TEXT_DIM" != "$EMBEDDING_DIM" ]; then
echo "❌ FAIL: Text embedding dimension mismatch: $TEXT_DIM != $EMBEDDING_DIM"
exit 1
fi
if [ "$TEXT_NORMALIZED" != "true" ]; then
echo "❌ FAIL: Text embedding not normalized"
exit 1
fi
echo "✅ PASS: Text embedding generated (dim: $TEXT_DIM, normalized: $TEXT_NORMALIZED)"
echo ""
# Test 4: Image Embedding (using example image URL)
echo "Test 4: Image Embedding (from URL)"
echo "------------------------------------"
# Using a public test image
IMAGE_URL="https://raw.githubusercontent.com/pytorch/pytorch/main/docs/source/_static/img/pytorch-logo-dark.png"
IMAGE_EMBED=$(curl -s -X POST "$BASE_URL/embed/image" \
-H "Content-Type: application/json" \
-d "{\"image_url\": \"$IMAGE_URL\", \"normalize\": true}")
if echo "$IMAGE_EMBED" | jq -e '.error' > /dev/null; then
echo "⚠️ WARN: Image embedding failed (network issue or invalid URL)"
echo "$IMAGE_EMBED" | jq .
else
echo "$IMAGE_EMBED" | jq '{dimension, model, normalized}'
IMAGE_DIM=$(echo "$IMAGE_EMBED" | jq -r '.dimension')
IMAGE_NORMALIZED=$(echo "$IMAGE_EMBED" | jq -r '.normalized')
if [ "$IMAGE_DIM" != "$EMBEDDING_DIM" ]; then
echo "❌ FAIL: Image embedding dimension mismatch: $IMAGE_DIM != $EMBEDDING_DIM"
exit 1
fi
echo "✅ PASS: Image embedding generated (dim: $IMAGE_DIM, normalized: $IMAGE_NORMALIZED)"
fi
echo ""
# Test 5: Router Integration (Text Embedding)
echo "Test 5: Router Integration (Text Embedding)"
echo "------------------------------------"
ROUTER_RESPONSE=$(curl -s -X POST "$ROUTER_URL/route" \
-H "Content-Type: application/json" \
-d '{
"mode": "vision_embed",
"message": "embed text",
"payload": {
"operation": "embed_text",
"text": "DAARION microDAO tokenomics",
"normalize": true
}
}')
echo "$ROUTER_RESPONSE" | jq '{ok, provider, data: {dimension: .data.dimension, normalized: .data.normalized}}'
ROUTER_OK=$(echo "$ROUTER_RESPONSE" | jq -r '.ok')
ROUTER_PROVIDER=$(echo "$ROUTER_RESPONSE" | jq -r '.provider')
if [ "$ROUTER_OK" != "true" ]; then
echo "❌ FAIL: Router integration failed"
echo "$ROUTER_RESPONSE" | jq .
exit 1
fi
if [ "$ROUTER_PROVIDER" != "vision_encoder" ]; then
echo "❌ FAIL: Wrong provider used: $ROUTER_PROVIDER"
exit 1
fi
echo "✅ PASS: Router integration working (provider: $ROUTER_PROVIDER)"
echo ""
# Test 6: Qdrant Health Check
echo "Test 6: Qdrant Health Check"
echo "------------------------------------"
QDRANT_URL="${QDRANT_URL:-http://localhost:6333}"
if QDRANT_HEALTH=$(curl -s "$QDRANT_URL/healthz" 2>/dev/null); then
echo "$QDRANT_HEALTH"
echo "✅ PASS: Qdrant is healthy"
else
echo "⚠️ WARN: Qdrant not reachable at $QDRANT_URL"
fi
echo ""
# Summary
echo "======================================"
echo "✅ Vision Encoder Smoke Tests PASSED"
echo "======================================"
echo ""
echo "Next steps:"
echo "1. Check GPU usage: nvidia-smi"
echo "2. View logs: docker-compose logs -f vision-encoder"
echo "3. Check API docs: $BASE_URL/docs"
echo "4. Create Qdrant collection: curl -X PUT $QDRANT_URL/collections/images -d '{\"vectors\":{\"size\":$EMBEDDING_DIM,\"distance\":\"Cosine\"}}'"
echo ""