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