Initial commit

This commit is contained in:
Dom
2026-03-05 00:20:25 +01:00
commit dcd4de9945
1954 changed files with 669380 additions and 0 deletions

280
diagnostic_faiss.py Executable file
View File

@@ -0,0 +1,280 @@
#!/usr/bin/env python3
"""
Diagnostic de l'index FAISS - Vérifie l'état et le contenu de l'index.
"""
import os
import sys
import pickle
from pathlib import Path
# Ajouter le chemin du projet
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'geniusia2'))
def check_faiss_installation():
"""Vérifie si FAISS est installé."""
print("\n1. Vérification de l'installation FAISS")
print("=" * 60)
try:
import faiss
print(f"✓ FAISS installé: version {faiss.__version__ if hasattr(faiss, '__version__') else 'inconnue'}")
return True
except ImportError:
print("✗ FAISS n'est pas installé")
return False
def check_index_files():
"""Vérifie la présence des fichiers d'index."""
print("\n2. Vérification des fichiers d'index")
print("=" * 60)
index_path = Path("geniusia2/data/faiss_index")
index_file = index_path / "embeddings.index"
metadata_file = index_path / "metadata.pkl"
results = {}
# Vérifier le répertoire
if index_path.exists():
print(f"✓ Répertoire d'index existe: {index_path}")
results['dir'] = True
else:
print(f"✗ Répertoire d'index manquant: {index_path}")
results['dir'] = False
return results
# Vérifier le fichier d'index
if index_file.exists():
size = index_file.stat().st_size
print(f"✓ Fichier d'index existe: {index_file}")
print(f" Taille: {size:,} octets ({size / 1024:.2f} KB)")
results['index'] = True
else:
print(f"✗ Fichier d'index manquant: {index_file}")
results['index'] = False
# Vérifier le fichier de métadonnées
if metadata_file.exists():
size = metadata_file.stat().st_size
print(f"✓ Fichier de métadonnées existe: {metadata_file}")
print(f" Taille: {size:,} octets ({size / 1024:.2f} KB)")
results['metadata'] = True
else:
print(f"✗ Fichier de métadonnées manquant: {metadata_file}")
results['metadata'] = False
return results
def check_index_content():
"""Vérifie le contenu de l'index FAISS."""
print("\n3. Vérification du contenu de l'index")
print("=" * 60)
try:
import faiss
index_file = Path("geniusia2/data/faiss_index/embeddings.index")
if not index_file.exists():
print("✗ Impossible de charger l'index (fichier manquant)")
return False
# Charger l'index
index = faiss.read_index(str(index_file))
print(f"✓ Index FAISS chargé avec succès")
print(f" Type d'index: {type(index).__name__}")
print(f" Dimension des vecteurs: {index.d}")
print(f" Nombre de vecteurs: {index.ntotal}")
print(f" Index entraîné: {'Oui' if index.is_trained else 'Non'}")
if index.ntotal == 0:
print("\n⚠ L'index est vide (aucun embedding stocké)")
else:
print(f"\n✓ L'index contient {index.ntotal} embeddings")
return True
except Exception as e:
print(f"✗ Erreur lors du chargement de l'index: {e}")
return False
def check_metadata_content():
"""Vérifie le contenu des métadonnées."""
print("\n4. Vérification des métadonnées")
print("=" * 60)
metadata_file = Path("geniusia2/data/faiss_index/metadata.pkl")
if not metadata_file.exists():
print("✗ Fichier de métadonnées manquant")
return False
try:
with open(metadata_file, 'rb') as f:
metadata = pickle.load(f)
print(f"✓ Métadonnées chargées avec succès")
print(f" Type: {type(metadata).__name__}")
print(f" Nombre d'entrées: {len(metadata)}")
if len(metadata) == 0:
print("\n⚠ Aucune métadonnée stockée")
else:
print(f"\n{len(metadata)} métadonnées stockées")
# Afficher un exemple
if metadata:
first_key = list(metadata.keys())[0]
first_entry = metadata[first_key]
print(f"\n Exemple de métadonnée (ID {first_key}):")
for key, value in first_entry.items():
if isinstance(value, str) and len(value) > 50:
value = value[:50] + "..."
print(f" {key}: {value}")
return True
except Exception as e:
print(f"✗ Erreur lors du chargement des métadonnées: {e}")
return False
def check_embeddings_manager():
"""Vérifie que l'EmbeddingsManager peut être initialisé."""
print("\n5. Vérification de l'EmbeddingsManager")
print("=" * 60)
try:
# Importer sans initialiser complètement (éviter de charger les modèles lourds)
from geniusia2.core.embeddings_manager import EmbeddingsManager
print("✓ Module EmbeddingsManager importé avec succès")
# Vérifier les dépendances
try:
import open_clip
print("✓ OpenCLIP disponible")
except ImportError:
print("✗ OpenCLIP non disponible")
try:
import faiss
print("✓ FAISS disponible")
except ImportError:
print("✗ FAISS non disponible")
try:
import torch
print(f"✓ PyTorch disponible (version {torch.__version__})")
except ImportError:
print("✗ PyTorch non disponible")
return True
except Exception as e:
print(f"✗ Erreur lors de l'import de l'EmbeddingsManager: {e}")
return False
def check_usage_in_code():
"""Vérifie où FAISS est utilisé dans le code."""
print("\n6. Utilisation de FAISS dans le code")
print("=" * 60)
files_to_check = [
"geniusia2/core/suggestion_manager.py",
"geniusia2/core/embeddings_manager.py",
"geniusia2/core/learning_manager.py"
]
for file_path in files_to_check:
if os.path.exists(file_path):
with open(file_path, 'r') as f:
content = f.read()
# Chercher les références à FAISS
if 'faiss' in content.lower() or 'embeddings_manager' in content.lower():
print(f"{file_path}")
# Compter les occurrences
faiss_count = content.lower().count('faiss')
embeddings_count = content.count('embeddings_manager')
search_similar_count = content.count('search_similar')
if faiss_count > 0:
print(f" - Mentions de 'faiss': {faiss_count}")
if embeddings_count > 0:
print(f" - Mentions de 'embeddings_manager': {embeddings_count}")
if search_similar_count > 0:
print(f" - Appels à 'search_similar': {search_similar_count}")
return True
def main():
"""Fonction principale."""
print("\n" + "=" * 60)
print("DIAGNOSTIC DE L'INDEX FAISS")
print("=" * 60)
results = []
# 1. Installation FAISS
results.append(check_faiss_installation())
# 2. Fichiers d'index
file_results = check_index_files()
results.append(all(file_results.values()))
# 3. Contenu de l'index
if file_results.get('index', False):
results.append(check_index_content())
else:
print("\n3. Vérification du contenu de l'index")
print("=" * 60)
print("⊘ Ignoré (fichier d'index manquant)")
results.append(False)
# 4. Métadonnées
if file_results.get('metadata', False):
results.append(check_metadata_content())
else:
print("\n4. Vérification des métadonnées")
print("=" * 60)
print("⊘ Ignoré (fichier de métadonnées manquant)")
results.append(False)
# 5. EmbeddingsManager
results.append(check_embeddings_manager())
# 6. Usage dans le code
results.append(check_usage_in_code())
# Résumé
print("\n" + "=" * 60)
print("RÉSUMÉ")
print("=" * 60)
passed = sum(results)
total = len(results)
print(f"Vérifications réussies: {passed}/{total}")
if passed == total:
print("\n✓ FAISS est correctement installé et configuré!")
elif passed >= total - 2:
print("\n⚠ FAISS est installé mais l'index est peut-être vide")
print(" Ceci est normal si aucune tâche n'a encore été apprise.")
else:
print("\n✗ Des problèmes ont été détectés avec FAISS")
print(" Exécute './geniusia2/install_faiss.sh' pour réinstaller")
return 0 if passed >= total - 2 else 1
if __name__ == "__main__":
sys.exit(main())