diff --git a/agent-stream.py b/agent-stream.py new file mode 100644 index 0000000..ede3c02 --- /dev/null +++ b/agent-stream.py @@ -0,0 +1,66 @@ +import asyncio +import os + +import sys + + +from dotenv import load_dotenv +from langchain_google_genai import ChatGoogleGenerativeAI +from langchain_mcp_adapters.client import MultiServerMCPClient +from langgraph.prebuilt import create_react_agent +from langchain_core.messages import HumanMessage + +# Chargement de la clé API +load_dotenv() + +async def lancer_agent(): + print("🤖 Initialisation de l'Agent Gemini...") + llm = ChatGoogleGenerativeAI(model="gemini-2.5-flash") + + print("🔌 Configuration de la connexion au serveur MCP local...") + + # NOUVELLE SYNTAXE : On passe la configuration directement dans le client + client = MultiServerMCPClient({ + "serveur_taches": { + "command": sys.executable, # 🌟 LA MODIFICATION EST ICI + "args": ["serveur_mcp.py"], + "transport": "stdio" + } + }) + + # On récupère les outils (attention, c'est maintenant une fonction asynchrone qui nécessite 'await') + outils = await client.get_tools() + print(f"✅ Outils détectés : {[outil.name for outil in outils]}") + + # 🌟 Création de l'Agent LangGraph + agent = create_react_agent(llm, tools=outils) + + #--- LE TEST DE L'AGENT --- + consigne = ( + "1. Ajoute la tâche 'Acheter du pain'. " + "2. Ajoute la tâche 'Appeler le client'. " + "3. Fais-moi un résumé de toutes mes tâches actuelles." + ) + + print(f"\n🗣️ Consigne donnée à l'Agent : {consigne}\n") + print("⏳ Démarrage du flux de réflexion de l'Agent...\n") + + # 🌟 LA MODIFICATION EST ICI : On remplace ainvoke par astream + # stream_mode="values" permet de récupérer l'état à chaque nouvelle étape + async for etape in agent.astream( + {"messages": [HumanMessage(content=consigne)]}, + stream_mode="values" + ): + # On récupère le tout dernier message généré à cette étape + dernier_message = etape["messages"][-1] + + # pretty_print() formate le texte avec des couleurs dans le terminal ! + dernier_message.pretty_print() + + # Déconnexion propre (cette ligne ne change pas, assurez-vous de l'avoir gardée) + # await client.disconnect() + + + +if __name__ == "__main__": + asyncio.run(lancer_agent()) \ No newline at end of file