agent_repl.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. import argparse
  2. from typing import List, Tuple
  3. from aios.utils.utils import delete_directories, humanify_agent, parse_global_args
  4. from aios.hooks.llm import useFactory, useKernel, useFIFOScheduler
  5. from pyopenagi.agents.interact import Interactor
  6. from dotenv import load_dotenv
  7. import warnings
  8. def clean_cache(root_directory):
  9. targets = {
  10. ".ipynb_checkpoints",
  11. "__pycache__",
  12. ".pytest_cache",
  13. "context_restoration",
  14. }
  15. delete_directories(root_directory, targets)
  16. def get_all_agents() -> dict[str, str]:
  17. interactor = Interactor()
  18. agents = interactor.list_available_agents()
  19. agent_names = {}
  20. for a in agents:
  21. agent_names[humanify_agent(a["agent"])] = a["agent"]
  22. return agent_names
  23. def display_agents(agents: List[str]):
  24. print("Available Agents:")
  25. for i, (name) in enumerate(agents, 1):
  26. print(f"{i}. {name}")
  27. def get_user_choice(agents: List[Tuple[str, str]]) -> Tuple[str, str]:
  28. while True:
  29. try:
  30. choice = int(input("Enter the number of the agent you want to use: "))
  31. if 1 <= choice <= len(agents):
  32. return agents[choice - 1]
  33. else:
  34. print("Invalid choice. Please try again.")
  35. except ValueError:
  36. print("Please enter a valid number.")
  37. def get_user_task(chosen_agent) -> str:
  38. return input(f"Enter the task for the {chosen_agent}: ")
  39. def main():
  40. warnings.filterwarnings("ignore")
  41. parser = parse_global_args()
  42. args = parser.parse_args()
  43. load_dotenv()
  44. llm = useKernel(
  45. llm_name=args.llm_name,
  46. max_gpu_memory=args.max_gpu_memory,
  47. eval_device=args.eval_device,
  48. max_new_tokens=args.max_new_tokens,
  49. log_mode=args.llm_kernel_log_mode,
  50. use_backend=args.use_backend,
  51. )
  52. startScheduler, stopScheduler = useFIFOScheduler(
  53. llm=llm, log_mode=args.scheduler_log_mode, get_queue_message=None
  54. )
  55. submitAgent, awaitAgentExecution = useFactory(
  56. log_mode=args.agent_log_mode, max_workers=500
  57. )
  58. startScheduler()
  59. print(
  60. """
  61. \033c
  62. Welcome to the Agent REPL.
  63. Please select an agent by pressing tab.
  64. To exit, press Ctrl+C.
  65. """
  66. )
  67. # check for getch
  68. getch = None
  69. try:
  70. from getch import getch
  71. except ImportError:
  72. print(
  73. """
  74. The terminal will NOT look pretty without getch. Please install it.
  75. pip install getch
  76. """
  77. )
  78. getch = input
  79. # shell loop
  80. try:
  81. while True:
  82. chosen_agent = ""
  83. agents = get_all_agents()
  84. # shell prompt
  85. print(f"[{args.llm_name}]> ", end="")
  86. # check if the user put in a tab
  87. if getch() != "\t":
  88. continue
  89. try:
  90. from pyfzf.pyfzf import FzfPrompt
  91. fzf = FzfPrompt()
  92. selected = fzf.prompt(list(agents.keys()))
  93. if len(selected) == 0:
  94. print("No agent selected. Please try again.")
  95. continue
  96. chosen_agent = agents[selected[0]]
  97. except ImportError:
  98. print("pyfzf is not installed. Falling back to default reader.")
  99. display_agents(list(agents.keys()))
  100. chosen_agent, _ = "example/" + get_user_choice(agents)
  101. task = get_user_task(chosen_agent)
  102. try:
  103. agent_id = submitAgent(agent_name=chosen_agent, task_input=task)
  104. awaitAgentExecution(agent_id)
  105. except Exception as e:
  106. print(f"An error occurred: {str(e)}")
  107. except KeyboardInterrupt:
  108. stopScheduler()
  109. clean_cache(root_directory="./")
  110. if __name__ == "__main__":
  111. main()