Files
Projet-Agent-IA/AgentReact/agent.py
LJ5O 2da71f8c51 Continuer la conversation
Permet de maintenir la conversation au lieu de la stopper après un message sans outils
2026-02-12 09:57:06 +01:00

59 lines
2.6 KiB
Python

from langgraph.graph import START, END
from langgraph.graph.state import CompiledStateGraph
from langgraph.checkpoint.memory import InMemorySaver
from utils.nodes import *
from utils.state import getState
from utils.tools import getTools
def getGraph()->CompiledStateGraph:
"""
Récupérer le graphe compilé et prêt à invoquer
Returns:
CompiledStateGraph: Graphe compilé
"""
workflow = getState() # State prêt à utiliser
# Définition des sommets du graphe
workflow.add_node(user_prompt)
workflow.add_node(LLM_central)
workflow.add_node(preparation_docs)
workflow.add_node(inject_preparation_prompt)
workflow.add_node("tool_node", tool_node)# BasicToolNode(tools=getTools())) # N'est pas une fonction, mais une classe instanciée, je dois précisier le nom du node
workflow.add_node("weekly_report_tools", weekly_report_tools)
workflow.add_node(context_shortener) # Réduit la taille du contexte
workflow.add_node("context_shortener_2", context_shortener) # Le même, sous un autre nom pour le différencier dans le graphe
# Arrêtes
workflow.set_conditional_entry_point(is_resumes_reports_already_initialised, {
"résumés non disponibles": "inject_preparation_prompt", # Résumés non générés
"résumés déjà générés": "user_prompt" # Résumés déjà prêts, je peux aller direct à la partie principale
})
workflow.add_edge("inject_preparation_prompt", "preparation_docs")
workflow.add_conditional_edges("preparation_docs", should_continue, {
"tools":"weekly_report_tools",
"no_tools":"context_shortener" # FIN de la préparation, on réduit le contexte avant de passer à la suite
})
workflow.add_edge("context_shortener", "user_prompt") # Et ici, je rejoins la partie principale qui rédigera le rapport
workflow.add_conditional_edges("user_prompt", lambda state: END if state['stop'] else "continue", {
END: END,
"continue": "LLM_central"
})
workflow.add_edge("weekly_report_tools", "preparation_docs")
workflow.add_conditional_edges("tool_node", should_shorten, {
'sous la limite': "LLM_central",
'réduire contexte': "context_shortener_2"
})
workflow.add_edge("context_shortener_2", "LLM_central")
workflow.add_conditional_edges("LLM_central", should_continue, {
"tools":"tool_node",
"no_tools":"user_prompt"
})
return workflow.compile(checkpointer=InMemorySaver()) # TODO: Rempalcer par une vrai BDD de prod
if __name__ == "__main__":
# Affichage du graphe
getGraph().get_graph().draw_mermaid_png(output_file_path="imgs/agent.png")