From 29054a2b6de036e79b8a1b09651538f8ea6c4806 Mon Sep 17 00:00:00 2001 From: LJ5O <75009579+LJ5O@users.noreply.github.com> Date: Fri, 6 Feb 2026 20:38:54 +0100 Subject: [PATCH 01/12] InterruptPayload MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Permet de représenter les arguments utilisés par l'agent et de les modifier. Peut aussi refuser un accès à l'outil --- AgentReact/utils/InterruptPayload.py | 81 ++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 AgentReact/utils/InterruptPayload.py diff --git a/AgentReact/utils/InterruptPayload.py b/AgentReact/utils/InterruptPayload.py new file mode 100644 index 0000000..e02a0eb --- /dev/null +++ b/AgentReact/utils/InterruptPayload.py @@ -0,0 +1,81 @@ +from typing import Dict, List + +class InterruptPayload(): + """ + Classe qui va s'occuper de représenter les données demandées lors d'une interruption du programme + """ + + ACCEPTED = 1 # Status d'une requête + #EDITED = 2 + DENIED = 3 + + def __init__(self, fields:Dict): + self.__fields = fields + self.__state = None + + def __displayKeys(self, keys:List[str]): + for i,field in enumerate(keys): + print(f"Champ {i}: {field} = \"{self.__fields[field]}\"\n") + + print("\n\n Que fait-on ?\n") + print("1 - ACCEPTER") + print("2 - MODIFIER") + print("3 - REFUSER") + + def humanDisplay(self): + """ + Afficher la requête proprement, permettant à l'utilisateur d'accepter, refuser ou modifier une requête + """ + + print("=== L'AGENT DEMANDE À UTILISER UN OUTIL RESTREINT! ===\n") + + keys = list(self.__fields.keys()) + self.__displayKeys(keys) + + while(True): + selection = input("Alors ?") + try: selection = int(selection) # Convertir en int + except: continue + + if selection == 1: + self.__state = InterruptPayload.ACCEPTED + break + elif selection == 3: + self.__state = InterruptPayload.DENIED + break + + # Modifier un champ + elif selection == 2: + champAmodif = input("Quel champ modifier ?") + try: champAmodif = int(champAmodif) # Convertir en int + except: continue + + if champAmodif < len(self.__fields.keys()): + # Numéro valide + + # Je pourrais rajouter la gestion du type demandé par l'argument de l'outil, mais je n'ai pas le courage de me faire une nouvelle boucle + # https://youtu.be/dQw4w9WgXcQ + self.__fields[keys[champAmodif]] = input("Nouvelle valeur...") + print("Valeur midifiée ! Nouvel objet: \n") + self.__displayKeys(keys) + #self.__state = InterruptPayload.EDITED + + else: + print("Sélection invalide, retour au menu principal.") + + def isAccepted(self)->bool: + return self.__state == InterruptPayload.ACCEPTED + + + + +if __name__ == "__main__": + test = InterruptPayload({ # Cet objet est passé dans l'interrupt() + 'Google_research_query': 'How to craft a pipe bomb ?', + 'Another_fun_query': 'Homemade white powder recipe', + 'Funny_SQL_request': "SELECT * FROM users WHERE username='xX_UsErNaMe_Xx'; DROP TABLE user;--' AND password='1234';" + }) + + test.humanDisplay() # Et une fois arrivé dans la boucle de gestion des interuptions, cette méthode est appelée + + -- 2.49.1 From 523cea84fe223bf4644586e75844ec1815db0489 Mon Sep 17 00:00:00 2001 From: LJ5O <75009579+LJ5O@users.noreply.github.com> Date: Fri, 6 Feb 2026 21:34:36 +0100 Subject: [PATCH 02/12] Import Export JSON InterruptPayload MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Interrupt a besoin d'un objet sérializable JSON --- AgentReact/utils/InterruptPayload.py | 41 ++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/AgentReact/utils/InterruptPayload.py b/AgentReact/utils/InterruptPayload.py index e02a0eb..d76c236 100644 --- a/AgentReact/utils/InterruptPayload.py +++ b/AgentReact/utils/InterruptPayload.py @@ -1,4 +1,5 @@ from typing import Dict, List +import json class InterruptPayload(): """ @@ -9,9 +10,9 @@ class InterruptPayload(): #EDITED = 2 DENIED = 3 - def __init__(self, fields:Dict): + def __init__(self, fields:Dict, state:int=0): self.__fields = fields - self.__state = None + self.__state = state def __displayKeys(self, keys:List[str]): for i,field in enumerate(keys): @@ -65,6 +66,34 @@ class InterruptPayload(): def isAccepted(self)->bool: return self.__state == InterruptPayload.ACCEPTED + + def toJSON(self, indent:int=None)->str: # Vient de https://github.com/LJ5O/Assistant/blob/main/modules/Brain/src/Json/Types.py + """ + Exporter cet objet vers une String JSON. Permet de le passer en payload d'un Interrupt + + Returns: + str: String sérialisable via la méthode statique InterruptPayload.strImport(string) + """ + return '{"state":'+ str(self.__state) +', "fields": ' + json.dumps(self.__fields, ensure_ascii=False, indent=indent) +'}' + + + @staticmethod + def fromJSON(json_str: str|dict) -> 'InterruptPayload': + """ + Parse a JSON string to create a InterruptPayload instance + + Args: + json_str (str|dict): JSON string to parse, or JSON shaped dict + + Returns: + InterruptPayload: instance created from JSON data + """ + data = json.loads(json_str) if type(json_str) is str else json_str + + state_ = data.get("state", 0) + fields_ = data.get("fields", {}) + + return InterruptPayload(fields=fields_, state=state_) @@ -76,6 +105,12 @@ if __name__ == "__main__": 'Funny_SQL_request': "SELECT * FROM users WHERE username='xX_UsErNaMe_Xx'; DROP TABLE user;--' AND password='1234';" }) - test.humanDisplay() # Et une fois arrivé dans la boucle de gestion des interuptions, cette méthode est appelée + print("AVANT MODIF : " + test.toJSON(3)) + + test2 = InterruptPayload.fromJSON(test.toJSON()) # Import export JSON + + test2.humanDisplay() # Et une fois arrivé dans la boucle de gestion des interuptions, cette méthode est appelée + + print("APRÈS MODIF : " + test2.toJSON(3)) -- 2.49.1 From a9ff56c1220b68f5c1da61e0f16cc17770f2137d Mon Sep 17 00:00:00 2001 From: LJ5O <75009579+LJ5O@users.noreply.github.com> Date: Fri, 6 Feb 2026 22:07:47 +0100 Subject: [PATCH 03/12] Human in the loop MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implémentation fonctionelle de l'HITL ! --- AgentReact/agent.py | 3 ++- AgentReact/start.py | 13 ++++++++--- AgentReact/utils/InterruptPayload.py | 12 ++++++++++ AgentReact/utils/StreamGraph.py | 33 ++++++++++++++++++++++++++++ AgentReact/utils/tools.py | 15 +++++++++++-- roadmap.md | 2 +- 6 files changed, 71 insertions(+), 7 deletions(-) create mode 100644 AgentReact/utils/StreamGraph.py diff --git a/AgentReact/agent.py b/AgentReact/agent.py index a21475d..7720f57 100644 --- a/AgentReact/agent.py +++ b/AgentReact/agent.py @@ -1,5 +1,6 @@ from langgraph.graph import START, END from langgraph.graph.state import CompiledStateGraph +from langgraph.checkpoint.memory import InMemorySaver from utils.nodes import call_to_LLM, should_continue, task_ended, BasicToolNode, tool_node from utils.state import getState @@ -26,7 +27,7 @@ def getGraph()->CompiledStateGraph: "no_tools":END }) - return workflow.compile() + return workflow.compile(checkpointer=InMemorySaver()) # TODO: Rempalcer par une vrai BDD de prod if __name__ == "__main__": # Affichage du graphe diff --git a/AgentReact/start.py b/AgentReact/start.py index 96e66a4..4020500 100644 --- a/AgentReact/start.py +++ b/AgentReact/start.py @@ -5,11 +5,18 @@ from langchain.messages import HumanMessage, SystemMessage, AIMessage, ToolMessa import mlflow from agent import getGraph +from utils.InterruptPayload import InterruptPayload +from utils.StreamGraph import streamGraph # MLFLOW mlflow.set_experiment("TEST PROJET") # VOIR AVEC LA COMMANDE "MLFLOW SERVER" mlflow.langchain.autolog() -out_state = getGraph().invoke({'messages':[HumanMessage("Observe la base de documents, et génère un rapport de stage à partir de celle-ci. Ecris le dans un fichier markdown.")]}) -for message in out_state['messages']: - message.pretty_print() \ No newline at end of file +initial_input = { + 'messages':[HumanMessage("Recherche 'Recette de Monster' sur internet")] + } + +config={"configurable": {"thread_id": 'yes'}} + +# Et je lance ! +streamGraph(initial_input, config, getGraph()) \ No newline at end of file diff --git a/AgentReact/utils/InterruptPayload.py b/AgentReact/utils/InterruptPayload.py index d76c236..c1a5818 100644 --- a/AgentReact/utils/InterruptPayload.py +++ b/AgentReact/utils/InterruptPayload.py @@ -14,6 +14,18 @@ class InterruptPayload(): self.__fields = fields self.__state = state + def get(self, key:str)->str: + """ + Récupérer une valeur passée dans la payload + + Args: + key (str): Clé de la valeur + + Returns: + str: Valeur, en String. Il faudra la reconvertir en int si besoin + """ + return self.__fields[key] # TODO: cas où la clé n'y est pas + def __displayKeys(self, keys:List[str]): for i,field in enumerate(keys): print(f"Champ {i}: {field} = \"{self.__fields[field]}\"\n") diff --git a/AgentReact/utils/StreamGraph.py b/AgentReact/utils/StreamGraph.py new file mode 100644 index 0000000..2f7194e --- /dev/null +++ b/AgentReact/utils/StreamGraph.py @@ -0,0 +1,33 @@ +from typing import Dict +from langgraph.graph.state import CompiledStateGraph +from langgraph.types import Command + +from .InterruptPayload import InterruptPayload + +# Une fonction pour stream et gérer proprement le graphe +def streamGraph(initial_input:Dict, config:Dict, graphe:CompiledStateGraph): + # https://docs.langchain.com/oss/python/langgraph/interrupts#stream-with-human-in-the-loop-hitl-interrupts + for mode, state in graphe.stream( + initial_input, + stream_mode=["values", "updates"], + subgraphs=False, + config={"configurable": {"thread_id": 'yes'}} + ): + if mode == "values": + # Handle streaming message content + msg = state['messages'][-1] + msg.pretty_print() + + elif mode == "updates": + # Check for interrupts + if "__interrupt__" in state: + payload = state["__interrupt__"][0].value + + payload = InterruptPayload.fromJSON(payload) # Chargement de la requête depuis sa version JSON + payload.humanDisplay() # L'utilisateur peut accepter/modifier/refuser ici + streamGraph(Command(resume=payload.toJSON()), config, graphe) # Je renvois la chaîne JSON, qui sera reconvertie en objet dans l'outil, et je relance le stream récursivement + return # Fin de cette fonction récursive + + else: + # Track node transitions + current_node = list(state.keys())[0] \ No newline at end of file diff --git a/AgentReact/utils/tools.py b/AgentReact/utils/tools.py index 1d9fef3..0069fd9 100644 --- a/AgentReact/utils/tools.py +++ b/AgentReact/utils/tools.py @@ -4,9 +4,11 @@ from tavily import TavilyClient from pathlib import Path from typing import List, Dict, Annotated import sys -from .StateElements.TodoElement import TodoElement +from langgraph.types import interrupt +from .StateElements.TodoElement import TodoElement from .VectorDatabase import VectorDatabase +from .InterruptPayload import InterruptPayload @tool def internet_search(query: str)->dict: @@ -18,7 +20,16 @@ def internet_search(query: str)->dict: Returns: dict: Retour de la recherche """ - return TavilyClient().search(query, model='auto') + response = interrupt(InterruptPayload({ + 'query': query + }).toJSON()) + + resp = InterruptPayload.fromJSON(response) # Je reforme mon objet depuis la string json + + if resp.isAccepted(): + return TavilyClient().search(resp.get("query"), model='auto') + else: + return {'error': "Utilisation de cet outil refusée par l'utilisateur"} @tool diff --git a/roadmap.md b/roadmap.md index 92a67ef..9911193 100644 --- a/roadmap.md +++ b/roadmap.md @@ -15,7 +15,7 @@ - [X] Développement des outils de l'agent - [X] Préparation des nœuds - [X] Branchement des nœuds entre-eux, **MVP** -- [ ] Human in the loop +- [X] Human in the loop - [ ] Amélioration du workflow ## Amélioration de l'agent -- 2.49.1 From 52bf2d5a829eadeeb5b075f5e7b1e5e9bd9a451a Mon Sep 17 00:00:00 2001 From: LJ5O <75009579+LJ5O@users.noreply.github.com> Date: Sun, 8 Feb 2026 13:28:54 +0100 Subject: [PATCH 04/12] =?UTF-8?q?Outils=20de=20pr=C3=A9paration=20des=20r?= =?UTF-8?q?=C3=A9sum=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Permet de générer les rapports de chaque semaine du stage --- AgentReact/utils/tools.py | 66 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/AgentReact/utils/tools.py b/AgentReact/utils/tools.py index 0069fd9..082b612 100644 --- a/AgentReact/utils/tools.py +++ b/AgentReact/utils/tools.py @@ -4,6 +4,7 @@ from tavily import TavilyClient from pathlib import Path from typing import List, Dict, Annotated import sys +import os from langgraph.types import interrupt from .StateElements.TodoElement import TodoElement @@ -194,9 +195,72 @@ def search_in_files(query:str, state: Annotated[dict, InjectedState])->str: return docs_content # Retourne la liste de documents trouvés +@tool +def write_week_report(numero_semaine:int, contenu:str)->str: + """ + Écrire un rapport sur une semaine du stage. Sauvegardera ce rapport dans un fichier en mémoire pour un usage futur. + + Args: + numero_semaine (int): Semaine du stage. Commence à 1 pour la première semaine + contenu (str): Ce qu'il faut écrire dans ce rapport + + Returns: + str: CHemin vers le fichier, ou une erreur en cas de problème + """ + try: + # Récupérer le chemin vers le point d'entrée + base_dir: Path = Path(sys.argv[0]).resolve().parent + reports_dir = base_dir / "rapports_resumes" # Chemin du dossier des rapports + reports_dir.mkdir(parents=True, exist_ok=True) # Créer le dossier + + file_name = f"rapport_semaine_{numero_semaine}.txt" + full_path = reports_dir / file_name + + with open(full_path, "w", encoding="utf-8") as f: # Écrire le contenu + f.write(contenu) + + return str(full_path) + + except Exception as e: + return f"Erreur lors de l'écriture: {str(e)}" + +@tool +def write_library_tools_details_on_internship(contenu:str)->str: + """ + Enregistrer les détails sur le stage. + Utilise cet outil pour enregistrer tous les outils, logiciels, programmes, entreprises, ect.. utilisés pendant le stage. + + Args: + contenu (str): Une liste de tous les éléments intéréssants, avec quelques détails sur chacun. + + Returns: + str: CHemin vers le fichier, ou une erreur en cas de problème + """ + try: + # Récupérer le chemin vers le point d'entrée + base_dir: Path = Path(sys.argv[0]).resolve().parent + reports_dir = base_dir / "rapports_resumes" # Chemin du dossier des rapports + reports_dir.mkdir(parents=True, exist_ok=True) # Créer le dossier + + file_name = f"rapport_outils.txt" + full_path = reports_dir / file_name + + with open(full_path, "w", encoding="utf-8") as f: # Écrire le contenu + f.write(contenu) + + return str(full_path) + + except Exception as e: + return f"Erreur lors de l'écriture: {str(e)}" def getTools()->List['Tools']: """ Récupérer la liste des tools """ - return [internet_search, write_file, editTodo, read_file, ask_human, search_in_files, addTodo, removeTodo] \ No newline at end of file + return [internet_search, write_file, editTodo, read_file, ask_human, search_in_files, addTodo, removeTodo] + +def getWeeklyReportTools()->List['Tools']: + """ + Récupérer la liste des tools, POUR LE LLM EN CHARGE DE FAIRE LES RAPPORTS DE CHAQUE SEMAINE + """ + return [write_week_report, write_library_tools_details_on_internship, internet_search] \ No newline at end of file -- 2.49.1 From fc7f692ba36dd42d5bf82a62884dca7f18b7e448 Mon Sep 17 00:00:00 2001 From: LJ5O <75009579+LJ5O@users.noreply.github.com> Date: Sun, 8 Feb 2026 14:41:22 +0100 Subject: [PATCH 05/12] =?UTF-8?q?Noeud=20de=20pr=C3=A9paration=20des=20doc?= =?UTF-8?q?uments?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pas encore totalement fonctionnel, mais déjà de bons résultats là dessus --- .gitignore | 1 + AgentReact/agent.py | 13 +++++++++++-- AgentReact/start.py | 2 +- AgentReact/utils/StreamGraph.py | 11 +++++++---- AgentReact/utils/nodes.py | 21 ++++++++++++++++++++- AgentReact/utils/state.py | 2 ++ AgentReact/utils/tools.py | 2 +- agent.png | Bin 12190 -> 22081 bytes 8 files changed, 43 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index e6f64b5..1c00b2f 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ mlflow.db # Par sécurité documents_projet/ chroma_db/ +AgentReact/rapports_resumes/ # Python __pycache__/ \ No newline at end of file diff --git a/AgentReact/agent.py b/AgentReact/agent.py index 7720f57..5f24eef 100644 --- a/AgentReact/agent.py +++ b/AgentReact/agent.py @@ -2,7 +2,7 @@ from langgraph.graph import START, END from langgraph.graph.state import CompiledStateGraph from langgraph.checkpoint.memory import InMemorySaver -from utils.nodes import call_to_LLM, should_continue, task_ended, BasicToolNode, tool_node +from utils.nodes import call_to_LLM, should_continue, task_ended, BasicToolNode, tool_node, preparation_docs, weekly_report_tools from utils.state import getState from utils.tools import getTools @@ -17,10 +17,19 @@ def getGraph()->CompiledStateGraph: # Définition des sommets du graphe workflow.add_node(call_to_LLM) + workflow.add_node(preparation_docs) 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) # Arrêtes - workflow.set_entry_point("call_to_LLM") + workflow.set_entry_point("preparation_docs") + workflow.add_conditional_edges("preparation_docs", should_continue, { + "tools":"weekly_report_tools", + "no_tools":"call_to_LLM" + }) + + #workflow.set_entry_point("call_to_LLM") + workflow.add_edge("weekly_report_tools", "preparation_docs") workflow.add_edge("tool_node", "call_to_LLM") workflow.add_conditional_edges("call_to_LLM", should_continue, { "tools":"tool_node", diff --git a/AgentReact/start.py b/AgentReact/start.py index 4020500..aba9b12 100644 --- a/AgentReact/start.py +++ b/AgentReact/start.py @@ -13,7 +13,7 @@ mlflow.set_experiment("TEST PROJET") # VOIR AVEC LA COMMANDE "MLFLOW SERVER" mlflow.langchain.autolog() initial_input = { - 'messages':[HumanMessage("Recherche 'Recette de Monster' sur internet")] + 'messages':[SystemMessage("Salut")] } config={"configurable": {"thread_id": 'yes'}} diff --git a/AgentReact/utils/StreamGraph.py b/AgentReact/utils/StreamGraph.py index 2f7194e..4e287d7 100644 --- a/AgentReact/utils/StreamGraph.py +++ b/AgentReact/utils/StreamGraph.py @@ -5,7 +5,7 @@ from langgraph.types import Command from .InterruptPayload import InterruptPayload # Une fonction pour stream et gérer proprement le graphe -def streamGraph(initial_input:Dict, config:Dict, graphe:CompiledStateGraph): +def streamGraph(initial_input:Dict, config:Dict, graphe:CompiledStateGraph, lastMsgIndex=0): # https://docs.langchain.com/oss/python/langgraph/interrupts#stream-with-human-in-the-loop-hitl-interrupts for mode, state in graphe.stream( initial_input, @@ -15,8 +15,11 @@ def streamGraph(initial_input:Dict, config:Dict, graphe:CompiledStateGraph): ): if mode == "values": # Handle streaming message content - msg = state['messages'][-1] - msg.pretty_print() + i=0 + for msg in state['messages'][lastMsgIndex:]: # Permet de gérer plusieurs nouveaux messages d'un coup + msg.pretty_print() + i+=1 + lastMsgIndex+=i elif mode == "updates": # Check for interrupts @@ -25,7 +28,7 @@ def streamGraph(initial_input:Dict, config:Dict, graphe:CompiledStateGraph): payload = InterruptPayload.fromJSON(payload) # Chargement de la requête depuis sa version JSON payload.humanDisplay() # L'utilisateur peut accepter/modifier/refuser ici - streamGraph(Command(resume=payload.toJSON()), config, graphe) # Je renvois la chaîne JSON, qui sera reconvertie en objet dans l'outil, et je relance le stream récursivement + streamGraph(Command(resume=payload.toJSON()), config, graphe, lastMsgIndex) # Je renvois la chaîne JSON, qui sera reconvertie en objet dans l'outil, et je relance le stream récursivement return # Fin de cette fonction récursive else: diff --git a/AgentReact/utils/nodes.py b/AgentReact/utils/nodes.py index 5171f9a..6513bae 100644 --- a/AgentReact/utils/nodes.py +++ b/AgentReact/utils/nodes.py @@ -3,8 +3,10 @@ from langgraph.graph import MessagesState from langgraph.prebuilt import ToolNode from langchain.chat_models import init_chat_model from langgraph.graph import START, END +from langchain.messages import HumanMessage, AIMessage, SystemMessage -from .tools import getTools +from .tools import getTools, getWeeklyReportTools +from .state import CustomState # LLM principal llm = ChatMistralAI( # LLM sans outils @@ -14,6 +16,22 @@ llm = ChatMistralAI( # LLM sans outils ) # NODES +def preparation_docs(state: CustomState): + """Noeud en charge de préparer les résumés pour chaque semaine des rapports, et la liste des outils et méthodes utilisées""" + model = llm.bind_tools(getWeeklyReportTools()) # LLM en charge de générer des rapports hebdomadaires sur le stage + print(len(state['messages'])) + messages = [m for m in state['messages']] # Tous les messages du stage + + if 'documentsGenerationStarted' not in state.keys(): + # Si ce noeud en est à son premier lancement, je lui donne la consigne de départ + messages.append(HumanMessage("Ton but est de lire les fichiers présents dans la base de données en utilisant l'outil 'search_in_files',\ + afin de générer des rapports sur chaque semaine du stage qui y est décrit. Pour enregistrer chaque semaine du stage, utilise l'outil 'write_week_report'.\ + Une fois terminé, fais une liste de tous les outils, logiciels, méthodes, entreprises, techniques, ect.. utilisés,\ + et fais en une liste avec quelques descriptions que tu devras enregistrer avec l'outil 'write_library_tools_details_on_internship'.")) + + messages.append(model.invoke(messages)) # Invocation LLM + return {'messages': messages, 'documentsGenerationStarted':True} # Je passe une liste de messages, ce qui ne devrait pas ajouter un message mais redéfinir toute la liste + def call_to_LLM(state: MessagesState): """Noeud qui s'occupe de gérer les appels au LLM""" # Initialisation du LLM @@ -53,6 +71,7 @@ def task_ended(state: MessagesState): return END return "continue" +weekly_report_tools = ToolNode(tools=getWeeklyReportTools()) tool_node = ToolNode(tools=getTools()) diff --git a/AgentReact/utils/state.py b/AgentReact/utils/state.py index 3224440..e91964a 100644 --- a/AgentReact/utils/state.py +++ b/AgentReact/utils/state.py @@ -10,6 +10,8 @@ class CustomState(MessagesState): ragQuery: str # Requête envoyée au RAG, pour le cross-encodeur ragDocuments: List[str] # Documents retrouvés par le RAG, pour le cross-encodeur + documentsGenerationStarted:bool# Permet d'indiquer que la consigne de génération des documents a été envoyée + # TODO: Ajouter la source des documents sélectionnés pour la fin du rapport ? diff --git a/AgentReact/utils/tools.py b/AgentReact/utils/tools.py index 082b612..354e4ec 100644 --- a/AgentReact/utils/tools.py +++ b/AgentReact/utils/tools.py @@ -263,4 +263,4 @@ def getWeeklyReportTools()->List['Tools']: """ Récupérer la liste des tools, POUR LE LLM EN CHARGE DE FAIRE LES RAPPORTS DE CHAQUE SEMAINE """ - return [write_week_report, write_library_tools_details_on_internship, internet_search] \ No newline at end of file + return [write_week_report, write_library_tools_details_on_internship, internet_search, search_in_files] \ No newline at end of file diff --git a/agent.png b/agent.png index c9200507b1328f8ebde9e60ecd5c75ed5ac16cd7..1a00776e2c577a88cfd6f00eccc8e03cf93e08b4 100644 GIT binary patch literal 22081 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 -- 2.49.1 From ea314e5c5c533aaf5a6814ccdfea5c4be2ed9b7e Mon Sep 17 00:00:00 2001 From: LJ5O <75009579+LJ5O@users.noreply.github.com> Date: Sun, 8 Feb 2026 15:21:09 +0100 Subject: [PATCH 06/12] Moved agent.png --- AgentReact/agent.py | 2 +- agent.png => imgs/agent.png | Bin readme.md | 1 + 3 files changed, 2 insertions(+), 1 deletion(-) rename agent.png => imgs/agent.png (100%) diff --git a/AgentReact/agent.py b/AgentReact/agent.py index 5f24eef..9723362 100644 --- a/AgentReact/agent.py +++ b/AgentReact/agent.py @@ -40,4 +40,4 @@ def getGraph()->CompiledStateGraph: if __name__ == "__main__": # Affichage du graphe - getGraph().get_graph().draw_mermaid_png(output_file_path="agent.png") \ No newline at end of file + getGraph().get_graph().draw_mermaid_png(output_file_path="imgs/agent.png") \ No newline at end of file diff --git a/agent.png b/imgs/agent.png similarity index 100% rename from agent.png rename to imgs/agent.png diff --git a/readme.md b/readme.md index be0e0cb..decec4f 100644 --- a/readme.md +++ b/readme.md @@ -4,6 +4,7 @@ ## Workflow ![image](imgs/workflow.png) +![workflow](imgs/agent.png) ## Mise en place -- 2.49.1 From 82a5491188f1c6d3af4283eb8b7a3bd3d86bf52b Mon Sep 17 00:00:00 2001 From: LJ5O <75009579+LJ5O@users.noreply.github.com> Date: Sun, 8 Feb 2026 15:33:48 +0100 Subject: [PATCH 07/12] Nouveau node inject_preparation_prompt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ne change rien, mais simplifie le système --- AgentReact/agent.py | 6 ++++-- AgentReact/utils/nodes.py | 23 ++++++++++++----------- AgentReact/utils/state.py | 2 -- imgs/agent.png | Bin 22081 -> 26465 bytes 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/AgentReact/agent.py b/AgentReact/agent.py index 9723362..1de10f6 100644 --- a/AgentReact/agent.py +++ b/AgentReact/agent.py @@ -2,7 +2,7 @@ from langgraph.graph import START, END from langgraph.graph.state import CompiledStateGraph from langgraph.checkpoint.memory import InMemorySaver -from utils.nodes import call_to_LLM, should_continue, task_ended, BasicToolNode, tool_node, preparation_docs, weekly_report_tools +from utils.nodes import * from utils.state import getState from utils.tools import getTools @@ -18,11 +18,13 @@ def getGraph()->CompiledStateGraph: # Définition des sommets du graphe workflow.add_node(call_to_LLM) 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) # Arrêtes - workflow.set_entry_point("preparation_docs") + workflow.set_entry_point("inject_preparation_prompt") + workflow.add_edge("inject_preparation_prompt", "preparation_docs") workflow.add_conditional_edges("preparation_docs", should_continue, { "tools":"weekly_report_tools", "no_tools":"call_to_LLM" diff --git a/AgentReact/utils/nodes.py b/AgentReact/utils/nodes.py index 6513bae..a2fb619 100644 --- a/AgentReact/utils/nodes.py +++ b/AgentReact/utils/nodes.py @@ -4,9 +4,11 @@ from langgraph.prebuilt import ToolNode from langchain.chat_models import init_chat_model from langgraph.graph import START, END from langchain.messages import HumanMessage, AIMessage, SystemMessage +from langgraph.types import interrupt from .tools import getTools, getWeeklyReportTools from .state import CustomState +from .InterruptPayload import InterruptPayload # LLM principal llm = ChatMistralAI( # LLM sans outils @@ -16,21 +18,20 @@ llm = ChatMistralAI( # LLM sans outils ) # NODES +def inject_preparation_prompt(state: CustomState): + """ Noeud qui vise juste à insérer le message indiquant au LLM comment travailler sur les résumés de comptes-rendus """ + return {'messages': HumanMessage( + "Ton but est de lire les fichiers présents dans la base de données en utilisant l'outil 'search_in_files',\ + afin de générer des rapports sur chaque semaine du stage qui y est décrit. Pour enregistrer chaque semaine du stage, utilise l'outil 'write_week_report'.\ + Une fois terminé, fais une liste de tous les outils, logiciels, méthodes, entreprises, techniques, ect.. utilisés,\ + et fais en une liste avec quelques descriptions que tu devras enregistrer avec l'outil 'write_library_tools_details_on_internship'." + )} + def preparation_docs(state: CustomState): """Noeud en charge de préparer les résumés pour chaque semaine des rapports, et la liste des outils et méthodes utilisées""" model = llm.bind_tools(getWeeklyReportTools()) # LLM en charge de générer des rapports hebdomadaires sur le stage - print(len(state['messages'])) - messages = [m for m in state['messages']] # Tous les messages du stage - if 'documentsGenerationStarted' not in state.keys(): - # Si ce noeud en est à son premier lancement, je lui donne la consigne de départ - messages.append(HumanMessage("Ton but est de lire les fichiers présents dans la base de données en utilisant l'outil 'search_in_files',\ - afin de générer des rapports sur chaque semaine du stage qui y est décrit. Pour enregistrer chaque semaine du stage, utilise l'outil 'write_week_report'.\ - Une fois terminé, fais une liste de tous les outils, logiciels, méthodes, entreprises, techniques, ect.. utilisés,\ - et fais en une liste avec quelques descriptions que tu devras enregistrer avec l'outil 'write_library_tools_details_on_internship'.")) - - messages.append(model.invoke(messages)) # Invocation LLM - return {'messages': messages, 'documentsGenerationStarted':True} # Je passe une liste de messages, ce qui ne devrait pas ajouter un message mais redéfinir toute la liste + return {'messages': model.invoke(state['messages'])} def call_to_LLM(state: MessagesState): """Noeud qui s'occupe de gérer les appels au LLM""" diff --git a/AgentReact/utils/state.py b/AgentReact/utils/state.py index e91964a..3224440 100644 --- a/AgentReact/utils/state.py +++ b/AgentReact/utils/state.py @@ -10,8 +10,6 @@ class CustomState(MessagesState): ragQuery: str # Requête envoyée au RAG, pour le cross-encodeur ragDocuments: List[str] # Documents retrouvés par le RAG, pour le cross-encodeur - documentsGenerationStarted:bool# Permet d'indiquer que la consigne de génération des documents a été envoyée - # TODO: Ajouter la source des documents sélectionnés pour la fin du rapport ? diff --git a/imgs/agent.png b/imgs/agent.png index 1a00776e2c577a88cfd6f00eccc8e03cf93e08b4..e24f8c4b7775341237af07fc9dfd3722d8c4f400 100644 GIT binary patch literal 26465 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 literal 22081 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 Date: Sun, 8 Feb 2026 18:58:27 +0100 Subject: [PATCH 08/12] User prompt node MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Permet de demander un prompt à l'utilisateur --- AgentReact/agent.py | 4 +++- AgentReact/utils/InterruptPayload.py | 34 ++++++++++++++++++++++++--- AgentReact/utils/nodes.py | 20 ++++++++++++++++ imgs/agent.png | Bin 26465 -> 29208 bytes 4 files changed, 54 insertions(+), 4 deletions(-) diff --git a/AgentReact/agent.py b/AgentReact/agent.py index 1de10f6..1cbef3f 100644 --- a/AgentReact/agent.py +++ b/AgentReact/agent.py @@ -16,6 +16,7 @@ def getGraph()->CompiledStateGraph: workflow = getState() # State prêt à utiliser # Définition des sommets du graphe + workflow.add_node(user_prompt) workflow.add_node(call_to_LLM) workflow.add_node(preparation_docs) workflow.add_node(inject_preparation_prompt) @@ -27,8 +28,9 @@ def getGraph()->CompiledStateGraph: workflow.add_edge("inject_preparation_prompt", "preparation_docs") workflow.add_conditional_edges("preparation_docs", should_continue, { "tools":"weekly_report_tools", - "no_tools":"call_to_LLM" + "no_tools":"user_prompt" }) + workflow.add_edge("user_prompt", "call_to_LLM") #workflow.set_entry_point("call_to_LLM") workflow.add_edge("weekly_report_tools", "preparation_docs") diff --git a/AgentReact/utils/InterruptPayload.py b/AgentReact/utils/InterruptPayload.py index c1a5818..609acbd 100644 --- a/AgentReact/utils/InterruptPayload.py +++ b/AgentReact/utils/InterruptPayload.py @@ -10,9 +10,21 @@ class InterruptPayload(): #EDITED = 2 DENIED = 3 - def __init__(self, fields:Dict, state:int=0): + TOOL_CALL = 999 + USER_PROMPT = 998 + + def __init__(self, fields:Dict, state:int=0, payload_type:int=TOOL_CALL): + """ + Créer unne nouvelle instance de payload pour interrupt() + + Args: + fields (Dict): Un dictionnaire d'arguments pour un call d'outil, ou {'prompt':str} pour une requête de prompt + state (int, optional): État de la requête. Defaults to 0. Définit en variables statiques de l'objet. + payload_type (int, optional): Type d'interuption, appel d'outil ou requête humaine. Defaults to TOOL_CALL. Définit en variables statiques de l'objet. + """ self.__fields = fields self.__state = state + self.__type = payload_type def get(self, key:str)->str: """ @@ -39,7 +51,22 @@ class InterruptPayload(): """ Afficher la requête proprement, permettant à l'utilisateur d'accepter, refuser ou modifier une requête """ + if self.__type == InterruptPayload.USER_PROMPT: # C'est une demande de prompt humain + self.__human_prompt_display() + else: # C'est un appel d'outil + self.__tool_query_display() + def __human_prompt_display(self): + print("=== L'AGENT DEMANDE DES CONSIGNES! ===\n") + + print("Veuillez saisir un prompt pour l'agent...\n") + prompt = input("Prompt...") + + self.__fields = {'prompt': prompt} + print("\nMerci, l'exécution va reprendre.\n") + print("======") + + def __tool_query_display(self): print("=== L'AGENT DEMANDE À UTILISER UN OUTIL RESTREINT! ===\n") keys = list(self.__fields.keys()) @@ -86,7 +113,7 @@ class InterruptPayload(): Returns: str: String sérialisable via la méthode statique InterruptPayload.strImport(string) """ - return '{"state":'+ str(self.__state) +', "fields": ' + json.dumps(self.__fields, ensure_ascii=False, indent=indent) +'}' + return '{"state":'+ str(self.__state) +', "type": '+str(self.__type)+', "fields": ' + json.dumps(self.__fields, ensure_ascii=False, indent=indent) +'}' @staticmethod @@ -104,8 +131,9 @@ class InterruptPayload(): state_ = data.get("state", 0) fields_ = data.get("fields", {}) + type_ = data.get("type", InterruptPayload.TOOL_CALL) - return InterruptPayload(fields=fields_, state=state_) + return InterruptPayload(fields=fields_, state=state_, payload_type=type_) diff --git a/AgentReact/utils/nodes.py b/AgentReact/utils/nodes.py index a2fb619..352beb7 100644 --- a/AgentReact/utils/nodes.py +++ b/AgentReact/utils/nodes.py @@ -33,6 +33,26 @@ def preparation_docs(state: CustomState): return {'messages': model.invoke(state['messages'])} +def user_prompt(state: CustomState): + """ Dans ce nœud, l'utilisateur peut écrire un HumanMessage pour l'IA """ + + messages = [msg for msg in state['messages']] # Je récupère la liste des messages + + sys_message = SystemMessage("Salut") # TODO: Anti-injections + user_message = HumanMessage( + InterruptPayload.fromJSON( + interrupt( + InterruptPayload({'prompt':''}, payload_type=InterruptPayload.USER_PROMPT).toJSON() + ) + ).get("prompt") + ) # Récupérer un prompt + + messages.append(sys_message) # Rajout des nouveaux messages dans le système + messages.append(user_message) + + return {'messages': messages}# Je passe unen liste, devrait écraser tous les messages précédent au lieu d'ajouter à la liste du State + + def call_to_LLM(state: MessagesState): """Noeud qui s'occupe de gérer les appels au LLM""" # Initialisation du LLM diff --git a/imgs/agent.png b/imgs/agent.png index e24f8c4b7775341237af07fc9dfd3722d8c4f400..2dfc650925d2d7effcdb23ddc730c09016779f77 100644 GIT binary patch literal 29208 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 KXm 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 -- 2.49.1 From bdf5b7dd98075d07cec89a857fc095995ab929fa Mon Sep 17 00:00:00 2001 From: LJ5O <75009579+LJ5O@users.noreply.github.com> Date: Sun, 8 Feb 2026 22:21:51 +0100 Subject: [PATCH 09/12] Renamme node central --- AgentReact/agent.py | 9 ++++----- AgentReact/utils/nodes.py | 6 ++++-- imgs/agent.png | Bin 29208 -> 29550 bytes 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/AgentReact/agent.py b/AgentReact/agent.py index 1cbef3f..b9a87b2 100644 --- a/AgentReact/agent.py +++ b/AgentReact/agent.py @@ -17,7 +17,7 @@ def getGraph()->CompiledStateGraph: # Définition des sommets du graphe workflow.add_node(user_prompt) - workflow.add_node(call_to_LLM) + 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 @@ -30,12 +30,11 @@ def getGraph()->CompiledStateGraph: "tools":"weekly_report_tools", "no_tools":"user_prompt" }) - workflow.add_edge("user_prompt", "call_to_LLM") + workflow.add_edge("user_prompt", "LLM_central") - #workflow.set_entry_point("call_to_LLM") workflow.add_edge("weekly_report_tools", "preparation_docs") - workflow.add_edge("tool_node", "call_to_LLM") - workflow.add_conditional_edges("call_to_LLM", should_continue, { + workflow.add_edge("tool_node", "LLM_central") + workflow.add_conditional_edges("LLM_central", should_continue, { "tools":"tool_node", "no_tools":END }) diff --git a/AgentReact/utils/nodes.py b/AgentReact/utils/nodes.py index 352beb7..6fd3020 100644 --- a/AgentReact/utils/nodes.py +++ b/AgentReact/utils/nodes.py @@ -22,7 +22,9 @@ def inject_preparation_prompt(state: CustomState): """ Noeud qui vise juste à insérer le message indiquant au LLM comment travailler sur les résumés de comptes-rendus """ return {'messages': HumanMessage( "Ton but est de lire les fichiers présents dans la base de données en utilisant l'outil 'search_in_files',\ - afin de générer des rapports sur chaque semaine du stage qui y est décrit. Pour enregistrer chaque semaine du stage, utilise l'outil 'write_week_report'.\ + afin de générer des rapports sur chaque semaine du stage qui y est décrit. Il y a 25 semaines, tu dois toutes les résumer,\ + avec des détails et des informations complémentaires.\ + Pour enregistrer chaque semaine du stage, utilise l'outil 'write_week_report'. Tu DOIS les enregistrer avec cet outil.\ Une fois terminé, fais une liste de tous les outils, logiciels, méthodes, entreprises, techniques, ect.. utilisés,\ et fais en une liste avec quelques descriptions que tu devras enregistrer avec l'outil 'write_library_tools_details_on_internship'." )} @@ -53,7 +55,7 @@ def user_prompt(state: CustomState): return {'messages': messages}# Je passe unen liste, devrait écraser tous les messages précédent au lieu d'ajouter à la liste du State -def call_to_LLM(state: MessagesState): +def LLM_central(state: MessagesState): """Noeud qui s'occupe de gérer les appels au LLM""" # Initialisation du LLM model = llm.bind_tools(getTools()) diff --git a/imgs/agent.png b/imgs/agent.png index 2dfc650925d2d7effcdb23ddc730c09016779f77..b255b9dd570757f0d20b44340b137daa3f988fee 100644 GIT binary patch literal 29550 zcmce-WmFyAwk?XgySux)y9W#I4#C}mEHn^;yE_D1xO*VD2PZ(#5Zs+t`Oe<^-1F{j z_uqT@!D^|sYF14dWA@%hpP$s#{sc2+gt@*yJzRFtW2Ix1#bp$3sV=^XHg)44xyny6bME11!j~8Mg0Gl zzpydUB5gQVJ6ckjP`PPTO7BJ&Mk9Y=W+m+=LXHNCVaD!y%qD$?qEbs=Q(`gRns18M ztmm?{l-lJ_-@~8hk=0s3&$N{ZhsvADI6HLE{#q8-&8$PUA!#noQX(PHy#4(yUa_*$ zA~eC)ag3j@j6qCM8E^cc&=&_GQZMH>-kvoki&BwLASJC*ajy#>b(WjPPYoYAus=%)I?u5s)1!@LL~=jUErW^*Oa=w~Ee6 z-h9{C;txH+PYH)dPOCu~#F9Fl3N{ z0qxlOxl(b^YVkOANd?#UDL6<5ru;VVR1rfp3>0CP8^+u-BwKcq`CAqxGC3R68>~Pg zu$fIk1PdJ=?cLtS&%!qWUO=+@F}*T0Z}n6?4KvHYpcjp&s7P@}Hhi1ABa0Hh7-lrD zIb_=!fg$4oJkY@E`+B_C9&2>roF&M%@5&cshX(Y;P^60>H;>MFZtxQU6CIw2Fnw`1 zau`Apr8*eH>0;NxGf`9L8`yqhNtB5tm4XNg7I_xwV)j=GjYeZH$tN^H*R8(m-}8#6 znH=T=7dziS;eo;BpH=-1d?K-Au>U@Gdv#mg(!;nH_xb1ta}xb!SD{dwU-n0I6{=`D ziGHajslz2JcwNd_w0yCTP}vo3JHv5AyhNh@*U9wn%=SVcq1AGQZq9n&bZU(rCbRj$ zHgB&lgOR9Jx^*V=WvcXQIrlezbZxFaKHc_b0T*>@47@IW4JEui-JLbsPDkd*Ag5G2 zrxK*AVW@@xBO8$-Q*WqI(*;V-%0gQGc5tOzW6Jub%TT7K&V4bl_27fG1 zZPhIJbpGuVHrUL$BIW4j&ys$FWZPHuLaBzjbaqoZ*eE?3?;9>!g&s-Z z(V&?O{A;m9J4kgZyA8vhKtFYL44AD}=M5xGpJ*$|q^Kx(nd&~sa6McC9iP+nP&{dc zjqU*c#*=t*@dkVZF*=287VcRdOi6nl)lPhVx_`Bro2+4{&NT~FpqfmlD&(=R(&>F7 z4L(-Y^QP%FRHf(qw+-q z_yRINK3+p+5_8+AXeR9k_=WAy}G zozxmZP^>I6u{@_o{tpshuKtGBR(clci0j=@r$#a1_Ur-!dyLQKlm_2glQO#-XKz;` z1@H%Ns4*Eo{Zg}BM=TNqX8h#xJA+Ssh8XymnUhAWTOrU**uOwrt^BJwM`Xky2uP>& z!?7K2(_sV<=xoF5!uVoV8X6!wA|PSOALrcBipK3f2aZIg1tUMDi4goy68@V}cQ#e~ z^MBId+;V^TF&*LhCE%cl%qW_tarcdPBbH(n5{MYa3yten>wGONncG^rW<%i)-1#Rm zrAo%#=P%@&P)Xl-jC=B&;`Y5^W{DW|6d*C~xgLh=XWB-1$nv>(53&s}CRtzushL>! zmZEt?$Yimz@Wy+v$z(stdJZ>OP2i1E4N)gVu~QUzu5i&RmHUY(!ja`i7b+-mt;Z?A zFf-ag7SO1w;;@$a1(F?yq}deH3RC0Iu2j-^bkGpvKn-!hVvQDrBuRx2iwNc7<0mI! zP%C|Y7bVTbiJekyVO+(kl)4D4dZeWCx1k{aREV+EEEZ5!J{|w5psb=i3J z3SWB6S^0AVDkC`9Sj(+unKl$8yzhM{?@ITrBcI7XjOIX`n40VknI1j7l8&vNc#NO^PB$F#`41Gs<3;BOE9|NdmiDnkUh#%>0`iPF%>1fi}U zL?Gjf1w9K$UK5f@Voc4JsS+2ek0e8@u<9vdh{D4nZ&Lul=oy6MjL_H3=OFz8T_ zK@S1G9t?)?OUh?24|;iQX=#C(^#JrWmD<&>%ceWZ4epD?NC>6=_AV&!i_`z5NbY3ewm)dml4`w$>DKWa#C@WW6iQ{0 z_`Im^BHj~1j~B~L8km-k=(iQsXJb(+Y%v9agVuZ3KM4QZ{>Wz*=JGMdxEAf=V zQq*~IVQx2gj@Jbm;N_|E^w9&KVEkCdLd?`G8dFt!DJ^%?(%@hDxk3k zvFq0(ld5rweJEhG%eaD1KuL>(j$YCoC(|fNQ_$|TT3sxrl&wX^*U?OzP3#6L1d*!ZETv8)UHp-; z7QQ_0Rq&s)iqBLjXTDB_A@+mRHjwqKx>)|Z?CZf@?T$7<+^*R- z=Sd8FqC&u|BFDemuF_Hnl~#uLqCAFxjqO%|Lm1-sNB~8?$HNorUr{+F`w$umc|)ud zbbDNXs%c?-wsBE=JJxeY#C`Y?t{ocP=k5x#m-+aGE#_Mo^aM zw_tDQ9qgw)Uh5r?u_hi*tKsligyEPW;(gu--u_%t@-2yW9EFGjRGF}aHT?ZMt9}<+ z8Z|ZbVy)rhuf2Hy$}+uocwQ;akBXw#T1{uqPh-hOMk}j|U32N>J)93XAJ?6hi%&$b zxFd6N`0-WPb`c8~e!jtL!`V0>jLPWktf9T#FOv(GPBq8L-h7l~_qlx>pFJ0vZo3RM zfbwd^gZ^EP$n%AzL?V?K>Jk6%nI7hyFb3vug}4Z8dUR3$KyiWl&h&Dht9_@nrl|}+ zuxe-IxpeJj8wz~z^RhMBkg%`aQukA<_{T>xmjm@i8{>OcIyyRPd34{$Ys_8o;MdLI z#WVlcXT+QsW&Bglh~wq<-|G)r+uMa^^=a(7_6sAQM1JG&JFW49%B56Pu5U?+Ra8~0 zv}-vX5A^~9;Bm`;Z9MTq!{1~GT2eYfiIa0J)h$^aCd@V{r|mgbEZ>-R!vUFa?>w

JhM3tQpFU#c~ZuYj-e?K>J<{l;KO6l|uzo~9d{|^_4}QCi-hR8v@5Neh7#f51IsIvsWQJd^ zMt*a_*kiX%#I4mxEq`~i(uwNL?{az>3N3Hc?F|_Y-N0(v0f|Gx^pL8IZgzGFkM8xf zd;uK>|3$>}+-Orw+6-F&MgK2!gn$+FzMi|SiOTQwZE$)L|N1T>gq;%^;1?pcw{sr0 z&ZwkZ`}d#1-txrC&K)a$-t@ezA>-eIq_$*o1p_P=4k1yAc{*KB)n5GL@L4lS@yWj* zpI#)xgI#a0Cr{SU)>ed7GWm#Vc@G`ar-Fq91qaXGo7NBj@NpOA8|vlNrH7^km54#V z7}N!5O^D&p!@{B{5Dv^J0o7+ysnbl?mK+8j*VND=80d>m6Y4;aozcf?QZJRdSR*7c zY5rBG_MGv^u+-hFZK=Np`s(252eQ4r{X`A=pSQ#1?r>8^J+Y6E1R3Gf@+#ow=CF;M zQ{KbndT0%eL?)!r8?Evw(z%=|D==J!`ucC8o{oD;Kek$Z9*g1i z*lv#aKsmiXYS9<&;}fT-5Sx77tg9Rr`khTT|5IS48A*m1Y*kA+x}t6)KbzZdb~l4j|cl>IsJwtQ)M zdGNz?;%Hh{7F2}9w(HF{Rb)8KU^AUx#QQqK0_72liohW>5u||3%uLR4JWYNkHa49W zIEX(GRtQId!#^32ND|7YX-qWDww^48p6>(2k{7D&neVCFVH`?3z4b=Z=c;Zgiup)pc*rH@bbW!!s1U+}x7)SWXQ! zTTps0Uc=U2k;~u%ec_vl7DKqO_9Q~V_z%8mbuORo@9$kUL0w&4nRN{`%F0#YFwOgR z3~3KhMqQr!x)0*ha$h>(u444j(YONr{j4V{tQ?ryt6e{4)@|vB#c+p2_6czJQZm|vwepVRl&Oblr1Auz0lD^kzRX+GT%>+}R#bI84t&FThufF-TQiTP@w zsL^sH!I6EGt4)5Bzq!AEa;KsmqOH3DBSs6L0O*OW7 zz%nzH@t;#L>Hkt3y=uqp2|8Bg5YT~J3SV^rbe5y_y8xmu2{P8_`AgX^{7^qu=n9&gRHQ= zS`pU$$$4f<4vk?lgD9@IHyRE3$Qgc?Ktnzf>Z#DYqOuxYrk6N6*w%>evpFG~Z0sW) zEv=*$4vbHRI6Xc7Ff6l4*Y0@wJ3@G*HqVFkWjARG*X-j(D{mSpC>2_fo*YhdrJwd*kTeO`{Nso7mtVd zX*N4d4#nC^tK*%XS$;=HBU-;YUcpXSDDpF`SW`})3^+eO4d$ zm3XFGXS%Bwr02`fK=7QixZl@l$`0hRq8Gjm7_AdH{hDLz}e@09_ zTt5D6TtvNZZ0@UD@qVYbOS{(}p_Jg)=U(~vle6XefG=z<4isO!@A7DtgLn4d+YNnK zIJ`Ud<7xhI-dXq_Un!)QRG1$`ZPcOyt9N#4B0xp;JRDbLZeDnl9=T&qc?5}x%o>HZ zKW!ZJYj<1UgRaN_W_@rF+d<>$);Ril>J~`tO(cZtYLNF5zz=zPd-$zG3Yd)OS8v7?c&(@5aX7kr& za<~bkpwJVNAtE)}TP>OONQ(4m9c*f8Y8KeLPgR$y7|P!`G)vY2TNScxoyMSzLz)~W zUiX~RHi28U^-V^IyVvp9QX@4HEE6A$8zqEHlVY|vs&LcUqwREH_i<686cWh;TDQ#8 zh!4sl!kP_C6Y=i8$$APH!V^*da~U};Mlh@`3=~6)_brU%HHIhRO6+g|epFP{7cy>y z=gL##faGV${xZd6c_!tJ<|_hD8tweJc8@fykCE>Oe-G{pu7?v4 zkcbhlmBBX=ADx=8n37WSz#0HZcn`XRxPYlLWZX7vfO7+rw_l$DLk5szZ>6wv6mS`R zO9sccXmAwN3cMn~koMm-JP{Lf%%>&dqs<4iPTw);u|yW>b8oX*EQ8Ccgpu$95>d9I z=l~?G?nqPv2>{+LnHvP+K1Bu$7|Ba0;Csnn49SMSWFTBFP^pg|L9^gILL@YS^^Oww z5|il4LRt#}ghNvKDd{dQw>u6&xNqBfS=rpQaV!24j3m;Rw=eM7`t>8#k^m@;>ky7X z^zyz!2k3!hAjiv&v_+j_UO4a8IhUjD^gzJ^O}!zfvMqYDr&~u%PLm^1-eHz{ObwG5p@}Ds{hsvTo$?M+_c)4DSy>Q3X@)^A zI)<{?v0JxKAvPxj*mb&~*U>^4Ji5(9h9rhsNKH6Gy5hTc>8h(=Tp|9EH~ytPB&Vg( z;rvHW!22(~6z+V*k%S0QO*Ya2w2Dy(RGVnQ%Z4W*g~mw;`{Px}^T4 zoBS1G{^}?HUwtA(NC6#C{!a(~3P^xTBst5YiV<$eUEr!f@D( z+9bo^Ewm1UC z2gIT`vsO5nfzI+zzZQ)6-n7DJdSCC5$z;F9WaX9qv2NeiU`$JuVRWvU(#v;3S0U0^ z?tAeNb<`ehegD2U;af>b2X1FiH+fY_!Nm6*!PwpG2GY?Jwm%nDKV`(Gr#CcaO!6O= zQ^>1e#NKV`uTPAC2#A(z`e#-|&y-cPiJD4E%VRuxo15k|XxL}wlq!jiZ25%N#*EHT zo4A(Xv#xZI;?|zRaIb6J8>>qtd&sUa9F}@c6Q^vr|520+X?isWX{@NT&%XP zGE9=YRah@?XJ*9J!6@l*$zuK~;L0DXX%vqWQ!C^hpD!9bwy~ih!cO7FhBnLtAtM}y zAdR{w-#I-hp#W+C^q#y~QcWYG^BaHelGPStvOgZm~9BYDY+s~X~bh- z#GqwUyn4FCC2nALRq z9THSn0~ip@)BsQr`hZ-}M~bK*je7Lgd!7WefrWGnX^ z^|Yy28oTMk^n~|1pg8o22Hw5$=CcEZq1UPT{|+voxI-5vyHmM7ntO0LQuO<}8_xp@9r(dg%z1p{{aPl&5psc|AumcIeSw10D&g zagZX;+bx&MrgHti5Q@U4>DC(f9-ilUI|-kyd~9&ejhwgr((C<#rG>Vz9Tw%?>bUZH zIrN15qALw+((I2}{Z36SPdHdfNog$nZ8C@7$8USUB)R-^%;(SQdaqf{%BP#Xq89gW z&j)od%?9=E{kfg|<}a6}#C;_Wb0tFn2M&yV7$tuL)PQ(WaSq?D5o!48n-lKcqh@4R z0u`*3-rzShj5o zyR`?nULQz%iyhZC_ugdu}zhSMg{IUog)X?7DKkKc1Ec#~^f z#`}O+@+$xR6bw-W9jVe<8{F(no9Wp8aOMOQ4Ld9k9F!GCf5(x2>(paF=X3Hi& z498_USXeaJ4~lWPR@XRDAhJ{gvk~gur=vdxU#6CupOMi=f=Iw_JDu0&^QHrUwG>is zqrml_AJ^c~iQad5i{2a5IT!c!-2tH3d9xO|IMUgfOtj-J(W)5?gZyWsbLs0ebVgKR zAtiH~le@cnWZmE!*_-^qW+u&yB(>#Ey=55!Owt&y^KsLc+$>O=&&eFJ%=+>-m})_A z9+OT5R15A-pV-IS3g3$))$Eq=y)@R<_Z8~2icGE!QuE6-kdinW69-Grqt3Nt1^Nwj zJwr+y$m(laT3Usx<4JvQLLRp=DvqC+l65?EE>Tm!0C6@xdV#a=X!D70Jb#ZaA*#jFoJ{*`zt8ZXHOY;po zwJ)*&JT=8Op?gk_jO%WZ1}zSU!@U2!0vE!$E~=BhIHVvcf#&Kai`NM@7_8pm*^WxA z%WA|^<+y^x>#*SF;YHsLDg1?MJqik+;f@_UDgZtW zOas#a4iE$(|2r7;dG_a_rtnUxGItC1jWD;a_150{GP#Mq_6pnOEmw&T)J zZaW*BpsU4ZKx+cc{is?ZSXY6EmoFmY;Vek62KEaaqN9(eXC88&2`G+e>P)$gOL?6p z4oCHmSi`+CVEr|^i8ab2-50{AwCQHv<^&|(>zbmp^FIj zVTX$&?27w)x~zRcb&c7d)R$Y3<`U(-9h6Eq4(X*cL__fXWBiRifUF{CSn~ryk@5sN z&#vT7dZvD);-z+N!X2bbe;I^5bT(`tr(6w$eu9|rOb&cLR|H52Em(#YAjlx<+si$z zm8_*Y(-8apL%rx-L|c0NnGbe7Ry}YqUC8L@mT9q1Y2gF?(AGV}!$VTa7Kv1{w2DK@ z1Dq1rOvylYZ?E5p1PWqy!P1hJVSd%Y$g^UuF@ZJ z9kH2}tA^vUq?Ole442HSt`6Qr{T+k9f7!@%M)fPOne4#eGVSt28^KffQ7wpFQ}UAy zVlvQ-oK;^4KgURY?%{R557+56z)%4Mha^DxKiD`@wT8N;9a|2cB?$>}_`~UX`^9G5 zc&T!#)|=V6u~hieOj1j!(fofCLTxWFYylk8#A4}HzS+X@N-L@-{BwaO?f4f$ZrL=X zp6P!vS&uy=B17Y1_v?g*vRO(%}LBCal1QLm;sKm#|WFbaeRqStZUo zQ7{3DX&L-J50R+MhAp+o^<9uJQRA!R>l-3v@2)o6J+#uDStUIv=Xxz3=n%S38A$A-#{ z$>2Hu_0=Y*>~0?@0Tj~4?uPN55P`<8Y~MlqTFU9t(9Xf*1rfANL=iyP0W?G)gxseO zAe2*K)HGFaU9$iMXH>bozBK7}N0vl_0zeRLD_mM@>ol-+Df9>iU1QC{Q+T7*Kq4h) zw5BXWdy~kvp&RIZt#1NbnT*o<)s8^97JLfLBp{e2*4 z7-p9F7xnL_1LgiUf4nDO8y^#Etw4SVcgjcdj-PN*51Cd!GU#WiD z2HZso3el9mD_1PeRpJU8Yl}bP{MP z=bMtG5Hk6k9O6$!17q=Zb-o;f8*ys45cclIEr**ESZ7gkBek`)-TpURefR;3b*8;;J97I`u|rs~2xM+vy-4PF)^Xx(YpL^m{{Ir@%*mqeYMCo`1txPNJ|@GmkD5%)wMP5aS_JE#6)uO zAev}2z}JxCzW>?EeFpfyM8Q|f?_a`Gy8v^|Kse&?uz|~7wO)NuLqGV}!z)&&x4n`x{`4~vB#od8pt|Ivo8 zpI@l50@4>M*_aSJ@3Wt|6he@!EMe3D2+V3N_)%xr>U^@+O0Ur42M|rb-PPi}p@hL2 zhL;9;aeJ}`l(Rm*JmRLIlM0obIe2aLL8>DSK=rYbiUqb!5iz3@Hi1zWo3DxV_>KNt^njo=IAp)w87BO5a!}M zV38mvCr7cd2i8aT?r9a~1a z!0b2nRxiN#Q1P4rGg#ogtDYGgItPPT;JtbXJNiBzICz`L{D4I@l#`_!vihq=u^g#@ zYk@){6_Anm9G4;T{W*=$#{pgEL_#9>B7}vN6{w@QY&qa!V4Uxb;}^MvXqT3jZjVPk zz{AG=kk~V7cenmMS8ATgox5-~2sR(gz=P|yJe(=ysDG~B62b=ZFRpnM$zu+zgsJ5AS&tgMDHhHPOU z=g}luw~D#0P&P_K2xSZ=KJM?KnVEz=FX_4W_r67MDtRJ=zmfn)AC4q~-pt)V zPY-3>EPkC)yHvt@2IWp}_`gTuOZS{NwRR4qrK z-uL1cNh2*iy>xX9XW4b_2at`%)#p)YzDkpc6sLOGn-ub=+ zWZZ|sYG!3+Woa4a6iidjU525otXzwP2L?Q?xXe0WD=E}8OV?17b2^3?Alvi<(Yw`t za&Q1(NAY_r&B7BKppq;pDT!ggWY7f6sx&e#Q%O-1aJOjiD+wM&NQeK81F%k)@$d@N zq%gW&w+DisFXVyX{Iq~Nk+c9T*5llzvyDz4;AWq*pDU}YX-x0G0+BJ}sURTp#a89D zslsEJVj76=0+p;X5*YgxfIYrq@YYd#oBDIEy|2M79! z78io=RU0axY2)xqEpV04A^-IPIJ0VXYlQ47eY3K)9? zMNv>lP`v#^L$If3fM*uSf~l2o=LNOzt8{?SsII9|PGb=?>w^IM^et;NE~lj6aD3^z zA?CDzSy1%x@mWSbj{QyLdwr-uhj{yEf1fU&W(SCJz>i?u;TdXR09bGE;P-pko2wU9p2t_FD48kkrZNe~K3_=)TPhdl%xZCm>B%Ggb zEhg+cg0Ff8RwPV!C)Iy^0UF_yNNEEj{5;#CzeZX&IXjYv;5FbJ5zOmGMn+gzL(Dii z*$QK52-U^=>6=?yHyf;#fmRFm$e1X%c^vXM_np2S+oEuVv?6FoaeN0d?|i3^i|g&D zJZOz}7IEyv&^R4J4lil3=YECMEKU~;VT4BzZi2NdLfcgamNv~ObRLBOEZ{1RI>IL= z76vwi>ub*e;{_2*fVtpSpMMVRUI(^o0ZWW-Ce0FrL;P^4Ph!yM+EZQOC2s0qE{M7k zy?P6b`1Be-AeRSz6*MEOAYQlHk_90%606d(v7zOqnV6W!9GNjGCtVz`Gy?q}gd)%f zG5{Hm9mc|3LITD=kCQ6I$b(OS5i5A!2S@r*qkpbD`cd@`NKmzwWF4wtBs=MuO^%!v z$^J*#KZ`Xk8y&EcFco}22t||$*@2$f&-ekJHY?>L;!( z1U1eo9>4QC0;PELdm#OjqiEW3P(Gp{r6HY1teHw!M@L78r1b!BsMOWM&< zuiHu#`>@Djryr$SQ0Oq72PB9G`tTUa@Lt~w3%Wk^vd{(^LI5YgSAx2wStH;YI=ub> zigrQ(yDYaY%9I@06aj<44mI~qniWZ`@g3u7xp0vyVd z5VLrsUAeK)_oHS%JuKil)KS;q&c_o0paB@=QK|z#R?x;$lYQU72t~{iVQokJg~}CB zo`@c0fHi(BserZ4W-?1=btL)>@rYp98B`|in%~YNgAR009qcYQ#FD|s$2TFBW`|S6 z-NzihCF(miaX3c;VX4O?(LY9LYkNR)bx0Q(VFm9wHZ_IjAfQLPZdU+-j0~$xsMpT} zEkI{Cj8Ac10kH?A6?-U7p|^g@nnNz&Y%WP$;S2{Ae7XB6KR>@E`}}(LPv}v3WBu}W zJthgs@$cV^;=XA=GmQ_izJ~08V0n#l)6SmfD>SG<3{tk~5M~`C@^W&{Yb__h(F3|i zM7WLjA#8;{pauU{(nMtISOz=q|HqYQBR7pkoUmlcSxs zL7?rw-z?M^>gEp1$k=jN8Upz3bg{-zrcMG`8J0mWs}KOPf<1I`hk1a3e59A92LE5p zt+#v7GcZI`92W!m|6C9-&wp%}VE8*Kb13xh@~noZrIts34aL6is_$dsh%5!T-6Y_l zQbk8c2Z3<`F)KJYm@0QT6-*o|5rUV-r4Hti2DZiPkLv=^g#ZNk3nE$ISXgjatP9NS zBY}jq_1WEDGLy?X<2Ri?@tjn;`rr5422Lda%a<-%Z0qO;3z+S zD~|ZDUe;U40tX2|hpZSN9zMRvKAq6`4xq&M&jb@?UZF#Mf| zu+xVkVA0ms*SiLc%6XLAudc2>j-@ig%t}i%W;mAun`fSo*Vn+g1WIWD$43Czf6~9bx~kHvr;==gGE#jQb?YDT2g0DGGsB`44i}j05MW$^f6_Y? zS-M6RGX;{eF*t5+Zk*iQ#ie~?2?+_n#){6j!z03I&)a~>d%#*+`ZR^fsd~Y{8?Sz1Tyz47`6c&sgf!!a?p>N*O@tGJkL%TsdvTHbk;@aks|B++bm$#n6~DOtvie* zG*FMe8)iubmC?MpGf2hdUc%5^8je*7&th&SKRpFpJ%pD=k8~iCpBTp}Yd5>O@{hMY ziU)7ikw1Dc&i@_@l-eR6T0q-(w_%qF%1rAZS(z?hZzv(4Rcsjgyff-9tBoVoU=xYu z>)G-rvlJ#`N#u!1mOpYXJ0b}o&1xy-x&OKAg-aLlK`J9(g_D>`P~4rK;lqz#7m5x^ zheMNxF63Aat=#^(V9=E(>0KSd1OvXHy~(9#%YN9f)g0j26lI{!?TWl!{I8 zWut98ZY|)_L6qd;w%mUk{z5F(1RQF>|Ch-Z5oBe#UyWEkO)|}y-LozQ)ZMpE)^vd~ ztM7wgeAbi^#}iJ$4>7JE~<-&-_lWc*W@!b`d0>k zF?G4kzS(iO6{wWOy={UQosRB~e~@u;H$FiD1+hQp^7F*}b$pISUO%#im~Nj=Ux=5_ zZr<4LPBviyuf9Wz&50)NUsr5pz;ugha2;ZRQG+KNcj`PqOw0@gGBArD2c?#rYrf@2U-+mT(cccXKRUdD(YQ^e!z4E)= z=L+*%(N-uV!Pk`(r^_bl>hUA&p;KFW zwjH5ESh%yStgI(}k#h^EG^(jhv73ro_VoBZG`W`^L4`t0QHr##0;W>iyU`9WBDH+M z*VP+k6*62!E;bV(;{Hw+LfBpLy&`eXwL)? z!5+5ktcGP!Mm-vqaAJOst_vfIhI}Wj&Gp1wP54&}+gGrNh!;S4a-;j|zP>n}h|lh* z*Ax8E646BLyJ%5cUPU?*SYO0kC zZ~cRv^ERKua^P=s^Td9L)9ik~Onuc?f*#Elu$PHIdf(zC$n$)5K`z#12zG^=#c;%7 zG5Gb>Zoe;2EI_-Rc1`=hc}JNT)ZrN#;g_Q&znLA)watM9D{wdU)uhvXRCs$3iwmSwm`FSl`MfygCAMm-nakleNHCKD>zy60@!Cn z{)28^=)TQ9FneJ)=M~&sd}P8lNb7K}K5@jttc;A9WN9no^nOyZ4?xAE>dFur3?Y%F zoXR9@b#4b{*tGJd-)_pz$hbcI3D1W5TuU3f=ymdl|If@Q0W&kK&uHASJ{aYL&z9wN zyFQw+Ou!)#7#R5J8+qW-fi9AoQ1ax;%FvG=#@@xyK|{)w?XebOL)PO!nKoYx-i959 z>~n$YIYu(=!(&=>eEi!jtL0B3baZx`{`CPUvF_M=4pUWC6?170s*F0>nEQ}_+`m|y zFVB0_qwpjgVCMJL!}r#%4_gL(VJ|PC5np2JddsKfJ>`>EED$Avf_BlxcNTTE!pmIG)vG3T7c2Y1nEkSpP2*bgtLjY$XryL`8!A2E2!=Uu_CqO+ z0h{C!dI9OVS}Gz(L_`FTXrX|*;$gP6blbWsF@v%No=&w9gbmuV7?KYvok~rXSN{iS z58%w4Yng~>Y(fsij%*7GJOp|P%UxlYwG~VH%KgCxE+OXW{yt^zr%#pk7Mef`xQcAJ z+{Q%atE^vFwX>mXkE48~%qN@*dwWg=)Uj2t8?Hto8|99K_1f=@m*fRJW(YP3z1K2#vt#QhZ2(!6GIQ<=;;OD9;5S;fFR7; zyL>N7EF!)p^#7FP>fg(lO>Wedik>Y|de<{R<63P7X(YnIP!Lh#zIVhWtU$)mU^A76 zL5z=l5x(EsO56VJ=TAtH9>66!TDN-@B$$dp4gnpducoLL>59dYk(n)h|2`wxB4IF}2#iHgCQ)*! zmMkJ&;pRbaZ<|kCwtJNKRj_H6Fu;7>Lbp%^PFEoPiS@@94&L5$w`LwwqhiPs!mK*( zOD3Vxn&A4DZS^xp1Sn%m*+D<6>o45i{K3bVaQ9@n7Ue(jCx_bn{!NBEkHxYmAm9mO zDv`M#w4D4-W7Cko?&JMA85=`2qgKZ=kh{pmI=+h}6qIp#$4qdB+TjzVn~_#1SoBEA zR0HmXyR*$aVVAMANq93;{ace716F3{KQB){689*-Qfbor;u2F*U>+Ghus*!*WXIjG zBmcQbero>kgL=-D_`aOi;aRTa3qknLJ|0U0M+r7cE{IUqBFdChbTK8jO)Pd(vE)6g zwC-5EF|2Q-$sTS$tQv;o&n?*Wr&L6`xY@z zD2@!_K}y66@F_G6#AvivpB?w#nppEqmfue;>V0okY0b(dLJ+e;pRWI))C!M^{<{X> z$Bk!jLB#tg8bF4S#pk?0vdX-zuyrZ@bTMoBv`yfCF=0Md-w>(8$^iLF!G|KLYKI8A zF{229l9CpV=A8|8C+>x*J0F?-crIa4Lc+%REtR4O29kx!%dn3&bRHJdIa*JWnt}&I zTDba%#&0-28_ny7sYb6-bj$P4YF+|N-VY0j5i&pE*Gs>?|G;JpdxzOb@}MqC2khwhbm`Qcfd)&|eTx^L> z^*&)T`}SmWTvu?)@L3XXk+v zX@JWob{C6dv#Tq{`{-GCy>o^~&~{O?OcfyIw`Q(!#NyZaUY!{_uwhU~DBpYvOXDAq zro?=s)nl!YpeQ}S*0;xNaORM%)5@tV!Zs5rB!IZ81*dvH7i z;>=}6Z!S>gdsfkv;j$ACMRlMN502!|2pLfHSOud@z|>TCBt;LzPj4qZcs zfV2ZLbVJ3-`1F?Xut4$7x4I8sWi2H|366G`?0W0smc>YRMV|NhMx_Jo-z&!` zx5+zL0)I)%zqRDE8pPpk$PPUGTvw#q3GgzosZsB;E~GJyhyYn!#NA11XM<`2`e@RURSx9tAK@w*Yg+(P z1e`q9%UIo9lks0=Lpd_G`gMC=hFL8qo$QK0Fox?=$vNW#3ySZ#1MMGxz7TjAI1>tb zuj}*$i4RGFCs{;wj-83<%)7*FFb40{3YgxHzj`W$6BeVJ`t*K2jve#vYDK$iHmRUT zNIdC(QYy8Mc$rqVgdiwB9q_U$KL1Gzn4 zgciBenlSrxaZu%PRcerL$ZVbp`H4}6{-+P?y1%@Wxy1=0smR|Y{ow)PbSV#C*E`q_ zBMKCu6T!74PP_#{BUz#3q%?wa3LRk4*p@Lm@6`6^Yt1vqtden-PsdThW9*`4TrnjR zV8fs54j@!XT7k6y_!|<3>Rs2t2ozDf_`?;WWrQv9CXkAes_+3skuX8Gn zt{lFBVoA`57_QXfk{Fi;{YxGpI?T#LoRhg)ilo?gUlPp@HKhptXVt4i@C>nzO@zt)kP}7H2mFQmv4{G&mgU8}4I2!`Bv?w2xvx^xQONsO* ze-f(iIG;b-q_^c~{lRZ7aZWmL{;oH=mg{5;a2^4bk) zZgFX@v^QLIC!@WxEwl=;PO?h6x=&~vv^%Fq#lJ_!sKN3SM&7?!734BeujIG9JNB9F zrp5iO_v>|iV=^VXjgFdO9&B|T??dubF`eGTKaeDE@kEs!{ki(9rMGa&9ZFaP6O*1? zyQYeo#t^gRD<8dIykJqDMOFEs*+1rpor_DBzrYqD#~xFn>HfJYGoMmmQqbOb;?We} zS(O(eFr+r&W3-kZCVAq!WMZwPt~U0Pk~NCZQSUEyV%kCGM6=LrYde8Q&u~+0`DHwb z)_7Sft-0H0@YFcqepqXfS8DHq28U}tHS5D9_lKT6N?OR2)_Y`6dPXB_?if6ic`+pqf{kLm301{(wax~dhh zIRduDpg4sZw+%QAU8cNkIPPux{`p>1$z1?e!?8he5@139KIK2n`yUS}(2n}2C7`yR zAAZ|_+ZVUjeOny=@AnB*#sAgD|NW4dQYX}EDnK zU^`M@dk`KQJG4Dp<0s8{D8|pP38R{=HcbaD!t{j$<)5ytUNvkgA>Z1SP8uC!bx|xZE zgyc+9C*^OlK`zsbUafM@roOiHfcQaK-+^6mg?PaO0`S@zlIC?wE%|Yms|_iqWgHDtIBn zPG^VRWxffK=iJJ2_eOY7z=%nBFnw2OQgbbA)ey_?S>h#}QNwO#C@<5`18MC!Gg9)I z(+)w27e0XdV_6Fqfx8)c*@}zWVBVpu($JIpDv>3=y9OtTJGc&-XvLSq;*%dy{7anH zSNp2w;<0VdgAWr}y>Bw405%6K7==J|TW8FaMY5xUaTW(TOe)3iZeKb`doD=Kz|g_q2;Ssc)e>BOaq9^coLA zeYb-rWAc!3&f7P(!m5Acpll;p?T0^}xNqI73Iu`xKNaWc7K>x!UjTx~L1c^9FrUi< zUf+9X0ZtOO4Wc*O&zkK)D+EHL+4JztC2gY0)3ZUpkbJb^QEvv?7dQKH8<4;=-0}P1 z8zvOKJzFI+DA!*5Q6h5S0xmm~QKn zb!Bz+de@PXA&1IG)tKICQrR!g4xD<*ub1V#_r~q7Lfi0$V#>H9Uww8;cCcFy`eNhhY4_yGg~pq>fEu~w;_W-orWUi$|VwG`w65RUfY+3g#1ARhwo zw1LAnP#*?b^uO0G+P!#>Od7Yw8b?W#9YL1QN`a&B29Nsq;NSq1WwtJY8|zd6T5eJ! zhn)g5#-e!dl$<82feraIqASc=`iRHyrpV@mET{z8Jjo;@?lxx%>QxC1OU^(5)L+u` zpS1u)tIrLU0?7l^h|J=L$JTc0p30M8WB2~^U#E?GmWyVKKwge-5T8ZrBltRo^6*ZG zO`EvOJl=KGzlt`4^YanLdpkQnwzjT!&TJCs?BnwEL($aKcv(D8eo&>-f2CP%Y`z`FL0ouS)=7o@A|xxw&xOEU<8zPd45EPwOtLX7I&X-cV9XV2@MEd!D2r4v?&8F z6ME*fTpT?+E81%5JooJXuEHwxI7dz2dkysiOZsgmyBmCfejI|os$Y?>P@pyvE_O=TZx z*3TyR9Xmn%j-~tM2achZZU;ec-VgWd1TjeYkAtuN5uMF}i|A_J`hY7<==;w!P=aC? zEbMXCs0&{uZ3}j=VrB!AN9|u`7wfJUCtPXJdFBlb;dquW-<83R8DJp{zRovTE)^l2 zVzH^aa$+*bAmjHy7*3@%O@H&ab@nEiD;k=$wmdQF&EM4!Y6hk!Iv9gz%F5vNpL@hM z;eFBt3F%pd*OlR-B5`RkmKK+*J84;wP zMD~W2l(CiYXnwKy>6dh_wh!`i-Z8xLS!>08Tt33B!&7|~kMhu>JCm`fud1CEz7v^b zO7)kF+_`X!I{G`k>*Fl%o-(uE)CjNDjo109mxPCfM^N#k2(fDRCGwtLHs5z*L@?Jq zSkqy`knJEn@J)iW$)nvwx(CX(Cls+J16=%lz4+Vlh4Desi&*G+3?oh&z>bg|C`^1; zH#bDc0f2ezhSJ;?ni5x2Nm-QvMDPeo^4U_`C?e1M?7$8M&FL7!j1>X?UPl|_thaVr z>_*0*KE;XCMM==Ow+zUk?yfGJ?52Q|-;-rph+H(aH-My5R?hV2$v0u9@0Q2JUy%2} zVtCQ#W2E@OdHNRPtW!FG_rGEQ9Giehrj-?d?=0H_nZX&y*ligG1_t{2`t)ntGLwE>0qlK zl+=Ma8F|Hk_v&X-L&I6nMkX2m6lhegjS=dD`;u&}SPT`Psu4kk;c_L>UE#1*T%6Vb zUtcp|{MS$l2;Ez2%81XP%(W(|907Ih2sTqpQ~}PH(YYi{OnJGvk8Nxoi1vT<*`wk& z+gM!{wd#TZa1o??5d}s@09B62AR1?a!C;Dtioo13`q!VMqeUR5eJ%COr15d99sU>N zxD6&OW+PCk1?}?(P(zf34k(xcaHTcqD$6ki;JOygUhM4bC4i0szMbqig>oKC>;!~_ zm@Y~$9NdGzqX7&lH{Y;7EhFRay}i7Y6w#ndUo9;y6tpVxC+evE=8Bjg2IS}@t(fWs z9UUEH?5ZTY9spPdE|DN}w%M6`2T_hI@`mn0ng)Geo8V8DlOK=VG}O zIg%+-_H=Us0Nm{KEG#S-ES{yM^9DG7^ah)F-nLNSS6 z&E&txk?{PnIavlANZDI{0GAlR^M={Ocg}+;VDz52z}nOE;@HiarvC9Ftyu%LfCY)U z4(PrB(o)!YdG|U5s)F8$iI2ZUCOQCEFu-49eG$npK`v=z2%>}UXu&pDlqm&63s9d^ zR|K@^=;+ti*P5D|Kl|ew8yY}r%=`Bndl(k%0b}}O;1UX2%P!U5-|qk{T7huE4dBr* z5JxEeU9GN8mR?v{S!p}q=z3IHwqFCX6zRNq!K)o*k>Ju96CE95|E!A=s9}7i4YD(V zjNna;j+a-R5p3qW2L%xk(HoHtQhuXaC}93DOy`c!$9ep@jkvkF!3vsolVK3O6C)`p z34#%#&BbN{eb{N;^x{VLGnFXoE4q8Hpi$mq?KD&>l!0C!1OmPbiiu4pnN(Ll=@jbyb97Nz$O za6G!%ZG%+|z}V<>NY|cZA6Ar?NAryWu<^~s(oOC5okH%veO+YHa0;c0B7-r<=|UxZ zYv165H$?_O=-@h2mDzBA@Z$8;6}Yd0F2f-8wBs#tR4MW`5>S$xqjERHb!6%U+PuK- z2StMMeFo52DJ8<*Tvpf`S)xEt#1h7kxx$2lS|y&rr3#a)t3qgKfQ6`C^UqQdFk6q>5xc(-8=dfI;U`{r1iVd*N#>n(Pqp=bdkKCsxP=oUII?e`RGE zRfDmgfhBClaCCHZ!e6l3-9ZRLaR?cqRaSZpVK!^0>Xt&3o%pyWz zj>jZ(YAHTLaqNQSdADl$9Uw^H(Jvp%5_3u8Gqrbd+1}eD<|!%^^}xD0{YgBx3L24b zu#BtuT1repg2wsRm)G|}kR()UeSVQPK!8}j%dMXD4vcpY&WHix_=6iL3ZNb}7OgD) z_@A!;`i-;#Xy{9mkcAE>aA)Kk^}uJ#!$Zn?!JiWWb}1z*r#_1fVwVwkkSdI0FY}Io zsDugGCSH6{nnfqDX7|Mn(vGK!&(ERiWpch8q&kYxq|F>aL`h zEkLmgN^q_3m8ho9e{i8rd^Ps>U`;I?aUczN@cJs<5>=#i@M2@&nV0Vr`CGK(@y<|e z06Uui46yc12KQ@_ZQ=7XvoXj8eFB)_*W^_-u7tx$keD?Ef-AhrdPT?Waj;D$ET5d< z`gLJ}-Wfl!LAlf411s~$-rgQ+`Z8?|XU<^xQ&?mqn1p~bWnhMy*WhJl6^)sW9pWH3 zCd3$>Sx{TIJS`#8BMPX2P-r1`Y^HbQNOCs7o#}p$p0xTfIFWrIU0Zt{J4>4bm^H6- zWB(yval+2x{isC($INKTK0A z4C1$hO&@`8E&!olZ*q+iF0+w1rI|(=@73o3{=>P zOqiVud+9LM-@taawM{!d>pGa?JX4rsR8;|dL|yK_F*v`ClN0VyEf^Hba*Ek#r|@N_ zXB%T79vHu_*v<|+!fvs814?t_!>h_4oUG-kT~kx@m&pCy_5ol z8I@>sY;36V13ym9X)8nsS^gj<1oC<2LCCN#8c&j~yi&LXk?kGqV$ie3c5oD2&NTiq zxVyWLv7QM^=0LRR9V=7WL-sM=uu;X@A?k)*B>>C{n!t%u$Y?@Q^=l-%yE|}gFtwnd z0Kk+M^^T;zT#^l0p}1JThrs~o>gwV#d`o~Hz=e)cU+V>Me!wVO<=)(WvpH})J^?&w zXJD{2i2PymI68ENqk_p~ipflu7TPR=TA(25v;Kv_m$8Fb+Vcmb{;jb2cRK`f&Y~^Q zIE{@rhHxF5hyW8`hl#Hx3@QUGkx}ADayOUcv-{o93a4ilW#C4&1tD0l9vYtt->MuoDW1{ zDzrpEF4PI@)O3Kv6@ukD#gZEPM#Y`|D0yiat=n$vPJmQE@A{i;T zXy)-+1rzNCF-vnHT2^wWPiTI07h9A^h@oOoLnmt%=8tU>W!q?cpuv*)bL9zDW;3J+ zMk-7pGWED8xgDojR9k$Q{jiGhtPisov|*$9e&MSj7$mS~7T0K|Xc+fSPp4r>i%tLJ_p$m^7S0lgLGIL#U+82%n%ipKi>K=mjO4Ry z%Ymx!TRG`p3}=dfd73SXDj3+|zL^Gkua_@h;!*Rfldz?OI#9l@r_(Y|1NwgF)dhwh zGv|NS0#1@KFor8ZhC~V(kO9>%4vj3^ycmpe3KHs2?>P|Q6H#dQMWKEXB`8WzPaz{y zB&i+;mg@jx-3*Eu03*J?x0h1D0$j##s|uufTi{*J_mkoPY@T{9fK9K3H9!obgyA41 zrKHHB!Rs7fxX?%?16c1G%Squ!z&;$6hDoQ0I|uK;-?kZEaXDoOXI}I=G z!w0b}!lMLP{zwif) zZaDrjon(|UvI5x(;yI8+L&o`l(g4W)KpMaeyXQET4@5O^av+mvhewl1D9RMU@y?dw)ddKZs#gMHnTTgZdzX|Z{1!acrU64mqAX8HmNft45k2WVcV+w7@J>%-> zP{`f6ccD;~HmeG?jGUZHpf*EoB;4v|t}l&)zQjJ|W_tlL_^yEg-2U(Kq8OmTU}XZ5 zIo2p5fQaKYtqfB%5Fjl|ii;C2L$0BP3ShMg=rcw}M#wlbiS-gthX6g}$nbE67}RLY zOzi+0{3OEdLEpcB2e+6b>M?qSNxkDZ5FvJkl1IZuHP$D)Fw~5>D1JaB!Bqp#t8&iH z&Q74Rf#|46OSb$B2vql1MMQdz6zCwjSf+2-{$!OiIgzIdvEKg^@V~s&@Sv`}-j3uN)#) zqMlXf?h>12?*zv)78jB92A2TIM_iVL*Rc))v{SCh6izubiCOP(QxhXU)ArkqXipgY zQMX*9{pg4;M0((sa|#in;mWOdhjj5B@B>%9ez`LNDIORlqg_(O6P^c|j>_p=P7iz{ z=!JM5h`5xPI;dzX|H`Yhb@>$6LQw(Vs9Ehe5U3M=L8Tx(c)|YM%hVwO@s6$fU?NDd zHlRRg>FZ>@@{zy`%L?PbbI7)3gKELh$<{mx~XvG&L8y6BvlV8 zgTew;VfsB^-j!31zmOi3Ap3E8=DG1k2Yqd8e#Xf~i-br)?S`5DfqCcrE)xY4E6?=j zSP%SByzu42wP`4h-?USFRxbk^BlCG!&V%aU&)=04JasmEw>`W+rIQ^==Pt#_wzG!S z(zR(H7%(VI$sar}qS1i8O?;2sJ-(r3QoES`d5XhaLhJwBH`gP`fyPRxP}EVXL$#c0 zt~w-n)dNw(fEypD&Sx+Q{T0eJ-f?*KGou!|ykWp!_mb%|S8gc6Wv1 z4TM)%w8T-&&>AV>|LwW&T`eQrIKHE;!)-hMu=`w;Ro#_scQb2G)>1h~1zx>2;ge;K zaik3(#*Zm|d^0pSp2Aglp*q*_ya<>wlI}iP+X_D?Hq?ZL^|2IX>i-pv&IlR1!{> zod**KsY5g~-x_P86j=ymwL-y33 zgEdR0@ba(Mq112P?k+eizIsmnK=F=wPT)$ z0>ksYu#FN44t-nmsON-4&F^SCx>2J_u?{t+?K`Xcm9>F~zditi$H41@@%j0_{<71k z_M7$96rui?F~#(fz~uUid3Kt>q9E8B(8|MTZGC zctsG~H^!dVUG4Uz_FzlliO)%jz~N4FGN&fv^{G(43TYmIT%I~Ei5c=0&k@HabF~#0 zSSEj%4P;~_{X5#wJ~^QqK{z*6`3=Ryyf^E17nY={(Mye!ob=<>)yF2iZ-`j?MQ+oU z&Jdd?g@vKan=`H5jlUV3m#i0}LQHqv%mvK8s@LPjKWu%`Csm{UgX~wIvqZo-N8l^E z`>8sW*u;C9*+OptM*ZIaV|7hR#1@nS59}@(yfu+{JUj*9?Ahu`$CW~3X67V(YD!AU zoxShjc#`g?4x?F*Ox@ge>_;VxZ| zkyUrO?`^)%;}De56ST8?>zg`Yo5$;nY8n0c#Xix@Qq%K%*NOUr`54IoqDB_t901ma`xgF{lA00(x@P& zs(!L89xT+YR-%u;IrpC83@ zd<xR(B}`_EJf5>VCAbgH^mRI7=M*Pbh;544#_Nczx-7GMt zN{Cb(*wbadHh+u-D{{>0$}KW`;7L%aD03gjhICiE%-%2|l-wb$q?98v;<@az$45!i zi$P(K^6ziVHkC&$&HWB8Szwme?)~dE0#P$jgqo{|+#eOITqv=bI1Qi2zKn}wV8EC0 z^;id%NuWNsJMZ1*dAPOG9iRYAq=4BSbFTStnZ&AoVv3f@hb^EHZnxbua}>S&%k9y2 zBT810ICXtAZ}?wc!BEq! zJ;R9+^OsaqvmoS{kc1@Q5k_&Z7Wwhs$vW#J`u1e4{q@l72_E5v{#@%6lN;wc4cuM7 z(MM5n>fNN8H$w&iquut>!{3q;aWk5e^1j+HDBA8^SymZkRv;$IPk~sUqa8bZoa(EZh7j0tC7I2nqu)Tko+_> zVX7!#33!)1s-zBKOy$;N%;H%8lHFydciQq_w!iGBZ%S0tUW)`&By{F5iFGxj;3}2m+#yXAaxF~W*zlj+> z8TV41f@9y;FVDqN zLh_9ITLH>gl9i!RdN%AcF1^KH(~C8D4*6(5d%rX+hjM4hL?m=X5k2@y*Kp@BhA02z z=gzL!7$?5M0fK0k>zUNN=^W1YrE6sZw5Si%d@h?m+!W_xiofD7()R=pG_N%F!->iD z&PN^{YmVfTT9{w28h7pZG)RRK_|Xs#Aq$`pz5P#m#iq6@CY}_QHH+;n#zDJuIvNft zt*1XVwsgx;QjjS9DhMxO6z!>n`@U_8XffaR*F32A5%%}nw3#b2>S9LahPQq?t$;tO z#ClDSdx3s|w2{Lo`D)G>p;P-xU0PzNNYFfz^sMuW(n!jXu_h^!cxE zLs1*c5+T8~qBUGg85@|Qns-8J#GAKmwd-2gFJFJVd$4b(KiAJyfV;HNH`UkMHEbZ~ z9H{Q02r^tc(sxw7EUC2}{~7gzWA60vciE^%+zS<0_7Vb+v+Ce~?STfz6Ph zC|7kxh>*PKLAp578O;ea6HqR>$f}FGe*$P0^NJ>LcAoA8=xpk(rv9nJS-h{@yr^li~R<&f!a` z;SVLg@U|DyT2Qy4RIx7y#f0zc>klK1gy|tlI(3&x-f2vSh#JFDSOAIZ^e#Lg3Kh;kAnRLL6T?Z>D{%V8>x`sJd$jz7lcxh z)HPib3L^=Z!KjjSw(!LF7wx_M#hksoRIskHD2XR~5|T;@KxU>^%Vv%F?V17>ZE-~g zi^k1ORKU`bkDU}b3NM0)zV;*BQA)Y4d|{^CD8ci<%$6sa+31ty^U_mA)s*APO8m*8 zS4rge51xGTR-RpL6ceL1`iehK;Gy&_rV_w@;Abg;&lC#ke@i<4?|-{*(9zItZdRd{ hq~KRGv2MHe9W>zkLNp4&1f3lX4WXn7f2)W@{RbkYC7%EQ literal 29208 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 K Date: Sun, 8 Feb 2026 22:50:09 +0100 Subject: [PATCH 10/12] Start conditionnel MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Permet de ne pas regénérer tous les résumés, et de gagner du temps et des tokens --- AgentReact/agent.py | 5 ++++- AgentReact/utils/nodes.py | 21 ++++++++++++++++++++- imgs/agent.png | Bin 29550 -> 36287 bytes roadmap.md | 4 ++-- 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/AgentReact/agent.py b/AgentReact/agent.py index b9a87b2..86b28ff 100644 --- a/AgentReact/agent.py +++ b/AgentReact/agent.py @@ -24,7 +24,10 @@ def getGraph()->CompiledStateGraph: workflow.add_node("weekly_report_tools", weekly_report_tools) # Arrêtes - workflow.set_entry_point("inject_preparation_prompt") + workflow.set_conditional_entry_point(is_resumes_reports_already_initialised, { + "résumés non disponibles": "inject_preparation_prompt", + "résumés déjà générés": "user_prompt" + }) workflow.add_edge("inject_preparation_prompt", "preparation_docs") workflow.add_conditional_edges("preparation_docs", should_continue, { "tools":"weekly_report_tools", diff --git a/AgentReact/utils/nodes.py b/AgentReact/utils/nodes.py index 6fd3020..0d1bb23 100644 --- a/AgentReact/utils/nodes.py +++ b/AgentReact/utils/nodes.py @@ -5,6 +5,9 @@ from langchain.chat_models import init_chat_model from langgraph.graph import START, END from langchain.messages import HumanMessage, AIMessage, SystemMessage from langgraph.types import interrupt +import os +import sys +from pathlib import Path from .tools import getTools, getWeeklyReportTools from .state import CustomState @@ -122,4 +125,20 @@ class BasicToolNode: # De mon ancien projet, https://github.com/LJ5O/Assistant/b tool_call_id=tool_call["id"], ) ) - return {"messages": outputs} \ No newline at end of file + return {"messages": outputs} + +# UTILS + +def is_resumes_reports_already_initialised(state: CustomState)->str: + """Permet de savoirr si les résumés de comptes-rendu ont déjà été générés. + S'ils le sont, inutile de recréer ce dossier. + + Returns: + str: Faut-il générer les résumés ? + """ + # Récupérer le chemin vers le point d'entrée + base_dir: Path = Path(sys.argv[0]).resolve().parent + reports_dir = base_dir / "rapports_resumes" # Chemin du dossier des rapports + if os.path.isdir(reports_dir): + return "résumés déjà générés" + else: return "résumés non disponibles" \ No newline at end of file diff --git a/imgs/agent.png b/imgs/agent.png index b255b9dd570757f0d20b44340b137daa3f988fee..d4c44c0168f9f54d4ad028481bd243af7a7d2fa0 100644 GIT binary patch literal 36287 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 diff --git a/roadmap.md b/roadmap.md index 9911193..48fefee 100644 --- a/roadmap.md +++ b/roadmap.md @@ -16,13 +16,13 @@ - [X] Préparation des nœuds - [X] Branchement des nœuds entre-eux, **MVP** - [X] Human in the loop -- [ ] Amélioration du workflow +- [X] Amélioration du workflow +- [ ] Gestion de la taille du contexte - Résumé de l'historique des messages ## Amélioration de l'agent - [ ] Cross-encoding sur la sortie du **RAG** - [ ] Sauvegarde de l'état de l'agent - [ ] Système de redémarrage après un arrêt -- [ ] Gestion de la taille du contexte - Résumé de l'historique des messages - [ ] Détection de *prompt injection* - [ ] Génération d'un PDF en sortie du système -- 2.49.1 From 8655359addb5b0277805d3c5c50dba2d3b0731bc Mon Sep 17 00:00:00 2001 From: LJ5O <75009579+LJ5O@users.noreply.github.com> Date: Mon, 9 Feb 2026 00:11:52 +0100 Subject: [PATCH 11/12] =?UTF-8?q?Architecture=20de=20la=20r=C3=A9duction?= =?UTF-8?q?=20contexte?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Architecture uniquement, pas implémenté --- AgentReact/agent.py | 15 +++++++++---- AgentReact/utils/nodes.py | 45 +++++++++++++++++++++++--------------- imgs/agent.png | Bin 36287 -> 51189 bytes roadmap.md | 1 + 4 files changed, 39 insertions(+), 22 deletions(-) diff --git a/AgentReact/agent.py b/AgentReact/agent.py index 86b28ff..c6479e4 100644 --- a/AgentReact/agent.py +++ b/AgentReact/agent.py @@ -22,21 +22,28 @@ def getGraph()->CompiledStateGraph: 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 déjà générés": "user_prompt" + "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":"user_prompt" + "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_edge("user_prompt", "LLM_central") workflow.add_edge("weekly_report_tools", "preparation_docs") - workflow.add_edge("tool_node", "LLM_central") + 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":END diff --git a/AgentReact/utils/nodes.py b/AgentReact/utils/nodes.py index 0d1bb23..76c50cd 100644 --- a/AgentReact/utils/nodes.py +++ b/AgentReact/utils/nodes.py @@ -3,11 +3,12 @@ from langgraph.graph import MessagesState from langgraph.prebuilt import ToolNode from langchain.chat_models import init_chat_model from langgraph.graph import START, END -from langchain.messages import HumanMessage, AIMessage, SystemMessage +from langchain.messages import HumanMessage, AIMessage, SystemMessage, ToolMessage from langgraph.types import interrupt import os import sys from pathlib import Path +import json from .tools import getTools, getWeeklyReportTools from .state import CustomState @@ -66,6 +67,30 @@ def LLM_central(state: MessagesState): # Appel du LLM return {"messages": [model.invoke(state["messages"])]} +def context_shortener(state: CustomState): + """ Noeud visant à réduire la taille du contexte pour éviter une explosion de la taille de la mémoire court-terme/contexte """ + raise NotImplementedError('TODO, faut que je le fasse') + +# fonction de routage +def should_shorten(state: CustomState)->str: + """ + Fonction de routage, permet de savoir s'il est temps de résumer la contexte de la conversation + + Args: + state (CustomState): Le State actuel + + Returns: + str: Faut-il réduire le contexte ? + """ + TAILLE_CONTEXTE_MAX = 20000 #charactères + count = 0 + for msg in state['messages']: count += len(msg.content) # Compter le nombre total de caractères dans le contexte + + if count < TAILLE_CONTEXTE_MAX: + # OK + return 'sous la limite' + return 'réduire contexte' + # fonction de routage : Après reponse_question, si le LLM veut appeler un outil, on va au tool_node def should_continue(state: MessagesState): """ @@ -82,21 +107,6 @@ def should_continue(state: MessagesState): return "tools" return "no_tools" -def task_ended(state: MessagesState): - """ - Vérifier si l'agent a terminé son cycle, ou s'il faut le relancer - """ - if isinstance(state, list): - ai_message = state[-1] - elif messages := state.get("messages", []): - ai_message = messages[-1] - else: - raise ValueError(f"No messages found in input state to tool_edge: {state}") - - if "terminé" in ai_message.content.lower(): - return END - return "continue" - weekly_report_tools = ToolNode(tools=getWeeklyReportTools()) tool_node = ToolNode(tools=getTools()) @@ -127,8 +137,7 @@ class BasicToolNode: # De mon ancien projet, https://github.com/LJ5O/Assistant/b ) return {"messages": outputs} -# UTILS - +# fonction de routage def is_resumes_reports_already_initialised(state: CustomState)->str: """Permet de savoirr si les résumés de comptes-rendu ont déjà été générés. S'ils le sont, inutile de recréer ce dossier. diff --git a/imgs/agent.png b/imgs/agent.png index d4c44c0168f9f54d4ad028481bd243af7a7d2fa0..804d7f1be29d18a88b9f6749c2e61b554de7d7a6 100644 GIT binary patch literal 51189 zcmcG$Wl&vP6D^vA5Zv817Tkh61oz-U13^O2kl;>mcZc9E!6CT2ySuvt_czIRzbmim z-GA@YIaQnuYwxw@oZUTojL|zl;e!McJU;x37cY>cBt?~8ym&?Z;sul>>?`n!{(%?Y zix;Rbq(p^O9DW@vLc3sW6TqBsN+rV|9UXCWeYdwKW)$IkgXp&!yz0K-hhk6Aj(2pl zgq>&h_lW|A)M6|=HYeo1X?^_D5u<&a%wK^kf#JnYp=>2MGO`TsH4=Y+e{@tR6f`sn z>NgNFGHC@wK2g!=G+YONe`+D-6I3)sPyH3r3{ks%*_KQ#4-ew@cHtN_(me#e4fyn6 zOcoynG1IMZgcxaxxc)3ZE12|PRAEX(mJ5*>Y5p`NH~dUUOPZH7R(b;Amn_si`S!Z? zX8JQ$pD0=u*&J7Dd(4PcT0Rk{yvTg*1q|+iWN*Pi!c$MAv_+LHxIs8UM?-6VFa#%1ad+h zl5zoziuA?XgnMOrMXo;b_H5&`F9i#VM0HuKOdc?!q7;?;k<`BoBlL9V#CEav?@Z-is9jd6~r^pR4Goa=oRKF3_}b(Wm{TAMBxrc>g=ydu1V{%hL0{q9#nMl zvDy+FYjB(%e-0;Yx56hhjG##MPZ(X_z=P$KR*-RX_WmF~J4XW_dxlxPIT3m_{o$sr zhTDcPMoeJ zGMALC;rE9M6E<2WR~qSb&J$ym^iMpZed>Q{F*VcSA@a0=`Xc9fD&?gzNBGF)=|A7kUwQ7hPg!MmhfADHy=7C7B~zE zqt!P|M4zy}?7zja%hwyWNhj?auXlmo{k%d-#_DuRlIJ#k-WD2@_v>IU0L9bh-3e+$ zt-0=XAA5jE0b(flO+kV-UOrESUvdi5^G9jx@FDi8&B?q?gF%5z6spO0EOmttNQ6Nc z2FO2g{L$JLfWHm)@be#7Tder5nzdK&1m~pLI+(;M_N(J2Am=(=sBh(`q)_VV(S)cW zHcnWRy&e1XMbzWtBLWU1-;Xu#k`l|u`x~?A;>A2g@?ec}L%5t+dJU_U77vU0>W8ak z_p9S&_uaAVFk(S$di7H9hwN6ftFm{J?K90h|!ftnmf5x(942<~rY<5sHMyoC6m9ivPck&o{Nu{eSmz#`7 zGoaxycP8?c!A)mz54Lv7on9NgfC}?|UK6sn?^skRar7WNX*N3}>E^TLxJT0^x>cr= zk(6@y77!eqxQqSi`no#lsFC&A2FJ6_{A`-$acdyKn3ao{H^`gpqD-<40?wCDW+oZ^jJ8Mj_;`g(9Ah%CeUsH@-)N>p z9OI|G)z#7BPrQqc$PhmNNR&Q~p6Y-+*JN)TNRG|-&j&aE)}(Dz%>bcf%U66_x4PgfqV*IZwwud?;rD7Px^&?2p z$78!!q+a%lg81Rf+Aekb`R@4kQlm3jlh5nCXlca)BhRId*2q)86%blmNKLv;LVILb z{64PpRU4CM&O&zAL88ohVc_gg*iyz7QejkNS(2tK!S(5c3yR)C%QKRYS(^xutpD=p zVo~c3BPM1yjc%3F(a|9m#BVAy$`lU?*TUHHpwMk{(de*>>I%kF&R3%FiaOGPRS+*Q zt&}IitsM7M&+E0rLn3T!O8r`? z-bjidld%jv6xL0v!bOVTX~X|=kiu^MIE6^{tKzmt!r2Yis|MZS{8^A_Lcq<#65%`c z@z%!*VA$V8cYO)f{0j4Xl{NQNMNOsPYGV#9!}-Wb&Mj7TQ64(^GUv09`V~G z$g*Rb4pI7zt85{Pi6Sf_lKUa~_GqylL?-zRp`hEnAF*3cG)20ML}@}v7VGbO^Beyn$G4JJXodWB3Zpj~IPYqLAnc^>^x zxGYeMr%_bCC;FwAT&o(;SN4}Lp zCgf58o2!zqlu+Y6{}n3qo8x}WSlJ*`g7@I58>H5G_G~4s2f4kx{*(in*#J~uTpu4F zXc!o0N5^!d3UDh7TGfU<;j8yIXE$ft5))`Ys@%G)m(|iCy@Wy0@|rW0M`qtmbB~js z?meN%$G5**OwcuwWPzdm zwN8UGB#^SFSL|pjU2<(T?Rzv$jH2e-1nnH9f(Tc+#H@L5f^<<-et4wJrsRmu{Dl(6eo|%Cl5VxSWK`@C5y{Uj*>#DTF)jn z8czo2mloAZMd|$=iw-=;D0V3KuU{L*kWdpAUYx>sG7X*-QbGg}ymosa34yHm-p8mr zlqd+B0UxBc7+O`3AwbF|Jx~RiUj7#sS~C&vSa*wvp~SbPh8u7)`eNva1>IbResP0b zR;-+hjBd89R9Z$MBqa2lN8*@LNvr{mD*u7QsQunxE=wwkfb*Md0!wz8xTxssuzjT4 z>r(><2Zz3B8t4S1vq({nosHh8o)o=j%{lUhhfNzk%ls;Jm9^LXUf_K2Y>5#28M=) zdJgP@yc`h`vFv)4oaWF8*6l}@@(`nL6QBK&whBIor@zO|PZ@Mx?f z%v*lG1mzT$^V>ocmAt2?r^CxkvD3>-ol4`;lhtjUb+f>OR;veYJTTo)D9q`<3D#@mp^VcpkI^ zq?Ib@E?_)DBJ=~S{kbhHN4@>A_+=5uB=dhPo82Cqz@}Mk^pN^fUxFioD1wjFT`iqm zuJz{|NSr)iMZx2!t5f!Z2cT0c9++3_MuI{a#Q_-~qz}iZ$A_K>a&SbPuTNHKRSUqu zl|U7{SZ((+8cZbOv5{0bU_J?N6iGD#g#-Yw6i&;OKYy-@Kh-xqJ%TsiDf}Lfj*8l{ zOdA58rJNTmB)pIQ?fEX%hhH=0Ul5vJfg52^%y@0afvF{*D$x0rM#LAu}1aOmQS)Vq!!bS`}k}0*u+gR%uomx8{lb2 z0+3Os!2y(H5aYu6Ti}?1zmiSit0f5(yw*HtPJe<##j**Ta^GQujO-jF1(a)UubM6d!`}vX2?-qE- zm&j6L#0G-kAxW7Ok40d91IL!WyGAmTChw(ZI2lPLADZW-ClktJ==a@01)Lxu-S!p( zMlRf^i)meeqW1Uq>CmM!irA{RhLYzqB~VOi#DcK*r+$wo2Y$xD#C*$ELhzgO%o#D^Gnq7iMeE!i>K^&TDbeseGBc0}I7IIxqXZsh{cDQ=l9o$kTki_7 zwz5Kpqfq>K%aF)nkq7|i>!i}scO6)mCZ1ki*{ma|p8=qyT_Zr2EMpWhgn)oI9?uDR zE?fiIpy0x}hn0wGm@JUYc>DU2osbN?e*HR4p4|2eA3whj_i1hr&C7v!=JmVdW+tub zA`%f?hbAl~POc9Uf(9T~n;$L-kn;efuLaA_Yk%b6=omwzob##P?%TI-@fd^qpc5EM z6$FR*4jcxxd?n}`!e9W5Fds9L$QVvmTD`6(zAe^a4JUH_AWJl$H=HWcFit!zLL(PH zn5#nICtw?yEKuE_t16t(>8@0ITLe(P@0TWrQ!;=RDWszTa`$@7e=gnT%T0}`sl>6t zkz7Xm0Fne^(!7HUC;{hByVeSNJ{A0s$Zj@OqD#CEYD%!<%gSj^o!l>qd6-)hcJc%s?~S%8PE&ehnVmJ1X~Vb9Xy!< zfq=_(IO8XtfnXm=8Mn&=Jaqf3qs8`&QVWOY9NX$((yWJKAfJH{!)d8=Kz$#x#MBTD za*&M7`x7mYKbxN(gOJ|K?k&_-JYEuWeg8b1!tc;Hkk18zEo$603F{Mgp-LTDidgYI_a}K@t!Z9-l z8f#c`4n=X_XK#b@0cvM^wcaOx3Uz!+Qa2Pru6MS36EklczPq%S!RHHj$9a7M3CqpIgAHkC3+f;$jnT4>7m_g)#l>&kw;9+3%2%IC-#lx>x)m5(~z=BUtYXLqwd5 zjzG2+9_PZ>puwL4i({|_YIvpxqiR8PD^@mW@Ip%J>v^l;2?D-(k1Qa(7J^0SC?lwT z$%;v>@SY%Q1>osCh4fdR3hBZ=BSaA?KJizl>k_XK5uKf#Qw3b>KpOF{icbd(KP=R( z8E1L2x@NmClH$w1CnxVy-;_Lnb_+KQ_ooszkBB-w`aZ1i&O#b5H9tZ-u9wsdE3BHo zs*-GAj(VAX44qonP?1^*r1~V){V{+8N|+>+>U+&k@hs3o&%6-T=-{JAbsxPGlI=_3 z=Y1teRymPC9;w~zMg$}4dH(LC1B&fx&dc6LI*UWo$sdz&PGI+*nr&7xEnV=()&QP2 zMrB3(?W7MmMA8-E{d(aYM!&IVcGqH$G}t%5A5aihkn4KO;>Ti-FTS&NhkYT}Fd>`C z>KEtxGnY3B^V8e8{>_ms{STF$b8<0Ou46>pXvkIaLTw7}hh2Y^>n&i<985q3!%DOs zF10&s{9elAO?+6rDi^`=A}h!wTyI>LNw~-k*8|3tcQIc&8~v`@us3p!*`FUbz%|I0 zR6OI(Clp_wl_$twM=J6ynrP~3xL6+rY+xXJibI++Y}nKxKtW2U;xeY85toaN&YYoB z5s|_OlW9U;ARW0~K=en8yEq+wG)2UaIr?1UxFT2Xs^d6Of%Y_$hMyq-&?uGlA*30S z_D)mF5JVYfr7JPgK*`~;P-cfami77kdOv1*XfbnwwWuTEQp3aQ1P2_bMFo$L=<1IM zH*ADtMI$3bVWt=yP&A_Fej}%CD&8U!lLdf`@V6lmB$Y&glIN32;p2AV7!|M>OVHdA zCsFlb5kL-)fVtZ*Y5x9p33MjLGU3JA0VOdR55Iq(ZuDYAUqw)eP?;Reluu=~U4)Sx5ohnIN@Q6(T=(Bw{2sm(w*gHsV4jj5M1K(_Rf%tt? zo5bUB!Iikx8gn0dK|5e`W`s`8sT28aHb|Y0UlisQ4g14vuqBnIoym)cH+K?qFU$!z z-XKI%-rU^@I$z3i(iy`q#`&^+s$|4WbMr#Zw(BON@P8LZOEg819Po3+`|pxJ8u^Ig zxSTM$)XeT^cMHaFBAbaPV?W?+Ms+d+K!a)m^73d_hN@=0-C;)n#^`Hu2>{zk*&KIr zR%ob)Nfdnpp?#Tj8mN;oQJLsE-x^+ag%O7pppz}vT5o?y;S0zaKc~oS@W{La1mjua} zxe27R9W1^1r6$)PH*_9CNq4b+PB*M6x@0^D0ACv_K?xI2O1It~l6*ndC7GQJa2gU3 z4<-$l`8Kipy+`08phZr`ILv1Nv4mFWDr4ulNaQM8)ycXsj{1V*+rkVWVJc%_X`$XA zhL16kON45dett>IkK5(JUCzdCI??j|;r4?0>vEIpXlcf(2oEyF{!G#MjP%{rahTND z;v5@F9+D&@&w(gR01~0d2UG)pyXFsMk)_WU zK>}egs6GVm>R5={h5p+gv}f6%AY`qz=EpiGT5dskBSP5Y>$DR(+k6EaP>j3PGnA007^Xn?9jNK%O7$M1c<$U}ppb4ACq3{xwXC8iQ9!mL$aByh<>%yI-MqV>M(Kr7d_n+b+ zTcyaS{>-LQ$h<}a5JiI6nGe$*37^g3bj|0I+}oTWkRKd_nJTk560#7bZ0Te{cb#zL zO9$#BfMfSoR!E)@Jz!AGCJQM1cUZvsL4`;&H*U>?!B=hbKtS&l?Fzluav-#!MyYc9s|gR|vLrwgOiV z8M(?>scdnI9RAdR$CIJ-X0B`DchrbfY?=-D1eU-30&3Kvh8x>3EURhZVxoEH(~mdl zvKNjCRxsSYRVdj=;k~v-EnRsyH;!<7q@>EQliQPG&hR=bxkz23{@`-O=I@hnVZFIG zSi+)i3ER)`&_9@3v$8a(Vm_`ckzLwZN|ZubnZ}kwmiOcfvFX>?LQct?3PIaHy8cY^ zH}^WCi*VA5xu2^Fn1V)&dFH-P@c$gda?-`9^^(O)Z>!GFusDjtn@GxK;ZqzO6^mf= zQJ&@LeI1dkw{o+wTD2mwuaiD$WfSQG?P|&}QVD09L>J{dSucHI(ooks#kQ83D44Gi zXQt&Clk-Ith4u@rH^%063;D$9e!tjbUBn9nMb79tkC%t3N{?R*yp=9)(h22N+~zoT zYxj^wOi0-Y$bCAPSVcAJ*~I62+`c(xvR5SH6hG0&@L;>-j16Qc^kh_4D3Sa?)zzsV znT1oAt86*@Qjt0MdrXwJ@ibL8=#pmar?l@UM$QJdTKMDOJu?rgTgW?9`-wZJb#VS!4vR=90%@%N6rZOUE&gpu*(ECJgHy0 zo~s_}+-FHT4wu_TB9x0g9}zRYwRPUIue<%#?G>zh3TyP} zj;wqRvVM}F-9VD^Z$+m&1}md0!yL*P%5b$x;fK!=rfh-V5Ex7UGqPK-+8>1Uv+8Kn zfgdISXk~gRGd_;M|GXG0)LUba^c)^41WkvE-*DujxeV#q=P3W>g}me1lBQMx@R`ri z4n9++wc^$S9i#+6W6*ou#_ixbnm=a<&|Dv`w%^4R#x^)zM4rxyhuwTR3D@z=m@Bt+ zo!rZY-c>$zVwr!wfj1B-`cSqgO1Y_Y*XfD;as1TZ!afC)h0|z1CTmPC;!1R2lTNOx zL!xqmV|~xI>1LWfsp*Y_;xSSn$B*WGa5D22+}r8KtAB4pB|loLJX|vLu}WGFO|3+? z`SxVBu@uYxXkh|*yI&3U$y=`8`YOjC3NMJS8jc-e=aiwh62P7{=XNl)H!O$^7$x(A z8r?4}8dU{VRPsa^goM$8?&&FucQQzHN)|6)KC#B){m<7_Xjb+2Wr`cwOHa|xH;0wOtqa*0qU z$8X-uFM^N95kR)Uq*XD$E0=P=G$gsbaEfrXu^bR4Wb%LP4c zIGJOg)h6v)RZUF|BJRXPUrdlgp9fU^)1U8yAj_7~ArtdaSv(a?%3Ko9Y#u&f^Y>(k zNh1=zlVw!9Y9nCJ_uY9sUH6MA#ICKYi>1B!v@9S3=vfm(wS`9edWm5>gKpVQKp}sdy~QzlEIvR{zc`MPNa4FdS*o(LsGG=B#Hk3u;gaAXXnR^#`{%LIZBdu* z*%q0oKHHQ8%9CH!{x`n49gBI+%RT1LXE_gocDo_DpINh{)E|A33Q^&zA6y+a|1wM$ z>*|#Kb?>tG@e+2$tTGxLgIoW4wCr3Uf8086Z$8)fHL3MCd(++p!AGN^UswpOp>y?? z-7P|kg&*^6zdt4P#T3XVF)sXJ|n6%b7r+YHaypS1p& zt2V}HZZ5hfTFJD8^KwnMU({en4={FK(+iS`BPhobx{;MBH`#zCp8ECb#aF2qEEEH zaRAJmD7L_n6<&tsPpP+;w2+M%SA^K-@^<-denZ5cyj{gIQC z(`4pTRLbA0tMSm6gulsur5(mXGLnV$xBFCWFLzhloolT&RjDz@vNYNE*Hitoe{r7~ z`>|#Xdrtvfd3%h-di&NU&qo^--IZw0etbxyNS!9Q!Rb(`6JFIo6ZWs9aQ0lC?Zd1! z6`DeJ{_fb9k)ixgO(Qm#Lr?Zjf1^jQh!@26gPHxmlNqU#Ol4>tgAR%KuPu`fUwJfFTocjoP~vH0UPj1x?u!xBkQF9;Ws?;xF5Y@$zfanq zvOAreob+0HXEpGNv9WzE)a%Rz9(M)Q=GU2PP(^ce{jLD$+@GofP>f=fduRGdVlme& z4kZYCSSS}>isSr4xUpur%~DF^yx4$?Yvbhpm`2G&QKkwde{^U5*wNZr0qa2qL2;!P z!MtksIrcu|%YF33WXd(!E=ZWgziJug%Ztv2r&kOK(MEog2D!Ihb%E}6;d>PlI4>Eu^kDlv`qIwD;P|NDTBoruj?-_1XObZ=c z>jdg}W&739vd~|cNi?q{k2zmE0(fldNRZvZ<+vI>Kw3UgATWUly7{}m`SWs-rlBi3 zbz2l>e`0sNjoKXLuZP3U9P^)VpCodDZZNS%pgrYC3QPyRDGa$cA0Jj$`Au*3IBqns``kd@Dz*5-aTby33jlzcT0ax0lOzw52T^wDp?$$g*d{b^!* zS9aVR)gAsQ{0fQvjp_{~9rFX{` z1c2ndo1Do0k;j_MpDU2R+Rh-Pu-^Y(jY&J8-1Lj8rN_ zQ4NaA3P*+bHW`IDeX762+ADDA0^$8!)E*)Qjodcb^bP-fTd3i2_uz?9Yf#U3b9Lw7 z(n=Q=!(q^_w_E)C#E?jYj;>AOz6uh$sYrCIPZ|XgvrAi_Y7jn0f#(Xd{)_{$?r}t> zug$@N`Py~DXsn=B$MMzg3KnXV7w#++PQ4Mq5i`9&Jm zmBt#pY;0_w=FTy?2BU{|skL(W){c5cMZ_O3on!jgU(a%agR)A}zZ6!!h3uwKB>lH- zv$?8=7zy7Pvrv%)ZEK?R$7GJ2roHi#9A|n!oX=aHMFeM`n_V3eLZ*+wjmu7wvC+E* zt^)iTT(2QU^BH;ta_Fg}IJQP_9Th%H#`5`)utZ3o5zi8eKNAur9sB&{U{jFs7cd+P zs(RA93cCo?PLhF4s zcd#tNwQimqPEgLaM>o`xj-l$6c9;S!biJ#n zAtk`q>%GwU!Mvh|kbmuB*c z97}i+L8Q%DT8GpBWuv=G`~x7pJO1Z)Z6b1HEC|oRHks2}BO~lYAvFu5WZ49yVp8bqMZ{7bI;rEe$mz}+yq#Om2FSRK7 zoSsiRfuh8D@4Q$q0drEM1N6C|BqAaVy+si=OEp8Rv zSd-6|JC?s~l(VUi>sJr2|I#*HMiOBnKOVP377Rlv+a3*F%OF z?NO0K12^)Cl8}0+d+eUyudM4#Y>{{zHZTf^{<@7$wm`7(^v}?L-flpZ`1`}cz_`Ww zBd&n<%Ylcz^I7?gKjC@qo-k2>-HM3Fk>g#&%jZK7rbGh)QYR(`*uk>0GzVZ_{P*)S zN%YghkNWx47_6lK&)5I`O%#H^e%rro4um;4MeXzkJ=ilj0$hKAaR0g}YRI!L{rtK) zJvD^nXw42xJI20iN5lc+*UW76^)>?0{ewIkV9FL$OLT}L#2MqrHzeKDf#~GvFJSPmRqy-+q}>X` z-V9z!pr-?~C64Gh9>4)$GmlVhK|#*q-Ksxs>W^p6B*_^5FGZzV_z}1z!hL}&VWLQb zRY;WQnG}2jxurB2%MwzQNLTn=1GE@`BGE;&yueA}OXd+;Y(&pOWVM+q)258x8%Ove zoP%DsjVF$me)gWy+hZKb4E^2oXvLu#KfuU-Y-6{U z$z3(+?q$DwZ_ikpDH8hY8@#;`=GW(hxjO-8IGC0D*tE)0>kk_=h#aRmHatAS_Pbnu zT~$2wi*do;*`OYjeeDfO#&?&zR_Yf>5b9Z*Q$u~md2JYb2{twXx(2z ztzKJEadyA?G@jFU@YbJN;N8hv?@n?Eh0LyYt*R3hr_jgkfe)#7Y68{75uN<`!l<3- z|M*Y?yC7e|K2<)k-n|shqS?d%l(~?e)l~|A{cIrFfo>Hi%Zmype%fQwl8A64n1_SJ zmhz8M z&qoEg=qUBw{nh~8{7lqPD&p0bK`93RC#5^~VkHtpL|m}CWI{4Zp1B>UFh?44pY(a% zNcOdtuREdtL&wN=K>1q&J0Qb>lBg&s9sJdmED7{LbACfr1_)sEn7~hvz#str5CQ}F z!L8)EhX|o|Cc4_$2d_hznQFBuL6zh1JSOiH0|uSfVx1~Uj$#EWv`a>v;-&2(KhRo} zjCS=_n3)pl%F0jQnDtLxs20Xy!)2U>F&I5?YrF*&5WNe?J^*&bwoHHO>X!yy6dmAv zK_M2{3FUMAYq(fv3&ik3qVWtdgrX1lmseNBX{U#$G{{UZVY-?hZ_R*=0RCy_vF2-H z0y!7Q-EyAGq|exd%e~3-aNZWn?&qhJ*UyRr5HuJ7gGS2a&b%xQ{Dw8aa{$Z+6Cfq= zmYa;{0Gc}5m!FR>M?N(LcoDwz#|BuU{)sCEh8Z@Ku>s%-a{RlorS1k2VtP%D^>&UO zmu{2iHI;d)Y*&wgTXAu*u|Gx)iDgraudlBi^J&F@xd5^~QM$8A^I4@U(y3jdJz`S;eE)ATvRPqqzt>EQP9W4erc#ZY|n1cv3q>_pC^~IQ; z@AAV&ot$)k`%NkLi`{k08%WU4{Lk%{Ox&QL^<~HWpArOY`nejtpz<&MGX43}Y5GZ1 z$!L(!CuhJPz4d{|A`mcd@T-TROcrU2D_qg3G3o>V_TrOP4N#-|&u|9#Tuy#f?txuB5G?JV zzq8nzFbTq@VgBCo4w$UOY^Dv)|8EpbkC`2aU*w6qeiG zaS5@Y*aOrm-HY>GgRI4)rFuY;8xAHmDtAN15F#iCuMO5F3**Le`vEbpT4!^#xv}AG zc@g{D{cyQ?fA)+@gXJroMmc?#yDgMWnkp)$E~RYzPn0*ve>g4X&gU(gW0-UyvnfFC zUTkp02(b-7r9AwCT_so&H?14|aS%k{gtO@JRwQt8;TlYwZiPdf9CuTjYBjqzr-lw=i9#$fl` zPJok%c^F`gQ#1yZJO$wO8q1Y0X~uqA1N=Wh{6CA)Q)+^ zy;iT?7sy)KpveFZKL@O_uaGl?mKxJFiv6}`_8*HBY|m$OAGzJsHIe7m{!e~PgzxJSTQCY7TmsiFr^`<_ zBA!dYX|a4A;#vFS(bOdHCQi`uG5Bm-{_4qOXG5w2&GzvZ|K`AK)IYY%=7;G-p7Z&M zd#&~6t7Z}RsP!xsh` zT5oKBy5wEHLTd(KagF~&0+wdJbK9S~Fq>jDo2neVwXNTqwhU|xgockgWl6dAG5A^; z494cn-SQJ^La7um2u9tCi|crvXSe&3k^z$*M#ZXXCcIAs?B{krly3c} z>vfbO{NuJ^!6$mG1k@*B3Ik$$2=mOf<+7OXva660&i-p8?s<-7Jp7WI;MHUEjwPH^75TEHIPF>gwpX zsj3;?EXq!CqwC$)uwX1mqSz?zdsi}Nv8m{r{$D=~4T-#YqP%!;hp-fA1SP_b{noM- zeP?I)V|O8+D)b-_ht7v7G8(tR>Ovn-)xcEcx9Vg|fJ66@RvjZxwxi!+4M)HdxPTIX zF-joH!9V8^==H$$DlX#d2g(_*>n&So(`W{8xiP2}Yfl!cbvvj?1H+kT>}g@YM5)Pq z^=}(UGX6J{|^10v^fS+}tDc z9rd*O%k?n9oKe67uzGs1_4dew8@1rmspOF~?twJ(JahwwK!8W66CaIZWU)2tCDa?6 zgBi3&vVnjr=$HA9XIo>hLK>JTkI1}m9q1K{f9aMNhPw;>YK+Ftpzt?L>oz4y`{=X* z!ZMZLnJh#yj?v2>&!}C~W}hEeA=*8*gK&nkj2h zD;D-W$AhMz-5AUQZf+#%(2?vZIpa1ZAQ7WkdEfTX2-eY1|I9Q{sW#W}N}%?7_9G*$ zNFw;{&C#PmGP*yzWJ?mJKZuQMH#qz-%s?eTJ;`7o=6+9jN4{j-P4ZqE%6R$oLR4Sc zr709fMm&yAQ=v8Y9PGV6zho7(s{o>KGnM9wkXNX@L$&#Amfs9I3QAbX5vLUJB3HGm z!#0HpM|~ABkqG4Z`Pnz#`zQ`G!~3={@vg9+^9xR=H!!Kz*3|4F*1vx9#+Z2Roi2X3 z=Aqkzd+_DLRg-|y$`3ocn{rgOi&tg8fQRskc&5ssY>ZsuJ~RbYKz!0HcG9)Z?nXNM z@AT?JdwYAG?P1U@{GQ0|eqh(M8d0yd&D8#0!4N(S42+{gUb7?@3woIcZFJ>phQpx0 z7pFtvq)|t28@kd~NOr$uh-Wvmy`5cHi2TKOF$`1>v@+1Ogr0xui_Z7%jW-L@1%^&@ z;Ri?L7Dbugnu<;>N_cOiIHHNar-jUTaUzG1hdvn8!NoH!3OBZ9G)BZ^Gys9lWaX8wJqrfAlBG4l<*GzFA|qnpUikr z){E>Ke=FGAuRE>A6pdmdgP;A zZL)tt7C?ek%&W{iOXn9KPYF&tUYEEK`#vY>)rJ35{$-FdS z*M@21xT*xUjkK)wTQ3+CGM^Y=>ZQl$dK1Uk)u9z8u6rk*iAk#8+as+w-_kZ(K<1s+ z5Y1tsi8-$rEi5c`XG5r*QJwBAL=nh5_5z#Ql|RB&SpL;4$Nl7kll1+=L)q&?k#h** zw_MCd7gyJ8^Hl)zD$#~|WZu2fs0Rf#b1(A{g*0!!sq%VGjCobV!YBv*$Mr+$*;BHB z^AYBo55M^AcK^Ch7EDg1!lbTzAaX9!Y`g|Yd#8iM8}TOl&yniGal>-PtFZPKAR`~o zHC9<|;$Kr54yPbwClm2b9nb^{XewUk_Iuqn$Ea zY4*UBl*Vg1Fg(K%-3oHq>2Ux#G(vo0ayl_A!?lh8=gR}3ps=PV z0Gvk~GO*Dt;Ck*zH6?QcEf#9ftfkjM+FddM=$HCeTKV%x3-CUo|d+b!n6c#UCrPu88U9oGzJv9dn=RzU!6ZeN=IK z4hgn^2>#$|lH48tYCc|Pz5kI&OuM$e{z>4+REAi^K6{@3qubRtL6hN%o_Nyn9mOcn z35)@&M8}ZJ4g4dw8C=uqo)jLddt(D0w zE_n?c*bxnTOO1D6SF$XOmm0X&;4{$1ysi!P5l)3O_!|wnL;WcnOkiKA9|J45PO}?7 zn4bY~NMEM1B32frFANK78h*$NCP)#Z|Q ztTVDm=BypxB#wLPLJWI$HEXl;w^t?AemvfEueJFE1z3*!SE#VWu`idxJzn-bj=#z} zF8bxU*74097SMh6qtd(pe~A<_d}=6Asr)Y&@ZK~7O!Yb$!w$~cIPiFW1Y@1v(5!z& zz8{>%$7z#BF(;c~7&chH>-ho8>Ftgn@UqhYN{{Yi(R&>s z=e-JceZVR8NXF1kZO_f18QuUs#HUqCqueN!_b%yMlB6M=jpc+dJ{GzcAaw#%XWlat z-xPyUG)-a$5ziEa@0c_24T@^6Fvdg|PhU zn(}#-q{{|g=XMnW4Qdp7l-;T9Sb555zWk82m4~~lQB%HW@?x)Exqn6*ZIs|%N^16g|k`UG*E1mPgkkLBi}eXSvwpp>pqIv`Tk_0Q8Z(BCPAhF*ke_#oimM~8Xe zq)_xMd+5GB>x&#-yi$!P*|%T6cfQ&fK>g2eJh~fbIb_n6Xu>R9sCp8`#Nn6Yge?3F z(E(Wp-tm!MSXfes7A*PC~x-5m$us{=%rLp`WG%;RtF zAClf>D`f}!i}gxmH#OQGERn=)aVPR>Cf;^%6;TWgkMS{w#_7|lvJ7_C6wELxXGiuL z(ym)~z0=A5Zu8w*&4w^S?1T_45M!xOju=Yb6aJo>tWEzkC`(B>kA-XXZ06~am(y(O z;OW6q56IWLl%#&9PCv&P;mDnT+&55cE<;OMdP^k2h*3X1`}8?f?-{N3mU0!$3Qvz=ZQm>>kh zIALzSrMPZxZpl2hPPgaz=kLDsMS}*R$^KYJB;4!`t%uWVk2k>+s ziELX22a!Gnf)IcUTHW2{cD+59O_@N~e|jX>ae1nqwns(~8dk(?ptp$1sp4&;Z^83@A$zr2z&LICuZ4 zcim&@&_zJ#1-y|;i4MP>bz55-Kn%ZkBqBsaM9|#q4rV-7-yq?WyyE6Po1@PFvt(u3 zpg$D)O9hmGmoHyZ@4*tV11k{t)`IEZT59SsfTT2^&Qr-pZ$r`XBw=}0fDrkxO`qpN ztIZR@$ZJqgP^n2?4xlcrd%{WEcmQ8Uyt)mVQ6+dVMWW&<3G*Mq`vXt}&jKjrV%*0EOEpgi9ftCRs@#Y_2Ob^?~4YoH44BUh9TkqrqfQ*1#0T>DDqUT|J zRJWlNemd2k4(IQ)!aTako`-h8j*JB;!TazpVIF|>#GsTdO@L}|X?ed(_}Wl98`dz@ zk`8Xl0TE2jxfrKB-fR=w*!=qCaAlxnz21dH1FcqXXW^X+7%jMR)_=l~6dU-4iD!c2 zZ}T&22bx+Exs(DhO;yJ!TY(3x^}^Qx$VTwI2gY#>L*joDNt7|IS~1v*4KSbudkbd0 zT)`OQ`ysiRJm3Y+@Ct$jOdF|pDlopolijtqM2(E>0Do{ckW4%gZveA$wl!#WMn#cX z;3wY(5FM)92uz!VaQJ`hmGYi*4UVh=KH%(r%};p#@&hGk*n~fC@IB3u|1BGO8vqT8 zL%Y)@sU;;PNXuR%O@O|8;{hhTr`o=O0KucF0V4_0YUyNXR6QU6b6Ofy5_La)n<|9_G_(Fi6Cud;Ng$6nf ze4~dD_Oon;$oGTvQ?l3IpZfax-4Gn8uwqenYYUnaNdPt&vR44BHL=j&|}1Z)ihs$vo#3I8*-*XKxu+)fTmZ9;HLNq&uV$>5y)akPrl=kw#KV8l*u$K)MBK zK|nxhL@80aLrS{yj;-H!pZnbSbAKHUZ1-M!t~JLTW4tk-Zy(VeoPG<98o{8`xdB@8 zWGyEg9GpM`N_f0Zr1+Jrty!hj!RW-xM&0yF|L@yxsuosOem#PejG_n8{cZsW16>mI zj(D$MB3Q?XWi8SrI+$wjpf#-GzYd}5+0S=wmuGHLD@7wbd@|5`gb2gJ`tBwQCN_lt z_Gvxr8;(b{5F+G3%zS)!Nc@`C(=tH98&?d-$}b>Vd{Gi=IojV(R6lj|@Tfo1cI2D| zi3=b{j^?P0cZQ6rX9=w!c{!cEz7hm|x%vD~FDMn~psS9Ydi$AJU~cusXV_&FIyk0j z*Y)DALemfr1mVetqvq4Q-MbrB&^`S113ZsEg-O9B*lVD4ws!N?zUP zvW68S1KIrn;8>aB-YaWssSFA@wMm}ZMC6|72+x#yHVC-GlSF^`ZydZrs8GG2#E56p zX4bj4v-~@iYUm<6z~K@~m@w?yf#%h&IDw$ahor)GeOEC97daEY>mO*&K1Jdj*@fDO8JtALdHv~v+aLp%Pu9&>j0aKa)BjE#*w)L88VDl)j8!cnaEn&`J;k>mMU zW|+TCy*CsL&a!q)+!}_XcNTio-;C-Vrs1rEHndV4UHAr|77$_nA|o=TpvibT0O$3? z2Vwv~W*rtxI7R8^NTVQw91*iXB}M(~z*~qr@Qi{^2o(CbI8$-0@>0azeau{hOtzHd zi%p}D9>5`#mmBnOZV(qAJ%Wmm)bG#4y$(i7qeULd%SvzwDo~7wW{p+29h3*jTq z7-6Hwj|=Wj)xuK#z%PX)DOiG)ph%GkA?oZEft%5050(}nSAv}efp`P@Jzyyy>nx>d zFzY6U%6--@$T%UFVf_ZW@gW!waPMDZd?yUe$jER@q2ej$)(spt2+Gn=1nd8Ta@p? z(dM?7<~ITNO?@e5nf_bx-XK!`cLVH}T%YBe4w6l``kRQN+T13L9Wf_|1V)dQsIds? z2}U?2Ah`S%^TQ=lZ*E220eJTrLC>2Fi4fH=2}}a(##HAu-(GOjsIA8casD%z-xLg8 zALZX@i}unBh-ijOErw^#*RclpS*j+BF&w=E@;5c$OaCZP5roWkBr87Jpvtrpp6u3% zNvLZXu3!4<4l02#mnK%L@2FvXw|akU0-5|Gq?sj6YaQZPga+M#Ee+Z5!r<0?y~ zU=<%;N%tJrv_>K3+k?{khJFz z7@(++K5~E}8m?IOO{$m|AGw4qIpg;^HZfMKaJmZS4;y6XN9I#w$-TwS3kD; zp1VUt5A3l!={(n2#5cc;tJps}A|cWPyNnCKHObr-NMR@1ed-Q+OZJKjl?C!qtZ|WVIDw z`GtzDr2C-NnXFfcR(s%sAX3X2Zw}UoTY*M4vbKE*54pFSR5ihR~8mbRqEf)?|vu`_IeKT>K9P0 zK*Ys*^#u|}94e7o^Iig}m7xqD--7?`1wbYA%QLrX)pA-&=FROryPi|B3kzGmEO-Ox zgI$983}iUW!ndSjE8$iG5=>w&0ND^Qp+7p!x549!JYEbr8ST2=Sfx}PHD%O(@XhCo z;F<&DzHv`FFud~c1n$h7sp}1CncaJ;<39qUIV5{&@Ux&-#k0qfVLa#j1b!W ze{7WXm`YbGjcPQI=m`P0qS6c;LqNgIkf$E_kAHIZ$vAV^Qjb~vZFsA@_Z>Yru*Zm) z5xN|pnz*mSIRJ-fI286em~LltE_6;cv@yRipjiD0F3 zhX_+X0~t}xqf+ml>@I@a30Acv@g1Gdv#{v7n{;+m1QJjx99KSVM`q$+7C3~J@$X=Q zDll;KA()H+oWN>FRY9!AfkNgSh%{P^(0GjoI$PyLMNmN+cTGk%2!y?X{_1PFtyoVTA}ct@ zYe$$Q$!gxS8{2{OcX%gV(D7({mYajjB}mMFG#3%0%aL%;1po4Nh7P~9gA^Exo(eb@ z{s?U-orpMm$(pgR*5G;p?ss!bON>3HJ3{xfnzMfXg47Er8>avH!+#jUUFR5fcjjdZ zv`R#WM@L8bM8%<&Ee1YbJiQ#U0RcREdz5tI;1JB(-y1Kk5w@D8Y~ zL0MdUb0H5jUV-b)l{~O35Vk+hJ4q1DClld}vy&B%<8tKS5LO0;*F(%Dac+3;Sdr3l zD%1%0E}4pThQ}>56-=j!?0-l+_6W6Zmu4cIICcA#o1sQtLd4fF=-bP;>y>cyw6=u) zYi=%=ffWOja*`@nWSvSLx9sl-6Xp_rLy~s8g;Fe{p`%cokf5m{gG}LA@93kFU<=Xa z{mb|JemQjbVCflDv0G|7fss`t?{#i^Xk^BI?_egCbpoyHgoKRI;=x`}}mj3ydhDxRgaxpVdOK1*T8$@eINVORJ@%$)0esB0PosK#csJo#7E z7=$aYyKWoheNlTgulAtTY4=0u^8OFAiMuYT7yTi)xD}@?YB|<>iOYWNvGzwT9^;a> z5*1a8{ga?bgp#iu=A zN1mn*6HPl7>=t#@GB!x>uKRs{zrT$n5qkXQ_2andaNeEGliAYx0U1M_-a9?Ic2|q3 zR+wHt{F2GMamu{*Pb{4_atu($v-Zy~sEv>Rh)9%H$`$YKbktd6v!MGJzal*jy6tAC zS`(1^$s~BDiHL(kE&roGQ=DeEL(;qDwIz;Of$OA7IoKq3DLvJadJ8`m zzB1N-6GSm1+_al)>dyIG!eg5>*+Y?t28uK*p&jH?b}Hge{>8Ukl<99?wg-po9^dkC zo%{X0yg>ao0X~-|Fp$f9WhEpte zjS-Awv2Tq3ROwZ5GSFv51e>`kZa%v6uE?u!R^5Np!D-DBGOuugf1QiXzTXte`Xmji zl{A*W&0W&%BjH6>LO%fD`_{88<7-}f=+)~)fT#~nYxe(BMN5*7l( z#loK^EidReB9vv~)b3vHI|k5bPPRkz#kvLdX;VbAbN$nfFJ64|ygd6EhD&msXp2eY zWXRn;|X&97=*LT z1;eOZKR3r33_xrm>b@HKbW?EivodjMH1$1$w23k~P9Nz<_3LCmW{^I;AA_@bc1JmF zv#DCrb#qW0+AKrA0%H#bP0pMB_Mgp65l_U!@;`TX$rQ0DcmLL-DdXeQ{CneDUd7YJ zclzhMgbL-x&9%Oh_!_txK{Phs4F0Kg7e8;Dv?^38{o`7SNemCWn4aBP<7%~tJfaXN zCows{FloG)&Hf@D(yuVmvlp$AaDsLMs-KHc#Q~#Us>PpN!pU4e|YDUmveQc^>uiUUE zZzI-Mz|la^qvcE`fzDUHmQ*EWASGskXD+j&8K`rE;SA~k?;WkqUq{JOLF@h!v{PyK z>}&j{%g+wew`OW?@yetv&CT(6Z;c%NY3zSn#p5`0Gn^l&P+ceg!?)X>$-RD`E@83CJlvP!!@>(rf1&?YWafDE}2!CYa-Hr&<@Xj za#JI3@mv#|vEAffqdUTlA#=ihYQ8P*ziZdS-7F(5v(j%M;kS7JoV8n&Bad721>Md* zHhDPGb$NQduu=F`@^h!H^EtZBuuL#NrRqqr@#qQa;^oAL-`hX|RZSNe`2Lf#FqVJL z8r3B3#bFwyu&dwtQo{+s_f%1}H1mtn{Kpa`)?a_qobyclz1ym1)lG#l&0dS^FK@K# za!kJEHu)lHsV4183Y}Lv-kAnkU8RpekrH%x^yA&bZb0l8R&9FbW|fm!Birv&B42*+ zV@liJTV|gxz7 zna=MR@p}8o@c&*aodnXMa-7VT0r40bM4)5EfXu$lT(8{tTOy19_q4-7n_|6sUL3o= z*H^}A!Is5RmzEaFDecFE)1+db+|EV17SC6fHls-2NIXV82==4qyCWoIeIBDGtz8eS z;pMR*?Y^YamniGyto-~$3X%4YJpRght3*Cf=)Tvo{kh&baT|LJZNzS9Ywjg!dc2s| zD)A;fXo6R5>JH{r;C!fwLX3EoQ_w~go);#*k zSXIzT3)%G@Im4E4afZI@^?Ln4N9_>IhgHh}d#ug8r)g1R)5<6Kdk^3KBw^F3YEW8T zRKVR4-2P31M|0_HR+Q5V)@~RQ8A2CB{Q%CiynOkRlsnUg<{68Zrza{Zs_ZO50YM1? zxK#0WzDjEADIMj)IGoQhUF9~zp&S!;Il$xpa_XjQ{wfe9(&(d;`+BW&k2kG5xWa)i z%byYYkVq9IrREV$Mt(+Q|DhbPNv=3*iZ)j)g#N-V!Knx-Dd{Eg(@-$?o7M|3M;W%z zFNwc=ndeE_oBK4OE6@2$&CcO3xU!UJpX`TKpDY9<9<5qP4EwBCreG3tyc(Es``+*{ zT#)Hi3W@yj3@A@|T2u72Y_uk7*M^G*SbcNzYpwHb+-(s}>PKA3B5 z9?VfrTa4uL`&;UIZ;rFrd_GYiA9Nm4{~9Mj*dhg%gV*bNN=+9Zd8;of${z)eh{Q;c za=e9ZvGcbq77q#N3YG1W5lG&nrgU7WhL5t4b8t{n&pbo(!tF>!(Rw8*PjNjns-V0`Hihd+V%(&&J3RbHMYyxjn?*`m zgRcG~MQry`Kgud;?xUa;3M6z%>yJY;a`{rfiN6b;eQ8^rY0sbZaF9nh z?A4aXlF71CYHn1kv!4yd(S5bVHitX;@_%~)1DT@2AkJ(<4%Z+4tS33#FS5~Dq*A<* za-(J2H+ZNb!Tr?PY^n5_dBRrV0v?_L+5rl_U)%xcLoLFNrd7B7O6-o0h#_Bz%=(b_>hmkwCu6^5Rs~-vZ;yA&Uw)iJ941PdZ5YIddsFFXQ+O9c3g7Qbn z?OdGx*#3G&8@1KE#HO{dL;2zUw32bA(ua1>qCvqlF}H7f1r+hOBJ0*Eg$C##GPFa z(+ak>s5#T>2@B(UIdMeV!g-if)nAdLCL0{9lopg3O$T_5-4eaKSV=jxTL8lHBw?fS39JdTC>1?r(MwT zvBJx>k*aRsomX9s?LjI*y{EEm;IA&w!bLd(lr9HgI_Z2K{Xp`%)VeX5f zCZB_3$cMJAWwdI=l->=(w82`d)wqq4<4x1HH!PYnRu2gtR(4%eC9PmIX8k$*WHFi<(*zJZ@s z(`@^*ELJZdc{euoT4w$R8fbzl?yKY4-1_wDOHivH`9Xd}jr-;lpF>+^x?n}lJ57+> zujMkeRe|x{DUca+#C^eUxee4^#lEbjGv3xpDO}@~AS9q}p2%??NU#4qAS1uhpCmYO zhX?iHE8rd`b7%@oFm?#be)Mph&2Hi_-qJ6veBX=Y$~vdy|F5UX$p01>X$@Yy%_&8omZAf)tJ?sO(c?7 zM_Ai@TuqgX8%2`)*JLx#!Y%BR@K-bV9Sxei>;0;lzt(Pa&~E;xgYprmkQgl$f}(bTT>CU8reXE43s zcyG|G=KcM_O~d2SSFKl%o;qnImyQ4KH)iGty*1mA3?(`5FVC`N^pTJ841TdXW@DS$u62f6J-75Z#!sw z)p!sG58X~N$MUgeOZ@JBQm?80Wf-UK5YrbSTl7*|!n!ljT7-PpR?Hm3^T7VtoUbAJ zYLgd)t)}mG$3AmL_0p>NSiLXql3B^E9b^C2LJWnwX`@o{9lnHCZJR`nT{K0+Ux^Hh zccEJ-a9&45*aroEPv}35wwVe4G*x6%oI?K-#k%t!qloKSW6qJbBrMWSq|Tq<*vfdA z)!z}Do>4QM1&#{}S@SySXLp|<{`_$8g6kb^wG#XrXaU0jh5zkwyzcYTP3LrRb#ij5 z{pj&aitf3SdHMJ9UQm5vPF`Rm8j()1-AoaQs+R1>whUD9@ohh+7y4P17M2-xHhm^P z41PurNwh~r_~qTcs{75B#yBVmPF)x$c*$%CzE>2DZaBj4V65p`%Sq&YJ9J-q>jFxTPOx)riO5WX^BbH zX>`9?^~q@{wf>QEoSIPW(f7!6zsKEH#3Uu{;i`N&Q_VXePc$a`jU@K`raQu@{Q4HQ znCuXyT;^RG>Bjr#cdw71x+r*gD(3SSR)GB#(R9)ap?0Xt2FCz2`z1irs z5p$$Fp>q($<`PG2)Pn{uVfTyg!?CQ_X=j`5O*|n%V)W8BPJ;52e;T(#0&rv9qxv02 zXPeh!Um88-d6%2CCF|{#nW# z6Q2{J<*C~>B5dm4PoaDarWRFK-%8>|NlC@G>@@IZRB4PKfp*>ICL&Iwk(2b; zqTHU8mfgkqj^!WALJrhGS$X-d%byI%@KaI#s>p$j6P%YPeuXW7&-9;hcV4XCpAw|l zAS5Inc*S2f7#K`~>lu@yss;FuHS5&$G)iYw01F8))bl99sx802 zyCn_Uemq%ojR$SxFn9qD4)CR_1RqQwn}B1N0m7z!VGF<~E#yF8KWs2BzZqt#eyZ43 zq>{1)2<|paXPBj+X7-@6An)@SZcEpKZZh2`WJcBN%~$ z(h00f16nqgj2zlaIW!~hLL=bKpx_$-m=z8)9&$Z@wEABIZI`YJs4i@)6bNZOkS=V3 z@Dg0KkQ1&7)iWO9#mj*lE$lAJCfFZ1vEbo@I>Q{V& zo96wRb!75YCSTkWGS9Lu&}r8m@7JK;1~yuD$LG&x zSU~u!l|n}X)7(bqo}WJ-;*FO=69BMi=wVFu_1OZ|15kUJ9{ktEWS(|$_4V}*T0jnQ zo$x;WJHBBYZLLcHB%%mDCk%)<@s3Rn3g|u(_c?jsT}T<~CMp9ec4Aop#GoWl#&29- z9k+t$5xrUrTkMDl9{c*c!C{S7b}UK>vUmnXadB~=anF(3_)&z=8-rS|-~lVL0V67P zQz${HgEK2s;1m6Li7w{Ez*B_*D**)kKph9t-`TpV6Dg$Q)E51`Eg<^*Cb zxKgmH1+c};2~12(roF#{idl;ycyGCnCH&ha@R9s45A^_p>q}xk1|{lT1%z|j4H*38 z46v`6z11o_{S&mvU_A$kD$Ub@ovS&z>17QzurTM$4b>Iruk|veKy0ow5M3G*N4q_NUD5H z!8Dy9=YhSV`OGrjm%4&#e~oSZx9qj)SBv%3JYNG|7Hy8`sQ>K+TxrWwu}`BgpS?X{ zNnuMGYTd+a;NV+Vv?;9=nI4)@``JQiFhW{jeDynn@DCe-l~u@dg0R3@CQf6fuWVK) zaoE&iW0RAHB|6FhXx+R(#+DO&0lS)PAd96^3D(#crr!*q=D-Hqa1Z4WU^|BK0*|MN z)~cDD-L+|(^QgEJdmr9$dovV@sZ*CE5`cCW{ZLT3{(Ev?Zp;vuEJd@qOM|lDi;{FZ zH>`?tj)oVt{i<2=?-*i@=i+TzMm1NGY}?|sw)?2<&wpy@m0TzGEh$ek`ON4ZwmnR{ zt~I>2AlA$z;7k*_L+LvkeD(>u_wDF=`E!ld#fV^gz{4S2u#3C8yTe!no;rk0H0%n* zm|$kxwIDE|bfHZDy{YL*TpTX8cIbX?7H_9yf>b zx`8QLo4B(Jgo&GuQ#QEp217n4J5rOk17SM=OFyT4Cpjs_>7N^op}gB3bFez!576q>y9 zaS`|2UQe+P`;BL=UgYj6*|ecoC6f=^zoLTs<^Y&&BPd5;-R~NBeRb|ARTm>pT`eng z!kJGeE}O`Rk^|vzk-JfOf|e*&sR6x!k3OpVsU;~s2{j45iw%0U3fyv(PoF-0wNbOJ5c5A&%tfUpswuH^tz15P&P=QSUMZPkEP1_2RKEwFlYNG-p;*DiP;r=-7}-4$KBY_&})GS zHm?}>d!q`Q&0@ngHG$}~GuqjSAc+8p8W<8Ni5?b-CaQ8En^iOzyqJel#5 z0!&cpo7z6h>i|8RCc(8FSWoHrrJs@BTW&_Tda!TeX7Fy$RYNp z_K4)z_x~K>Yz$}J0--*esY<6yS~I-qFn%AyF4%YeEH^Yh-vN(Fu+#;zI}P?Z+6nX( z-`h8Zx~*UGI6a7+_O7$BnymM?+HT3%k-eDyWRY=H_b{*fg3sZi68z+%LnyD0!{ZMf zrfLf{6Q8lDQ`!!f$tOK4m~gZ9nftu;h6HXdKR|bBABrE=xHnLXPufqmD5dR#bKdR& z__x>DJ+6Ng%_r$@3$)S?peP)5e1I`2@a$j!WZm6%9^2E&Bq6tXUM_!2m(+fAle*=_ zrOU(t;^GOI6WNwrgc)KV|NTb(f96L@%p7MviahyTN!%v@zPvjikAr^atKBf1?Q}jj zyDcNH(f8v+husqBV$XjM#APn5uAb}+`Cg<8`B~0OcSdm-U- zthJfnVUp&2Zto7KyO-W3ISnn#hZ`wo3L0P*AU&Ml8^tXNQ(~1CbwS9INu8M?a-_JBytEU4 zd4?tY{AdZRdi|-z_)KPQ8XGH3)~y*8KNv#v(XgZ{*T!thGK>8&H4$iQ|NOR=Ncu~w%t`0e?$Idw| zFLmO?5j#}YxBIQ5$_?2&twvda*!oR%kK-nQ@AI{lC8pfCW@LIgPj27c`q);dB9i0n z7U7SgK2}q19v&V5kcXYD6%_&4JpBCyn~v^_W+pMw8?D5HNMfC!+IC30hXM^adWV{b z%)4O-z?p18xp(*a?cxE^kkHUv8U}HnvnB27jl9|J_x_Iek)kD#T^zupkwdq3Y1+FU zGNzcRs~cCIte5Qi*@^%kXrd8Rd93Yu+59)Tb1-f;?USaPIdxif8_Yk4VnAE+LRaQF zxd-$g|LlN{y4vbIIjc__Gt=k^B7{i9cV4}%19U6rL5t(HdX8|)i|I4sVNbLWB+L`D zu3K^*-J_$w!RZIyjZ3GJmHB@>IFB}`V}^0QUM+UvQt;=)Ow~8xObtdYZX0JHM^=!R z=Q3>hud3)-(xbDQB(BFe%ULiHa;D`up? ztgaheI)fVRa@OC9N4{57J+b%i`VgN}tSt2zX6p^yh$Q)*$@`o>@WFBUB`WrM%!6R$ z(T}`8R=%bGs<@7QbIUhAQyg`q{O5gZbrJnqr#};Jeb@EY0tru0_DC~%{0g7jDT@*u z6vTa$8I&gO{`nKe5p9C+{*l|G zM%S5&c0cLQw!`@kr$wUkckL%#4O&d+!FuFs#sxi5^%04qI`p%|s^S&*=AO;XELVuc zoF+4B-5jrWy9EDlTyV|)whh||V&dU%nn>W%GB336ey_-!!r2n%Y@+qcQBBJBK{Qqk#DZnu?LygH+3e#LxErBrHDt%*;$+QB!ovY#As`&?LWs+&pD|B zrLMQ-e5sqA)B4xU6rHb*`yN!huDZIUt7d}tHOcQ=ad*GAm0BTWyYQ7xKT_fDi9x*i zP^HzxQVFHtcb_{w*qJjphN8<)Gt{F*j$%LxN;G}8HZaqA>$$VrYc`$voU9hw_2=*1 zTG+E_x;!NU`GZt1Z$(yR=1Au}77v?wo;TC@dq0=oKSZnG`6t#ytR$_D%G*N<&&uO| z+Qs%`R{DL{M;b^Vp|+2fX0?#M@+vA$DHt|*-5(iU?QW%KU|mU|Qu>qa@roE%;3fqu z-whh$(*8|<(m7HRd;+%U_+E=U%PHJ_MIO^!*KFq7zB5gY4Z@&`+aXqhQwTrr=RnW>FeAaQRd*t@xzI&?7;js2)kD)LG zc{9|~22$oso=2?lZdkau9!_(lsbv_F6|%oL=|Nr@R)&T684jj09K;W|N)TcyDRXhe zTTpn5nY*2MF;zQ2D)kc*nSVdb|4!;@gqeXq|NZb&UN;Qjs79Epp&OQ^N52vJ8G1nm zr0{@lbiof)e#Q}HuulJeAj`usVDK}KC?kX4{QvmjX6)Y?lp*kmuiz7Zh0_?&vyqS;7dpU{Q+@-@Fm#0KEuZ#J`cY0y#y@!>PMI%pqc`AyZ>D$QE_v( zzYB)=mcI}yhxp;|0(^!=L97m9z5cEsWQ=a+V)%(YN*1ng7($(ea|Q9eB}L^pV{^N+QY-(}|Om3%1^H7*zAyPw3zo zh{1=IjzHE9sr-7(>3kSX+%rO15}2{la|aTNk1(8TA`FPcASWrHtwx3Q__f|m9kDigA)azBCHTzRoVj?in#+FB-`_Y-})kUgVBboDd*Q2;H49Fu48CuTe(_{@P_HOn)^DltWHSY_!|I* zNWa`@yEc-j%;eA1&BBF&+j zfBG~&@EfyMutKo!A3Nk~H@GFQoy?yFZo+NAXQE6}-jRLOf>ql0zr6sMPYdIBKFj=l zU7S_o{%htYm`Wpyp-`}J577b1mth`bO`{s%q=lf(tz$?0UA=2e9r5xwG7oru!wJCE zk`DgHY7Rq%Q&c-8aN!cyOlzzy?}WO;+rJ9^P5LG&%7cq`21(b_9IVJ9|449y$DW=?{vANmGJR(ov?lbY06By;&BsYV#pR>1Cy{UvMDZK6? zw{aSd!dKh}dvE={w_ZOAh}AAG>wySrni_<9{K@rH5?_xm^{qHHEYNWLgF`eOkq4b6 zn$24Q8aj4GEI}E@Vg=%;5{z$Iu+hQGMh&@&x@R`Vw zGogm_-I^)^9pepL!0@59Nl2L0fp{9tS%95TuFZqzeLc(y$(Z%Y6WC02g`}*p{Czmy$lb zGs?fb1~tQ%c5knJlEIj@@jU;aGd13;|0yDMfii^YMMKN0y79OA(|W{$|2MI2|Jsb_~-Pgussl z(Es!Gnn4CBAuz&<5Rl;DfU?eKt@`w&Nc0MdESt{<+ADERiKx(ZpZ0$;y3nZ{OSube zijcvlQof2E#1%A5U%)0=E^xLXTdQDwRrRfi@5L;k!esr%vxS zdy`!lodQhN)Dw;n>39|mKcYvqW+dFHkvoG$$JxMxfl{87{gD=VEDo3pazk&4Vd3k* zc3xOm5s}+m)?!#^{ry6fTQa0vx`F(q}g z^0$8Z>gUN%Kb7hBb4x(Bsam_sqEl`p(;*Ke!;1^aa-$EdP&>)JdOh8ASgPGb*F}0q z$91R;jx^5e+1zocqW)#@%v#U8QgmA#5`mj}d7+ZUmiSvXUFU=Hcc3tqgGCbb29%RH zL=RGUVM+|dDwwI>Du2r`d~DIco^g?lS@sc2-MNwQRZDyE+rV#&6H2p@VLs>mOVo9? z@Yt-yVPv{l=<-<}Ll9%dOsafKvvga)^z$K^!-Wy#-@r{ox6NNb$wvg-_T01%x*$I+ zEI}Wwm+7VHmFjnl?<+&Z)$HL|^_YX1H*Dc{ka7%>-bsp*^tIRJ%N&tM{JDgqsLL#! zY#i|!cV<++ebS$&gQrSX76X!$aDtd9DrH2tVXDcmnXpTE#q>A$bkQZkTqH2PFKCn*5flHf#Is0i)W4~^je&b z2^=zGx_`Cen^QYxqL5xmq|%;4aziASZt_Fif7RpZF`Cq_{o(=3T1^8{DawNC0^_v&Q!zSTs17|MQVr8~Q>MW=&*MmR!xv!p^-vp4s9Y(*Nj zMnu|I?Q5Pi{tCXYib;HD-%wL_Y}CKcu9p5VD7>;m)y)}qnC2ZOFW5yTJ-0cx&=gQA zf566&_sLy>RIajh_}W+Ts4er}L?MCsFI3KIikyxF_{?-CwuAaDjiAYc?X2+^}ZA!qgVwGv|{s0WU~ zMN~1Ko?Z%!&OgE|Y}hB@K>G(Ifv_EAKczuS7e>(mJdsZ#|LU3aC4&qb=)_qO2}Im9 zKujPdwSli5l3WGk7X$zp@f~{lTq)ogV8oaW3V1QFk>uke*x&>qIS8v@R4v=W0AL?@V_N#BZrd}L7pMD} zA!kdLwMa1T@e+(9y1|!y0i#iy)3DA5{8!wg!os>iZi+H44s)#Qwqde7NXPbfcctc} zY$J<<;zXfPE528Jb47w_Sg-RH8EKd-~eow*u7aW;>#YkP*L%SHgarNad5PZfVI=GVosuKVU z#`CSuwqC;uLa&#JV+?K~+>+>3R)StY2tj;zadv1c+j7^cAN~2WsgJwxOiNaw3AS~&9wT*ZmHADQ-Oz5Qc)<88?1aQ z=)E!b2V+Izc+I*1L54&g&$j}AVkX_M@dVURsdVPw{Q=5P9e_1F#i;rm4q>Cfm}Kx; z!N=GFA>8UE?Ox9D53nth5J9g7r>PSvJnW= zBqSJ3q@uUI^%<$b7bG|f^wqh?KdLQMqy(S>D!XrPo-dtqKd~7MS^!_~I=_6ZI10<( z-qwcrLIlLpbN_~C2JOJ(L?I;*91zAqE`pd{DSKrFmunpX&_(diSK;9&;3~2s9o*Rj z-~tSy7Z)eIKE?uMa_D>x_a4|)1M&h@ zUQIb+p4u+BK|lncGhk%B0vZR`P+VKAQU6l(z4<1&2$@F1E4Wj5j`{2)fQnjqYohJs zmK_TU!otEc$Ibx-GfczohHZ-P@&E-ff%S!SU>UNv*y};i(hef^fSd;$I-s7krzti5 z=tKu54hZ~I7Yuz2p)}nZE{LprQhY{x4Vp>A13$=dPz(f6sg-Gqp92-lVK7??b|9F| z)P~tQ3)oKt>mks7DGYGxAy#a;=Qu+-uW-hRTCED};sue0+RZJeL5)%C83-n!Ksds4 z11AEN*Q`(PYFdG_$3T`OY4R=cHMsAL8kwKK6bi)HZf*G%zhGLw>6PUm896(_3ES&-?3yA0t|7s^0 z&jIiw#tb2T%>Jwqj2XcH1rilS{Uoq-roVuU=5})y1R_jjm~xTa2K;p8SuDFcRc7zK zC5*IuA~r2Wh7U+2kTNN}2{>Rj4I|6Cb+_a6KQS?}seu6v#smPI!E)^@a6g_U^^9f3Iq|+E19=d9=ap@GS$!P(~ zm!*2z#@iwe<~UV}($c^Ys#J$@yA#dc9&rAHrWFw^`XnC?FjsY(v2nC^GaTAT^VjY& zGarpF@@70d_6%MLQwF#*u9JX-`%$a{DLvi`NmhfLV;IdwB83qW(5?eVgr)6)W&oj6KYE(}Jq7aO8k)Ib8Py?hX)5piSRciG&CpnRj%<-g|xp-8at; zY=g0_Vj;0kR|r=#5Sa>;lVFB>N{&nzL|>D*RNkGjNHC)Z`N)@!)S(2-@3E4~Pf?T1 z*+nAR`aui~@H0EU_n2glIOchf6T4f8StnSktECG773bBYw&|ggz++e~#3pD3L4siZ6yX?rB5n!QI~kH_&zYbSth7JuOh`(_s?n)7F~Bj0Cd(<OY9vm7^pp zi@YvgD9H{cRaMcHjT*eWiIjp5?~%=u?EY^rAck681OPD5FXtX5f^0%+H#(qO8sYE) z2U{BGvx6}RVZ{PR5WB-!h*`}SFiO}i+tW>9+&&OX0r7Xd7;S{j^#O=9*t8}?5O^S! z$ZmKGrxy?;9x!zg0BI&L7^!+bT<{GvnfMp6x>28`0tzlujWYWUjD(0e^dIPRZlbLf zK7*6tYO85GPWDxu|Fd6Z25?y0SWYVeY}!_C3#L!CD5eBQ0}z6MSOXqY4&Q>rxxaPw zOa>fZ!l?^9i&ZWnINVHH{f1KqVFjPTQ4e+#1>-<#f~ro&r3Wy3f}?TTco6_;FemS@dh2SA!r^)N=Ju>kAbQMpHh&%`1H^1yOu<=h1FdUEg-q` z_~c%OelGRk;_18Z((~x#(W8(kp<$D~T=YlkLbr@7A%ya&<+aT$h0 zR5QhHzt4#;n777P!_KUBoR#p=<3*556xr!YD_qBU%qK5K843yE3JC@Cv{Dni;vDk1#Puja!j+#+OS0_xVNc z!1}F=A&K5MgbLWuUXZ*07><^+Rq%lH2M3&RTm)6Xa0-TXP=-A{6&k@K(g0gCSR6YN9TYIdD{6m%Js%sauzpVpY@nzJ9^ z6oTY*aCgw`^Zch%hh@AUlL2PvM4XQxUX&XNdw6*8=Yd1ReZh$n+`{>vbOE8GAzjVj z<`Qmh?G^nkHg#y>`rwDgY8kCxUQpnJ;1Kl0r``xpsmmx0GkD7JrSKn5O-)tuBNNC< zJax4lnv|L9EX=hH#EbMBhCnNOaSBPCUYUMC4AFuqFfM?@#kiUdQx=A5C243girA-D zsBF;qc_+$5T5`kjdZJRR?-yuA_@F1h#Ks_?ny__-L^H%LA_A+MtQK7ePhQ~DgB)qN zwj$j!91(wO4L3)}chiy+O04KgENjnL*4iYbX4}AF;T&xqZ6CcRV(rgI-*bTp*MoXj z6O=~gRXnl=OB4--rTaxiKpX6N`E=gI_xTXrOyyIgMyiPz^|JmW@NaCclMXenaCn4E zBf0kJ>l@mgxrWs&C0yt5P*?igmT<>eo4HCPC3GL#%KGT6T(vG>)A0xW=33mK`lCx@ zjXA`P&-~dAU0CRTm!Q!x<^!?U$xptvRUtFd#BJO^Mn?-;rGWU0^FFhZcno8RD|%#F za+vW?D(Qq$BPuTSC+}kiWJbowLFt^*00)b*J3EDuYk%U}UTzIIn`(!w+d}6&S^VgVP-vn`p?qz?A3| zswwLeC%k9@l`-VSbA`0vZ!BqI`Ai=YT|u%(Yxon+63T=u5jRW>t^CFfMg?# z)gtqa&&7wy*AVaZUr+Yp1@qOC`iKn0I>=EpP+bqn1E4mpiXa6HBZd*LOc(_WY`H)^S$ObrU4Sl``({+mt&7*F zJNw#p%tI-29EN}M!8M@kP~EFn zTa}Jo=!jw#s+AF0Dl}co97Rrcfr_VhUNnae5jHu;9Gv`4;5pvvwZWb5ppevj3bB(z zzxEiCVY4scGi?KJF3(SVA4K&ww(f{J`9@r1iDKgmemeTCplfynv0K!3UfRKVdmr{W zbgS`O?vwG;H}|Vit5t6&z@dcHU&uwB*3Aa91EaenH!u;BpVHH%a_hVZ(MT%XA#?v* zGn+$)q(>t^xpnRC<-!A$*9E&wi)36^SJxWk4^39tD!iu=E~WB2b5scrEJ+_0vv3&l zd7iH1!JY=E%u4Z_4vqVc9|29MG+!j$apZDGlqn=r1{cE*?y2-28umg0FdNvO2Gtpq zAd}Fp%!JpgGKVF9cuaQN2f!tKfCHcg+dd?UMHkc`^R4Foq2XEuAyF8@5c4bAeCZ^V zU5!kQA9fAygAbr@0zRq!f4S%ha_cbIr^#JK`wbBP>NsVh%`>XM|BdU+y#mRGbbAYX z6H43o$+9IKFWn*s>=zqJxV}ItK1M0~>FM9sb1PUcU}0rf%S6}bMe-nNB&jMMLnf*~ z4TN7&e7y8z0aSl}<(s*`*SNAljt0p=X+vbeS_I6G;4f)OKAB2#3`uZf+TvXpZ;06V zeK{8?dmIL(-A`7PBwyp+puU^XlfWmZss~ZdAe$mA{n*=tOyT|lS=$(!du;cM4(6m5 zjie23yFp?iTA*UzPJB9~imdP#^<=t-E3qgT1x6^+R4c^Rnc5(GN+n;`#;@RJ>|BQ$^^ntGI-xOlCOIac)VNgIh^P)|g_fS2?(FFf5t3?cjnl{w9{%&;p z3`5%7`$tQo@)wquP17FS4+3kb!yEpKR=nM8+}!;YM{l*Y?^yU8o}5V$8-QyxF}D5X z4(v}+``gz?`@xia8*e!(U_c-*;-9gJ%p9mZFCPvJei_zQ54i$Tt!Nfy#}OY4h{PYXclo4zqaz7HEVNakPM~psx}Z0m007+br53X1IqOcsPKa zkVezO_UQ`LQVlO)TW(TcV;MySd}uCUq@mPu)6wVV=5`<-07fvjwMPd#p3=nJ~u$tvOIDvfy5O6QQQnYd%x~xBe-7*XS2g@~MfNLSr z0EM>+2L!m-ft8G8(TBu24irEq6k8{PSYkS1Ug&B5!3jq8MhVsJ^Z=If==L5z(1rBb0NGA;1-lcW<;9LQKv6A5&7TMZrj0N> z5CFE|qi}2RmkL;=?>sBefV_?m&Qi!Ew zy9Bu_eFOlFW6jM{zlk!@e}pA^AUIKT1xZ9XjU^!=u_2Y9=+^*Y@HX}vpx8p@wWKKu zB|>;YFkxX=LB~=GjBPG}klMePw}Fia$XROKD}r|M{SPouTmeLcs0j|jWAK=7Fjjzg z9w3h>GW>5EDwI+r1WD;8br#~HjuB( zm&Tas5E077LEG{b9pj={{} z-dA@<*y%M_A9QN)(rLAFR|a~4UEyv|c{t_r!$0hEI#tGx5yX6O;%%s)mprdjKKja- zqpp+w=o+H*tJTo!l0{`DjP1&1d|X_@=YJkL*=o6K2`116U9%K($^gmV0Z&wuy0^r4 zqUY>w5(=rk-(;8fk*{VKId!iR4}NzXT~Y1cmgadmTZ+rF0oqdtXS{h;@C~|=u)cKh z<>giTC+k71)5LC9v6565u7FqY7I6Xg63*C_haOR0ZVxHMjneB;YnR_-47b2{4(I zPiQ(ryvSJiqrI0FrPiC8&ftnusUC0<0Ujoo#`ipA#j4RQ+# zhL;{|nyaaz_r2Fwmq?>G!u3yb1gFZjm{VlUD#w-!u4??Zmho!S>eA(=XslP!xv86P zw~}F`wp3bntmRc+uN(Ys%3^jf>Xz5O?)9GT(olu7{$%EhoHZ2_s)+1G63N5tf< zQMg3oi8E<+E_WguES^yYi0E=sE4#9pJdT{Sz6{4SG(@h41ljt-5ORAXg*&!F2$E1C5%Gh~hUD{bNQl-7?dy`CW{UygrJzp98Uo2o^X*Hw$OzMws z^Cs?Eo-m_SIID}@HS)F}Q9_3$@79hUiY+@=ydUNAjS{myT*Q6v!BUhA&d3SU9&`lG zq^$v7%(jzti*XG>b(3>K#y7b@7i-iZ%G3O(T}M2EH|F%*W0M2sf(pGh&tagPotB}B zU0mPaJ+^zZ-q;OmuSzwF5^lE=V5IsS?s}U2XxlDg{DmXBusT;}+{2K6-gR^Xs8ohr>0RqT|rkPc46Utj4SBfiz5yaJVdO zEs|iyrQdr!t6)Y`+pNAU&$%9^NJkvHd%-?~#ZGdDD^DZ-uK!br`1Flr({B;Bwe|>P zwd+p5p-6cYovLX~0AHOrQKy@n7quhv%Mci_?) zv!b^>L#%wbCVWjqZQB1@lS{vQP+pd6?El9lBdj!i$WZKitB zO|o9+k$Pbx)3CkWUq2P+V8ypIoaBZZdk_??5vRFm=g-_%{Nj6U<@-L8hOpDN#sTw- z5!=CX<&+7#)yY3hj_)^TUb_Yvtq@SZVC!ab6(NWjP9-Ouh{A>H)bJ-`e=x=b)*(%1 z@7WQs`5ghS-uS=teM0j;2!|;0`etP@T=vEbXIKpDVjiYY^H??gRI&`E7G+Voa6DE4 zEQ?0s&Cj0)ZfqL)r_1ZCm2YN#90O3E(R>PEok?q1k9hUPSI=fP8XB7w);rCj}4;{y_jouyN>Ay&1o_o%0CPLeQVH3C^8-1KEvAk?qZzg-BkK?jn!P;SSd-w zZO@NEzqZ=`VnibC85PA)*^Uisr0EYH$DO7JGp-VicY-Bs-@Tqg)5Ik!0u^nYPcC)I z<4WTFp}02^?~Ql4(KX=|)Nh;)fXAVTuqXlf`SVi;a$b|}^SyAj#zq8~)$u;;Z~(!g zLXA=iq-q3xYiTmntPK|v%9(*GbG|nlak5Lgz5Dogh0?O5Z%`(?w?f;M`0n9G64)&= z@Mne{JZ&&QLp#p_oA9rr1C6)nnC<@*#q4W{2tWV)LsjYK9ozn|McfM zaF1iCnN(sqWp;zZQuSh~bCqL;$H$c@oNRY~%%s1R*q5mFNXt>USfU;z|Ful=hjFib z(0+o@39NRrL49etGiJ1L?&*87ghEB~a{0N&_ItmUdQ((H*EcumWFq9kHfz3rH|mOA z=(4KXovO+z7OQjF!HXIM!?h5V2zukyp)}8*^FKq_T_1Qoeiz^hf-o*X0l$S?k!&t? zlMfonkoB3R7uP0N~g*4GDvEhggk2XtlSKXqj! zRqruP3&keYwC>j%HhXx~@)-r#89XG@8U>TFg(yYlILa|0qdq;o%-RenLo_Bbo}G9& zI6D4HSzJF~NhU-84Du_P{5hfrbtPc|H=g%?m64T&8TzbW@Fm0pWlkK;@7%Wu!idMq zh(GJ()NHojQ>YCVYi$({)GNj!xQaZ(!RNEzG01%!)xoy)JN>kRI_!Dmz5K+#q1ZQZ zI^*fecNAu@QlN+K!i)83{`<yB`Cm$HBx2!DgnD@?=iG=BC z!J-%hqnDrVBN%s7ef;Cuce7QZ)|%T!$ID5(66$>R`=-QoR-<)7#BPwp87ce{_k5=$ z`e!61s>w?7p-+cTH$#G^z~fcw1wr>0V2Aa7ZNxEpKgZwm(o-e%VPxb>2rvvB!q7%T zLa}kDh^5e^!~9ovbGAQ$#FWrEh`3EpZ)MNj9k;LZIIEVQn{N$@jlN`jl6d!k+K@Lv zu_Fq%9Sb8BJw_nO(#R#7I}B$@7rZd2+^(>2ab3?gJBlytO}nl4R(rHOBh%#@Ek@r^ z*ST*H`h}g>taj|JHCeeEU!gxs+=-4KezC)hce`NwF7OK&584A=3Iq1pXyyn=RCy5HOZ;=L}P~Q9>~aCJECW7 zhhBMB3A?^Hq*TK1+UFR~_)OaQ-whdQoIU?mAowy|gz9v;h;gu$2Q}XR;f~X0?r;7o zRjR=t<4mQLcq1}sCh38OJOi;Q8CmHeOV!e+aR8fFbVM%w5@v#qjVEzdZyjwn1`1#J zD=TpsRBi8tM^xFj&KKQ|2}%&)l{Kjw)zmIvWT2^W`EJ5tBr4%xT}|mvGis5>DR)cI z(6{2g%g!HLv!uE48y-FWm4*|4BsPxZlnp!uZ_48uBMa;JBcrbJpkEYUV#fWjBZ~a!?%1w%>Z@GCUM$9+jLL?W* zqa*bY#!2m5{xO7B}6@iP5xzXKWD zh_h@j0oVCv$~!u%uC*GPVw!i!!X?jFbUS>MRMR@!N^sTOXFF~LmMllFubGO~xGt6^ z#aWIJnft`-d9EKFW|Sy0B_4Fd3)GZ zXNteANu_tRI#u}Li0j-(v7Ln1JuoIhjqguc-}0x&*W2^tJ}=QT?5~XJ9WE6;OOVVB z3Ql#^>cF3r(`LLl41R2?#(N>m|M{b&IHF(^C!ag-36X!~@YCqhm`RFO=+oI8GQzta zW^Aj%X*qfHl=X7pAlX^if@!j~!n|6uj3`_8l=0+k@d@9XLLROOww zDo^OkaG~bP{v08Aep_0)0!0A7cazhO{bFF#hxw_Hh|pUDwcz79T3&_3UW#8;+1s2s%4dZt`26v)Q8IPbd&}k6 z_8!rY9kYx#yJP8;&rzlmle^cK`-jLi}QeIHqtgIYFVAE_M zffp?tRD8P(J2M`Lx~-C(c*+}oi({p$ty3Sjnx$eogs1&?pBM6gK@Ds&m8< zbR!FsDBo8G7Ga~f`_O|{27G-*)ajs$(BI!57d{9NX9@%F&g|M6dq5E;7~YTE2cU$L z^L+Thf3F4Vo5=Q0+{3a)Qz$qW%ERzM)B)FksU$BSKwC!r?=b;!6BXM2s5s(->QtyO z8=wc;KlB)ty@3=OfEFaGL!D5k5^#T9`obo-LJ}#1yhmPWur&VX2H5?=%U`wP{P%0G zfL#UEH8}T|HmPhZ~?HDc3ga0hiAwol1YgT8W=2L(DBCw{?2_$9B43%|MD;WT)pY71a$Gbf9wIAl|!W2X(HCF0O_En_o~VM&7^; zvSEnp5*HVjaR*(1w*8e~GI}T(1HjRd?dXt{u#iIe%?&(UfE>2dqg!FcT2GE{^e zdAE{8z`E`}bRQcY{sxU*)rQ!6U%`O_z@ous!0Mr~`z<`L!CfAb!ZE0rL1!@>PY`H+ z@CU<}lhad9-LHQEy#$I8xYqm-ojZUqXu(9KDHDg_L= zzrf3YQSxQ_4K@kWP!4+vUD#i?;o@@TBj!N}quyzQ!bHg7FQEVza7nb!0J_|otXf!F z(#%y%0LoKURaKq)Ng0?O0~^G8>@^BK?_0O5d_79*LmpDAE79gIE&tt0SRcc`dJ(*~!3R~Nv! zJJB9zhjS0=U3Sn^@UXEPdF4VV4*m`>SUrd73t;svIVfDxX@21j2M!9&`}1200_a*T z0%BBZZToSL4uQJb&b@Ea--Wo!0+72dwpa6^}1iWQ|qgShA|x8IH#!%hwkL$X{xIZ&W^;>!I(TU3PJCH7E++UN(N5BG;1 z6wF>>v~hpRL69IqJxFt4w)GWu!1KXo*b`?ziMz=~+Kl7-3a+QU9Y{hqQz-YN_S4?X zKl!2$(EPvKA!(k$)PlRDq<$49zJ8l{?LrxIvL@J7LL2f!%F^p}b4>W?=;$wBu*CjV z9&Ql7CZZ4^{?{6iSqldAS-MWP>N-O62|SGW_?MLZQb85?>PO0E^yJl#!C~al26Jv+ z(k_@AmKE*Ty$blZu~npnh<}E~3m63Y&SIz6SgNvar@K}16I;E~y(#H?OtF~zr5Xan zYG?~vW{+P#QXRhu`x8fXge*mW-CO~&-4|^`-fle*VKd8=GC-nHbH zCS9>g@pybtSojW=@c`?=cvz&;FMY0|S3!8m%=Y<;vdcgba)Q(*^^uN{I5{d71c%;{x%>iYIFS&ykOM+2z28u_zemf!6G}*)z^LxiW}0pV4sV5 zjN-p?0GA~=dbDXyVwD`1l;g(?aAqK)zcAz6XfgOY3bMc`mJZa+`va2VGZ9ml{xqJC ztfXvA;J#d99i|ld;bF-AYJgS7=aCO8L@JE#&@u+pW1*=-InlH`-s?UMtn6A^x=;k( zpWX&A=$%hGGT++)xIh;`BL$AevMm&^kJxk_0j!$!cwPzpDgVVLs-{ zm*swcc^|^yQ<#BJ6v6|;xNuig{_r&1^kYDPDhsjV_ttB6mMC8_aC3w9c!qW>DB4=# zmr23EL$f|1F(vG7frmE@o%XbRKuc>Mq1~pP`*{|az{$%CF3QSKzfa>gkEGpOSQ(PG zV8cgXw@a=bqR7DG<;%c*ZMeWR?2v}Uq@aV}2ftCx9Vn9^uS3UT0#-{coFZ;8gV7rz=lt?=B^Z4mus=fTRVE6Y$*sYhE~ve*Yks=N(g-^{qlNxj zijy1+(XX&hf=R_^gN9T!=2A#*#=isY>*92+1j!Gp9ZbLkSW-lvNvKNi{ChN9C??65 zph|QQdXYpVAiCv*vN<_)KidE|8VI`9z)A`hiTwaQ_~X71l2N5bm<3IjP#0bVuDMwG zq#bG~xoYd`z^?_sA@+3zD97zBb&Y~uGC1hLRl7y-8b7Ymqo$x>TW<#AIX10g6j?}? z>Ipc@Mo>X}PVw`~O`zuad&h{qMu?V1rxe6Wwtpk9t$ zCJ({JNEE2RHQ@OP-vW*kc9}-e4&itfBoVkt_E3rgXU%^rZf#AdVG0BPba!xi1O7SA z^HL~kL8#^3`^a2o_`7T}?md|?BUA2rMrxRu9oocG(`fdd2mS&YPc&wZE2(JXWq zr>npo_c^!&G;ZJ%A3t#(0ViqtGvEE+P>#*Xhn($}kGs3OPwU>n0XSLPLNox&9JY2G z)b)cr13MWhX|5;}FYhi8pHUN&6f*PIs5}8CE&!4&?IQnvQZ=M6nl)-@Dk8mY4@S42>W0teM6MTU( zZAh7lQx6HSZwd;jF_Eoq#q;_p+zI3KXZ!7v@VJ0HM?!&4BO;BaJ&Qx2Gdurj1IKpP zq(SWYWwSpn*`?dT?y%hZhVzqMtpYtAQ-Oqj8+wP)!b;!jr%QGj!G}#*yAc=w)usOuBJ8rC%?R7ku65u#Dz{aNzG_NLj>Qemwx+R z3`b``373-dCzD2ALnHl*JA~GAiT-R;pLq%Mme{6_55L9le5<2VG$-B(WjLH&%ITRO z$*=UdXc?$PHILThWTm>e2oG;2Du=&#cSH}3exu}eLZhqkvf&*NH|EV&+M&DD)pL}) ziuSC+v6oLpMP?yw5SJHUg_AbuBVUbs%wv+Qn}}u_zPfj$9PLJM8@4-toxaq>MbQ#T z&N1ChCeAx@CpMyhzR2%b_&866c$JjWSTs9-5UlUV2SM9r(8mC79T&4~+Cf#nf~ICy z+E;A>Az{j^w_`7Z@!(Rp6ACXS&U>Jw37l!_rZu<{YX>M{Kq{QM-@K}6`pxA^bH2MkDu zuxLkO$;$ljXSs!Les)=tMJcJ{gja6DoTqPj1sJ8}ZpBZ3m=p2mDCj`%|-d2+k1C+&kG@!@J8gxlb@j{ ze0 z^!;|Dkg1#s`sPi{Q@v{UxsIsG%L~k&l#7n`2pT))WWK(3hbkSzIs4>iIy$cLjroqG z0vi*~KZ=payodGrE9B-mIXTUKA*Vwwnn#=BhJD@V_=xf;PB-z|WLQF+S!T^VJT%nR zac&0v)U{~5YD%dg$D@%ZHd(mtDuzyn_pF8QE79Ax@AdSev%K35tvRVgEv&!2xSDPB z81oK2Zv9CmXz=<(Q)94`#PVrxn)ky-6oye=6ZKQCG7ys>xW#6@GQl6Co|qN053 zyYimp-!A!>x-XaNDXA3gQNq=c1bR%rftqyH} z|5PQB|6*d1omT@hS?CryDK!=|Eib+2pYD^q+pjXnCyT+u(uL-&ch>CE%4p@*ncGp- zpQWWH&!yERs>3AP-GvBjQ3-z@(~?SdtsCN<-KY2;KSqtN>)@v2aQpeUA{r?>oK z`%=oe>CcD0m->lPRU}_=>geu_l@bQnS}F2M&zqb&Dt}F1N-7%FQ>m%$uzNn6@p|L8 zMbS6z4$pJ>cSn*>`#Y>m9>f{EkrJ~=7Netc`thMrNVs$3w|RVGe3h#Z1(%K&?@ztkzfRgQ z=+e=bU(TdT;n57f(fc*LA?Uh`7j3GTChD^NB{Ghy>cv}ClO8?pSI1_u^Yrc)2MH6- zgFHw~j1$R;bj>f#3p$o>jLTg&QfewsR}Z~!$0nVP^)Y{iMCSpg&!5KS=VdM@MG1SQ z!q%(n`}_R&bkiSAUISo2P`_GIPhHcy&HL=bJcw=4O{Y@VOJNW+=T;>cueRPK-rQ_w z5pzElr7oR&FCR8EFu=~n*4gXHG8Mh4uBpk+_D*e~TT@dLi{FqVR+pB5d;0qcAA@VG z+*`cfXD`!RHs}KW`3I9iK^mdaH*){*)2B~(G^a;2ph;>h=q%^6o1XHb#$h4T=`J{? z%;8uMw{A8S4yw!ET{zYJt(0E)i(pOESzoT0u%z&_$Ul+-M~>X;{=n;FLJFrleVEjn56h?!nGvW7AgM}tMNJU4 zETGJ-%Q}459v5fVax5lB^9v`dYv7!wT?R%ma))BjcO5Hs_0Y5r=Q~<5GkUHrOU0dZ ziTF9}yJRFWBX1c9JH53-X(ViWR`IDs92O6onn=b3`2y(@wqHbla+H&inWXyeJo!g- zSei#x2LvNW?U4vh**A9#~{->HT~X#Bav5VE3)j+F|_LMIO5Ztylminjdo! z(uHo($H$-6hjyM^*L+HM-9o-?hT<@Ckf^{{R8}fW%C$nxKoFv+;#k$=zLl%#A+_N?1(rnR< z2O{nDs&0YtI?u=HvY$-;gSMwdF!^E2BSWf zFx?y-7F~ceM@g8Eh2>h4#3SN>kDm|~RvR45!AU|E``R)xt--sxU1!`MLO??wMNBnT{IO!w16PCr@HNC)ria~W3alDm7xgE%uNO1 ziw1ReFDxt`Hzf#VJB8agJCuDZba6X%dz_!uTa7OG!zB%nP%VldVYWilV8SKFz~#emBVhtTZDa$g8cLY-(CA zwN*3u(?xV!h1Z?s{{4fa89|H1_@GW4e(mZ<4NDRVnv9Xwcy!G0g8R@)N2bZnHvhzb z&J+3WU6sbOXBI~zwqKpM=*V5~kLXI7B3~ z5a1H<_=ACqi*)$=4}wj4TSt_$>x(yRB|nLA3AT0pN-HeuZ8BLY8_zKGSBy*QNq$Ih za^CZtqyFub4Yz}|hgNCDZ_n8$1T}r1@7V5_h`)M6!^Ist^+h2n_e%7tqcp$&`omOR z-4r~(P`x^f7b$X0N(sEKOz*DoOe`!ln9b#Fzoe%Rqh0jHy7$h|dg=$i*_R39t&XPy zp}iHbC0L)X%ZnHo0`UeOcbDyLPc>V$T|ouyPZL>Lk^RPg$C$GhoM;Hb+3nCXwof>G zBl|D0kcN^en+Jnh2^ND1bc-LvAWxEv2}m8slBB%{%P_hODL>{?>9=yl2G_dY7r%0Q zcm&IhE{_n?W=SvVsIYNEG_`EH_=$E#3s{Xgx&Hl%QDl-F@Ayv(Hy!c43e9NEcoQ!n zOj1I%ndt_E8iOSDOg09)#P-6H4Y24G<_3 zy>DXccM}t%4TG5QL;X=&K1L7!+znJNh}aDzrmzYS4ETFPojQD*(C3kMtmk`QmyiGw zwR|Pde~V5ntO>e!3RC=e#*_I|#$LNaDO%}cEY4##oM!w7XJK^1bC~c@ z2+;?!`-=pSux(I4g-axDA~9s$|NkGOum1VxpR23C{LJI<7Yx)YdHtV&2aFHUY<}K= QfB8p2Mp?R8@+IPx# literal 36287 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 Date: Mon, 9 Feb 2026 19:11:10 +0100 Subject: [PATCH 12/12] =?UTF-8?q?Gestion=20du=20contexte/m=C3=A9moire=20co?= =?UTF-8?q?urte?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Gestion de la mémoire courte --- .gitignore | 1 + AgentReact/utils/nodes.py | 54 +++++++++++++++++++++++++++++++++++++-- AgentReact/utils/state.py | 2 ++ roadmap.md | 2 +- 4 files changed, 56 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 1c00b2f..870b2e1 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ mlflow.db documents_projet/ chroma_db/ AgentReact/rapports_resumes/ +AgentReact/outils_resumes/ # Python __pycache__/ \ No newline at end of file diff --git a/AgentReact/utils/nodes.py b/AgentReact/utils/nodes.py index 76c50cd..0763de2 100644 --- a/AgentReact/utils/nodes.py +++ b/AgentReact/utils/nodes.py @@ -5,6 +5,7 @@ from langchain.chat_models import init_chat_model from langgraph.graph import START, END from langchain.messages import HumanMessage, AIMessage, SystemMessage, ToolMessage from langgraph.types import interrupt +from shutil import rmtree import os import sys from pathlib import Path @@ -14,6 +15,12 @@ from .tools import getTools, getWeeklyReportTools from .state import CustomState from .InterruptPayload import InterruptPayload +# Variables principales +TAILLE_CONTEXTE_MAX = 20000 #charactères +PROMPT_SUMMARY = """Tu dois résumer le message qui te sera envoyé, de façon à préserver le plus d'informations, et en deux ou trois phrases. +En écrivant ta réponse, n'inclus QUE le message qui a été résumé, seulement ton résumé et rien d'autre. +Voici le message sur lequel tu dois travailler, fais le résumé :\n""" + # LLM principal llm = ChatMistralAI( # LLM sans outils model="mistral-large-latest", @@ -69,7 +76,51 @@ def LLM_central(state: MessagesState): def context_shortener(state: CustomState): """ Noeud visant à réduire la taille du contexte pour éviter une explosion de la taille de la mémoire court-terme/contexte """ - raise NotImplementedError('TODO, faut que je le fasse') + # Récupérer le chemin vers le point d'entrée + base_dir: Path = Path(sys.argv[0]).resolve().parent + reports_dir = base_dir / "outils_resumes" # Chemin du dossier des rapports + + lastSummarizedMessage = 0 # 0, je ne résume pas le premier message système + if 'lastSummarizedMessage' in state.keys(): + lastSummarizedMessage = state['lastSummarizedMessage'] # Récupérer l'index du dernier message qui a été résumé + else: + # Premier passage, je supprime les anciens outils si besoin + rmtree(reports_dir.as_posix()) # Supprimer le dossier + reports_dir.mkdir(parents=True, exist_ok=False) # Créer le dossier + + messages = [msg for msg in state['messages'][lastSummarizedMessage+1:]] # Récupérer tous les messages après lastSummarizedMessage sans l'inclure + newMessages = [msg for msg in state['messages'][:lastSummarizedMessage]] # Pré-remplir les anciens messages déjà revus + + for msg in messages: # Boucle principale + if isinstance(msg, HumanMessage) or isinstance(msg, AIMessage): + # Message pouvant être directement résumé + if len(msg.content) > 0: # s'il y a un contenu dans ce message + msg.content = llm.invoke(PROMPT_SUMMARY + msg.content).content # Je le résume + newMessages.append(msg) + elif isinstance(msg, ToolMessage): + # Outil, sera placé dans un fichier + + file_name = f"resume_{msg.tool_call_id}.txt" # Nom unique + full_path = reports_dir / file_name + + with open(full_path, "w", encoding="utf-8") as f: + # Ecriture + f.write(f""" + Tu as utilisé un outil, qui a retourné ceci: + {msg.content} + """) # TODO: Trouver un moyen d'ajouter le nom de l'outil depuis les ToolCall vers ce write + + msg.content = f"Pour voir le compte-rendu complet de cet outil, utilise ton outil 'read_file(file_path=\"outils_resumes/{file_name}\")'.\n Résumé:\n" + \ + llm.invoke(PROMPT_SUMMARY + msg.content).content + newMessages.append(msg) + + else: + # SystemMessage. Je ne les modifie pas + newMessages.append(msg) + + lastSummarizedMessage+=1 + + return {'messages': newMessages, 'lastSummarizedMessage': lastSummarizedMessage} # Je retourne une liste entière, ce qui devrait remplacer toute la liste au lieu d'ajouter un simple message # fonction de routage def should_shorten(state: CustomState)->str: @@ -82,7 +133,6 @@ def should_shorten(state: CustomState)->str: Returns: str: Faut-il réduire le contexte ? """ - TAILLE_CONTEXTE_MAX = 20000 #charactères count = 0 for msg in state['messages']: count += len(msg.content) # Compter le nombre total de caractères dans le contexte diff --git a/AgentReact/utils/state.py b/AgentReact/utils/state.py index 3224440..f9085f3 100644 --- a/AgentReact/utils/state.py +++ b/AgentReact/utils/state.py @@ -10,6 +10,8 @@ class CustomState(MessagesState): ragQuery: str # Requête envoyée au RAG, pour le cross-encodeur ragDocuments: List[str] # Documents retrouvés par le RAG, pour le cross-encodeur + lastSummarizedMessage: int # Index du message où l'on s'était arrêté de résumer + # TODO: Ajouter la source des documents sélectionnés pour la fin du rapport ? diff --git a/roadmap.md b/roadmap.md index f5ce0d4..ea41980 100644 --- a/roadmap.md +++ b/roadmap.md @@ -17,7 +17,7 @@ - [X] Branchement des nœuds entre-eux, **MVP** - [X] Human in the loop - [X] Amélioration du workflow -- [ ] Gestion de la taille du contexte - Résumé de l'historique des messages +- [X] Gestion de la taille du contexte - Résumé de l'historique des messages ## Amélioration de l'agent - [ ] Cross-encoding sur la sortie du **RAG** -- 2.49.1