Spaces:
Sleeping
Sleeping
File size: 7,222 Bytes
5b16888 | 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 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 | #!/bin/bash
# Script de test complet - API Cloud + FAISS + Gemini
# Usage: ./test_complete_api.sh
set -e
# Configuration
API_URL="https://k2mar-docuresume-backend.hf.space"
EMAIL="visiteur@gmail.com"
PASSWORD="123456789"
# Couleurs
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${BLUE}╔════════════════════════════════════════════════════════════╗${NC}"
echo -e "${BLUE}║ Tests API DocuResume - FAISS + Gemini ║${NC}"
echo -e "${BLUE}╚════════════════════════════════════════════════════════════╝${NC}"
# Test 1: Health check
echo -e "\n${BLUE}[1/8] Test Health Check...${NC}"
HEALTH=$(curl -s "$API_URL/")
if echo "$HEALTH" | jq -e '.status == "healthy"' > /dev/null 2>&1; then
echo -e "${GREEN}✓ Backend opérationnel${NC}"
else
echo -e "${RED}✗ Backend inaccessible${NC}"
exit 1
fi
# Test 2: Login
echo -e "\n${BLUE}[2/8] Test Login...${NC}"
LOGIN=$(curl -s -X POST "$API_URL/login" \
-H "Content-Type: application/json" \
-d "{\"email\":\"$EMAIL\",\"password\":\"$PASSWORD\"}")
USER_ID=$(echo "$LOGIN" | jq -r '.user_id')
if [ "$USER_ID" != "null" ] && [ -n "$USER_ID" ]; then
echo -e "${GREEN}✓ Login réussi - User ID: $USER_ID${NC}"
else
echo -e "${RED}✗ Login échoué${NC}"
echo "$LOGIN"
exit 1
fi
# Test 3: Liste des documents
echo -e "\n${BLUE}[3/8] Test Liste Documents...${NC}"
DOCS=$(curl -s "$API_URL/documents/$USER_ID")
DOC_COUNT=$(echo "$DOCS" | jq 'length')
DOC_ID=$(echo "$DOCS" | jq -r '.[0].id')
if [ "$DOC_COUNT" -gt 0 ]; then
echo -e "${GREEN}✓ $DOC_COUNT documents trouvés${NC}"
echo -e " Premier document: ${YELLOW}$DOC_ID${NC}"
else
echo -e "${RED}✗ Aucun document trouvé${NC}"
exit 1
fi
# Test 4: Recherche sémantique (single document)
echo -e "\n${BLUE}[4/8] Test Recherche Sémantique (FAISS)...${NC}"
SEMANTIC=$(curl -s -X POST "$API_URL/search/semantic?document_id=$DOC_ID&query=invoice%20date&k=3")
if echo "$SEMANTIC" | jq -e '.results' > /dev/null 2>&1; then
RESULT_COUNT=$(echo "$SEMANTIC" | jq '.count')
echo -e "${GREEN}✓ FAISS opérationnel - $RESULT_COUNT résultats${NC}"
# Afficher le meilleur résultat
BEST_SCORE=$(echo "$SEMANTIC" | jq -r '.results[0].score')
BEST_TEXT=$(echo "$SEMANTIC" | jq -r '.results[0].text' | head -c 100)
echo -e " Meilleur score: ${YELLOW}$BEST_SCORE${NC}"
echo -e " Texte: $BEST_TEXT..."
else
echo -e "${RED}✗ FAISS non disponible${NC}"
echo "$SEMANTIC"
fi
# Test 5: Recherche sémantique multi-documents
echo -e "\n${BLUE}[5/8] Test Recherche Multi-Documents...${NC}"
MULTI_SEARCH=$(curl -s -X POST "$API_URL/search/semantic/multi?user_id=$USER_ID&query=data%20science&k=5")
if echo "$MULTI_SEARCH" | jq -e '.results' > /dev/null 2>&1; then
SEARCHED_DOCS=$(echo "$MULTI_SEARCH" | jq '.searched_documents')
RESULTS=$(echo "$MULTI_SEARCH" | jq '.count')
echo -e "${GREEN}✓ Recherche multi-docs réussie${NC}"
echo -e " Documents scannés: ${YELLOW}$SEARCHED_DOCS${NC}"
echo -e " Résultats trouvés: ${YELLOW}$RESULTS${NC}"
else
echo -e "${RED}✗ Erreur recherche multi-documents${NC}"
echo "$MULTI_SEARCH"
fi
# Test 6: Résumé avec Gemini (si quota disponible)
echo -e "\n${BLUE}[6/8] Test Résumé Gemini...${NC}"
SUMMARY=$(curl -s -X POST "$API_URL/generate/summary/gemini?document_id=$DOC_ID&max_length=100")
if echo "$SUMMARY" | jq -e '.summary' > /dev/null 2>&1; then
echo -e "${GREEN}✓ Résumé généré avec succès${NC}"
SUMMARY_TEXT=$(echo "$SUMMARY" | jq -r '.summary')
SUMMARY_LENGTH=$(echo "$SUMMARY" | jq -r '.length')
echo -e " Longueur: ${YELLOW}$SUMMARY_LENGTH mots${NC}"
echo -e " Résumé: ${SUMMARY_TEXT:0:150}..."
elif echo "$SUMMARY" | jq -e '.detail' | grep -q "429\|RESOURCE_EXHAUSTED\|quota"; then
echo -e "${YELLOW}⚠ Quota Gemini dépassé - Réessayez dans 60s${NC}"
echo -e " (Test non bloquant - Gemini fonctionne mais quota atteint)"
else
echo -e "${RED}✗ Erreur résumé Gemini${NC}"
echo "$SUMMARY"
fi
# Test 7: Question/Réponse avec Gemini
echo -e "\n${BLUE}[7/8] Test Question/Réponse Gemini...${NC}"
QUERY=$(curl -s -X POST "$API_URL/query/gemini?document_id=$DOC_ID&question=Quel%20est%20le%20montant%20total%3F&use_context=true")
if echo "$QUERY" | jq -e '.answer' > /dev/null 2>&1; then
echo -e "${GREEN}✓ Réponse générée avec succès${NC}"
ANSWER=$(echo "$QUERY" | jq -r '.answer')
CONTEXT_USED=$(echo "$QUERY" | jq -r '.context_used')
echo -e " Contexte FAISS: ${YELLOW}$CONTEXT_USED${NC}"
echo -e " Réponse: ${ANSWER:0:200}..."
elif echo "$QUERY" | jq -e '.detail' | grep -q "429\|RESOURCE_EXHAUSTED\|quota"; then
echo -e "${YELLOW}⚠ Quota Gemini dépassé - Réessayez dans 60s${NC}"
else
echo -e "${RED}✗ Erreur question/réponse Gemini${NC}"
echo "$QUERY"
fi
# Test 8: Statistiques globales
echo -e "\n${BLUE}[8/8] Test Statistiques...${NC}"
STATS=$(curl -s "$API_URL/stats/global")
if echo "$STATS" | jq -e '.total_users' > /dev/null 2>&1; then
USERS=$(echo "$STATS" | jq '.total_users')
DOCUMENTS=$(echo "$STATS" | jq '.total_documents')
QUERIES=$(echo "$STATS" | jq '.total_queries')
echo -e "${GREEN}✓ Statistiques récupérées${NC}"
echo -e " Utilisateurs: ${YELLOW}$USERS${NC}"
echo -e " Documents: ${YELLOW}$DOCUMENTS${NC}"
echo -e " Requêtes: ${YELLOW}$QUERIES${NC}"
else
echo -e "${RED}✗ Erreur statistiques${NC}"
echo "$STATS"
fi
# Résumé final
echo -e "\n${BLUE}╔════════════════════════════════════════════════════════════╗${NC}"
echo -e "${BLUE}║ Résumé des tests ║${NC}"
echo -e "${BLUE}╚════════════════════════════════════════════════════════════╝${NC}"
echo -e "\n${GREEN}✅ API Backend${NC}"
echo -e " ├─ Health check: ✓"
echo -e " ├─ Authentification: ✓"
echo -e " └─ Documents: ✓"
echo -e "\n${GREEN}✅ FAISS (Recherche Sémantique)${NC}"
echo -e " ├─ Single document: ✓"
echo -e " └─ Multi-documents: ✓"
echo -e "\n${YELLOW}⚠ Gemini API${NC}"
echo -e " ├─ Configuration: ✓"
echo -e " ├─ Résumés: ${YELLOW}Quota limité (15 req/min)${NC}"
echo -e " └─ Q&A: ${YELLOW}Quota limité (15 req/min)${NC}"
echo -e "\n${BLUE}📝 Notes:${NC}"
echo -e " • FAISS est bien activé sur HuggingFace Spaces"
echo -e " • Gemini fonctionne mais nécessite gestion de quota"
echo -e " • Pour production: créer votre propre clé API Gemini"
echo -e " • Documentation: voir GEMINI_API_ENDPOINTS.md"
echo -e "\n${GREEN}🎉 Tests terminés avec succès!${NC}\n"
|