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"