Spaces:
Sleeping
Sleeping
| # 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" | |