testpush / src /graph.py
Bachir00's picture
source code
8a848a5
# """
# Script de test complet pour le système de mémoire
# """
# from langchain_groq import ChatGroq
# from langgraph.graph import StateGraph, END
# from langgraph.prebuilt import ToolNode
# from typing import TypedDict, Sequence, Annotated
# from langchain_core.messages import BaseMessage
# from langgraph.graph.message import add_messages
# from dotenv import load_dotenv
# import os
# # Importer les composants
# # from memory_integration import tools_with_memory
# # from enhanced_system_prompt import create_enhanced_model_call, ENHANCED_SYSTEM_PROMPT
# # ============================================================================
# # CONFIGURATION
# # ============================================================================
# class AgentState(TypedDict):
# messages: Annotated[Sequence[BaseMessage], add_messages]
# load_dotenv()
# api_key = os.getenv("GROQ_API_KEY")
# if not api_key:
# raise ValueError("GROQ_API_KEY non définie")
# model = ChatGroq(
# model="llama-3.1-8b-instant",
# temperature=0.3,
# max_tokens=2048,
# api_key=api_key
# ).bind_tools(tools_with_memory)
# # ============================================================================
# # CONSTRUCTION DU GRAPHE AMÉLIORÉ
# # ============================================================================
# def should_continue(state: AgentState) -> str:
# messages = state["messages"]
# last_message = messages[-1]
# if hasattr(last_message, 'tool_calls') and last_message.tool_calls:
# return "continue"
# else:
# return "end"
# # Créer le graphe
# graph = StateGraph(AgentState)
# # Ajouter les nœuds
# model_call_enhanced = create_enhanced_model_call()
# graph.add_node("llm", model_call_enhanced)
# tool_node = ToolNode(tools=tools_with_memory)
# graph.add_node("tools", tool_node)
# # Définir les connexions
# graph.set_entry_point("llm")
# graph.add_conditional_edges(
# "llm",
# should_continue,
# {
# "continue": "tools",
# "end": END,
# },
# )
# graph.add_edge("tools", "llm")
# # Compiler
# app_with_memory = graph.compile()
# # ============================================================================
# # FONCTIONS UTILITAIRES
# # ============================================================================
# def print_stream(stream, show_tool_calls=True):
# """Affiche le flux de messages de manière élégante"""
# print("\n" + "="*70)
# for i, s in enumerate(stream):
# message = s["messages"][-1]
# if hasattr(message, 'content') and message.content:
# print(f"\n{'─'*70}")
# if hasattr(message, 'type'):
# if message.type == 'human':
# print("👤 UTILISATEUR:")
# elif message.type == 'ai':
# print("🤖 ASSISTANT:")
# elif message.type == 'tool':
# if show_tool_calls:
# print("🔧 RÉSULTAT OUTIL:")
# content = message.content
# if isinstance(content, str):
# # Limiter l'affichage si trop long
# if len(content) > 1000:
# print(content[:1000] + "\n... (contenu tronqué)")
# else:
# print(content)
# else:
# print(content)
# if hasattr(message, 'tool_calls') and message.tool_calls and show_tool_calls:
# print("\n🔧 APPELS D'OUTILS:")
# for tool_call in message.tool_calls:
# print(f" → {tool_call.get('name', 'unknown')}({tool_call.get('args', {})})")
# print("\n" + "="*70)
# def run_test(user_query: str, test_name: str = ""):
# """Exécute un test avec affichage formaté"""
# if test_name:
# print(f"\n\n{'#'*70}")
# print(f"# TEST: {test_name}")
# print(f"{'#'*70}")
# inputs = {"messages": [("user", user_query)]}
# print_stream(app_with_memory.stream(inputs, stream_mode="values"))
# # ============================================================================
# # SUITE DE TESTS
# # ============================================================================
# def run_all_tests():
# """Exécute tous les tests du système"""
# print("\n" + "="*70)
# print(" 🧪 SUITE DE TESTS - SYSTÈME DE MÉMOIRE INTELLIGENT")
# print("="*70)
# # Test 1: Première recherche (création du cache)
# run_test(
# "Fais-moi un résumé complet sur l'impact de l'intelligence artificielle sur le marché du travail",
# "Test 1 - Première recherche (cache vide)"
# )
# # Test 2: Même sujet (utilisation du cache)
# run_test(
# "Peux-tu me redonner les infos sur l'IA et l'emploi ?",
# "Test 2 - Recherche dans le cache"
# )
# # Test 3: Recherche dans la mémoire
# run_test(
# "Qu'est-ce que tu as trouvé sur l'intelligence artificielle ?",
# "Test 3 - Recherche sémantique dans la mémoire"
# )
# # Test 4: Historique
# run_test(
# "Montre-moi l'historique de mes recherches",
# "Test 4 - Consultation de l'historique"
# )
# # Test 5: Nouvelle recherche différente
# run_test(
# "Fais une analyse sur les énergies renouvelables",
# "Test 5 - Nouvelle recherche (sujet différent)"
# )
# # Test 6: Question simple (pas de recherche)
# run_test(
# "Bonjour, comment ça va ?",
# "Test 6 - Conversation simple (sans recherche)"
# )
# # Test 7: Recherche croisée
# run_test(
# "Compare ce que tu as trouvé sur l'IA et les énergies renouvelables",
# "Test 7 - Recherche croisée dans la mémoire"
# )
# print("\n\n" + "="*70)
# print(" ✅ TOUS LES TESTS TERMINÉS")
# print("="*70)
# def demo_memory_stats():
# """Affiche les statistiques de la mémoire"""
# from memory_system import memory_system
# print("\n" + "="*70)
# print(" 📊 STATISTIQUES DU SYSTÈME DE MÉMOIRE")
# print("="*70)
# # Stats vectorielles
# vector_count = memory_system.vector_memory.collection.count()
# print(f"\n🗄️ Base Vectorielle:")
# print(f" Documents stockés: {vector_count}")
# print(f" Hashes en cache: {len(memory_system.vector_memory.content_hashes)}")
# # Stats agent
# conv_count = len(memory_system.agent_memory.conversation_history)
# research_count = len(memory_system.agent_memory.research_cache)
# print(f"\n🧠 Mémoire Agent:")
# print(f" Conversations: {conv_count}")
# print(f" Recherches en cache: {research_count}")
# print(f" Topics mémorisés: {len(memory_system.agent_memory.topic_keywords)}")
# if research_count > 0:
# print(f"\n📚 Topics en cache:")
# for topic in list(memory_system.agent_memory.research_cache.keys())[:5]:
# print(f" • {topic}")
# print("\n" + "="*70)
# # ============================================================================
# # MENU INTERACTIF
# # ============================================================================
# def interactive_menu():
# """Menu interactif pour tester le système"""
# while True:
# print("\n" + "="*70)
# print(" 🎯 ASSISTANT DE RECHERCHE INTELLIGENT")
# print("="*70)
# print("\n Options:")
# print(" 1. Poser une question / Lancer une recherche")
# print(" 2. Rechercher dans la mémoire")
# print(" 3. Voir l'historique")
# print(" 4. Statistiques de la mémoire")
# print(" 5. Lancer la suite de tests")
# print(" 6. Réinitialiser la mémoire")
# print(" 0. Quitter")
# choice = input("\n👉 Votre choix: ").strip()
# if choice == "1":
# query = input("\n💬 Votre question: ")
# run_test(query, "Recherche utilisateur")
# elif choice == "2":
# query = input("\n🔍 Recherche dans la mémoire: ")
# run_test(f"Cherche dans ta mémoire: {query}", "Recherche mémoire")
# elif choice == "3":
# run_test("Montre-moi mon historique de recherches", "Historique")
# elif choice == "4":
# demo_memory_stats()
# elif choice == "5":
# run_all_tests()
# elif choice == "6":
# confirm = input("\n⚠️ Êtes-vous sûr de vouloir réinitialiser ? (oui/non): ")
# if confirm.lower() == "oui":
# from memory_system import memory_system
# memory_system.agent_memory.clear_all()
# print("✅ Mémoire réinitialisée")
# else:
# print("❌ Annulé")
# elif choice == "0":
# print("\n👋 Au revoir!")
# break
# else:
# print("\n❌ Choix invalide")
# # ============================================================================
# # POINT D'ENTRÉE
# # ============================================================================
# if __name__ == "__main__":
# import sys
# print("\n" + "🚀"*35)
# print(" SYSTÈME DE RECHERCHE INTELLIGENT AVEC MÉMOIRE")
# print("🚀"*35 + "\n")
# if len(sys.argv) > 1:
# if sys.argv[1] == "test":
# # Mode test automatique
# run_all_tests()
# demo_memory_stats()
# elif sys.argv[1] == "stats":
# # Afficher uniquement les stats
# demo_memory_stats()
# else:
# # Exécuter une requête directe
# query = " ".join(sys.argv[1:])
# run_test(query, "Requête CLI")
# else:
# # Mode interactif
# interactive_menu()