#!/bin/bash # 测试 Scene VLM Stats API echo "================================================================================ Scene VLM Stats API 测试 ================================================================================ " API_KEY="${MOMENTRY_API_KEY:-Test3200Test3200Test3200}" API_URL="http://localhost:3002" echo "API URL: ${API_URL}" echo "API Key: ${API_KEY:0:10}..." echo "" # 测试 1: 检查 API 是否可访问 echo "1. 检查 Core API 是否运行" echo "--------------------------------------------------------------------------------" HEALTH=$(curl -s "${API_URL}/health" 2>/dev/null) if [ $? -eq 0 ] && [ -n "$HEALTH" ]; then echo "✅ Core API 运行中" echo " Health: ${HEALTH}" else echo "❌ Core API 未运行" echo " 请先启动 Core API" exit 1 fi echo "" # 测试 2: 获取文件列表 echo "2. 获取文件列表" echo "--------------------------------------------------------------------------------" FILES=$(curl -s -H "X-API-Key: ${API_KEY}" "${API_URL}/api/v1/files?page_size=1" 2>/dev/null) if [ $? -eq 0 ] && [ -n "$FILES" ]; then echo "✅ 文件列表获取成功" # 提取第一个文件 UUID FILE_UUID=$(echo "$FILES" | grep -o '"uuid":"[^"]*"' | head -1 | cut -d'"' -f4) if [ -n "$FILE_UUID" ]; then echo " 文件 UUID: ${FILE_UUID}" else echo "❌ 无法提取文件 UUID" exit 1 fi else echo "❌ 文件列表获取失败" exit 1 fi echo "" # 测试 3: 测试新的 Scene VLM Stats endpoint echo "3. 测试 Scene VLM Stats Endpoint" echo "--------------------------------------------------------------------------------" if [ -n "$FILE_UUID" ]; then echo "测试文件: ${FILE_UUID}" echo "" # 测试快速 endpoint echo "调用: /api/v1/file/${FILE_UUID}/scene-vlm-stats" echo "" START=$(python3 -c 'import time; print(int(time.time() * 1000))') RESPONSE=$(curl -s -H "X-API-Key: ${API_KEY}" \ "${API_URL}/api/v1/file/${FILE_UUID}/scene-vlm-stats" 2>/dev/null) END=$(python3 -c 'import time; print(int(time.time() * 1000))') DURATION=$((END - START)) echo "响应时间: ${DURATION}ms" echo "" if [ $? -eq 0 ] && [ -n "$RESPONSE" ]; then echo "✅ Scene VLM Stats 获取成功" echo "" echo "响应数据:" echo "$RESPONSE" | python3 -m json.tool 2>/dev/null || echo "$RESPONSE" # 解析数据 TOTAL_SCENES=$(echo "$RESPONSE" | grep -o '"total_scenes":[0-9]*' | cut -d':' -f2) STATUS=$(echo "$RESPONSE" | grep -o '"status":"[^"]*"' | cut -d'"' -f4) VLM_DONE=$(echo "$RESPONSE" | grep -o '"vlm_done":[0-9]*' | cut -d':' -f2) echo "" echo "解析结果:" echo " Total Scenes: ${TOTAL_SCENES:-0}" echo " Status: ${STATUS:-N/A}" echo " VLM Done: ${VLM_DONE:-0}" # 验证响应时间 if [ $DURATION -lt 100 ]; then echo "" echo "✅ 响应时间良好 (< 100ms)" else echo "" echo "⚠️ 响应时间较慢 (${DURATION}ms)" fi else echo "❌ Scene VLM Stats 获取失败" echo " 响应: ${RESPONSE:-无}" fi else echo "⚠️ 没有可用的文件 UUID" fi echo "" # 测试 4: 对比旧的 get_file_stats echo "4. 对比旧的 get_file_stats API" echo "--------------------------------------------------------------------------------" if [ -n "$FILE_UUID" ]; then echo "调用: /api/v1/file/${FILE_UUID}" echo "" START=$(python3 -c 'import time; print(int(time.time() * 1000))') OLD_RESPONSE=$(curl -s -H "X-API-Key: ${API_KEY}" \ "${API_URL}/api/v1/file/${FILE_UUID}" 2>/dev/null) END=$(python3 -c 'import time; print(int(time.time() * 1000))') OLD_DURATION=$((END - START)) echo "响应时间: ${OLD_DURATION}ms" # 检查是否包含 scene_vlm if echo "$OLD_RESPONSE" | grep -q "scene_vlm"; then echo "✅ 旧 API 包含 scene_vlm 数据" OLD_SCENE=$(echo "$OLD_RESPONSE" | grep -A 5 '"scene_vlm"') echo " 数据: ${OLD_SCENE}" else echo "⚠️ 旧 API 不包含 scene_vlm 数据" fi echo "" # 性能对比 echo "性能对比:" echo " 新 API (scene-vlm-stats): ${DURATION}ms" echo " 旧 API (get_file_stats): ${OLD_DURATION}ms" if [ $DURATION -lt $OLD_DURATION ]; then IMPROVEMENT=$(( (OLD_DURATION - DURATION) * 100 / OLD_DURATION )) echo " 性能提升: ${IMPROVEMENT}%" fi fi echo "" # 测试 5: 测试 Studio 前端 echo "5. 测试 Studio 前端集成" echo "--------------------------------------------------------------------------------" STUDIO_URL="http://localhost:8888" STUDIO_HEALTH=$(curl -s "${STUDIO_URL}/api/v1/search-history" 2>/dev/null | head -c 100) if [ $? -eq 0 ] && [ -n "$STUDIO_HEALTH" ]; then echo "✅ Studio 代理运行中" echo "" # 测试通过代理调用新 endpoint echo "通过代理测试:" echo "URL: ${STUDIO_URL}/api/v1/file/${FILE_UUID}/scene-vlm-stats" echo "" PROXY_RESPONSE=$(curl -s "${STUDIO_URL}/api/v1/file/${FILE_UUID}/scene-vlm-stats" 2>/dev/null) if [ $? -eq 0 ] && [ -n "$PROXY_RESPONSE" ]; then echo "✅ 通过代理访问成功" echo "$PROXY_RESPONSE" | python3 -m json.tool 2>/dev/null || echo "$PROXY_RESPONSE" else echo "❌ 通过代理访问失败" fi else echo "⚠️ Studio 代理未运行" echo " 请先启动: npm run dev 或 ./start.sh" fi echo "" # 总结 echo "================================================================================ 测试总结 ================================================================================ " if [ $DURATION -lt 100 ]; then echo "✅ Scene VLM Stats API 工作正常" echo " 响应时间: ${DURATION}ms (< 100ms)" echo " 性能良好" else echo "⚠️ Scene VLM Stats API 响应较慢" echo " 响应时间: ${DURATION}ms" fi echo "" echo "下一步:" echo "1. 在 Studio 中测试前端显示" echo "2. 检查 LibraryView.vue 中的 Scene VLM 状态显示" echo "3. 验证数据更新是否正确" echo "" echo "================================================================================ "