InterruptPayload
Permet de représenter les arguments utilisés par l'agent et de les modifier. Peut aussi refuser un accès à l'outil
This commit is contained in:
81
AgentReact/utils/InterruptPayload.py
Normal file
81
AgentReact/utils/InterruptPayload.py
Normal file
@@ -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
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user