From f1d0c7e342f21b98e2ae0369c98e416e72a95047 Mon Sep 17 00:00:00 2001 From: LJ5O <75009579+LJ5O@users.noreply.github.com> Date: Thu, 12 Feb 2026 10:50:33 +0100 Subject: [PATCH] =?UTF-8?q?Tool=20=C3=A9criture=20rapport?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Et retrait d'écriture fichier généraliste --- AgentReact/utils/tools.py | 62 +++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 28 deletions(-) diff --git a/AgentReact/utils/tools.py b/AgentReact/utils/tools.py index ef8722d..98ef939 100644 --- a/AgentReact/utils/tools.py +++ b/AgentReact/utils/tools.py @@ -14,6 +14,39 @@ from .StateElements.TodoElement import TodoElement from .VectorDatabase import VectorDatabase from .InterruptPayload import InterruptPayload +@tool +def append_part_to_report(contenu:str)->str: + """ + Permet d'ajouter une nouvelle partie au rapport de stage + + Args: + contenu (str): Partie à ajouter, écris ici ce que tu veux + + Returns: + str: Retour, une confirmation, ou un message d'erreur + """ + try: + # Récupérer le chemin vers le point d'entrée + base_dir: Path = Path(sys.argv[0]).resolve().parent + full_path = reports_dir / "RAPPORT_STAGE.md" + + query= interrupt(InterruptPayload({ + content: contenu + }).toJSON()) + + response = InterruptPayload.fromJSON(query) + if response.isAccepted(): + with open(full_path, "a", encoding="utf-8") as f: # Écrire le contenu + f.write(response.get("content")) + + return "Requête acceptée et validée ! Tu peux considérer cette tâche comme complétée." + else: + return "ERREUR! L'utilisateur a refusé ta demande. Tu devrais lui demander pourquoi avoir refusé, et comment améliorer cette partie." + + except Exception as e: + return f"Erreur lors de l'écriture: {str(e)}" + + @tool def internet_search(query: str)->dict: """ @@ -34,33 +67,6 @@ def internet_search(query: str)->dict: return TavilyClient().search(resp.get("query"), model='auto') else: return {'error': "Utilisation de cet outil refusée par l'utilisateur"} - - -@tool -def write_file(file_path:str, content: str, append:bool=True) -> str: - """ - Ecrire et ajouter du texte dans un fichier. - - Args: - file_path (str): Chemin d'accès relatif vers le fichier à écrire. - content (str): Contenu à écrire dans le fichier. - append (bool, optional): Faut-il AJOUTER(True) au fichier, ou REMPLACER son contenu(False) ? True par défaut. - - Returns: - str: Le chemin d'accès relatif vers le fichier en cas de réussite, ou une erreur en cas d'echec - """ - try: - base_dir:str = Path(sys.argv[0]).resolve().parent.as_posix() # Récupérer le chemin vers le point d'entrée du programme - full_path:str = base_dir + (file_path if file_path.startswith('/') else f'/{file_path}') # Puis générer le chemin vers le fichier - - mode = "a" if append else "w" # Mode d'écriture - with open(full_path, mode, encoding="utf-8") as f: # Puis j'écris - f.write(content) - - return str(full_path) - - except Exception as e: - return f"Erreur lors de l'écriture: {str(e)}" @tool def editTodo(index:int, todoState:int, state: Annotated[dict, InjectedState], tool_call_id: Annotated[str, InjectedToolCallId])->Command: # https://stackoverflow.com/a/79525434 @@ -278,7 +284,7 @@ def getTools()->List['Tools']: """ Récupérer la liste des tools """ - return [internet_search, write_file, editTodo, read_file, search_in_files, addTodo, removeTodo, get_skill] + return [internet_search, append_part_to_report, editTodo, read_file, search_in_files, addTodo, removeTodo, get_skill] def getWeeklyReportTools()->List['Tools']: """