test_action_serialization.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. from opendevin.events.action import (
  2. Action,
  3. AddTaskAction,
  4. AgentFinishAction,
  5. AgentRecallAction,
  6. AgentRejectAction,
  7. BrowseURLAction,
  8. CmdKillAction,
  9. CmdRunAction,
  10. FileReadAction,
  11. FileWriteAction,
  12. GitHubPushAction,
  13. MessageAction,
  14. ModifyTaskAction,
  15. action_from_dict,
  16. )
  17. def serialization_deserialization(original_action_dict, cls):
  18. action_instance = action_from_dict(original_action_dict)
  19. assert isinstance(
  20. action_instance, Action
  21. ), 'The action instance should be an instance of Action.'
  22. assert isinstance(
  23. action_instance, cls
  24. ), f'The action instance should be an instance of {cls.__name__}.'
  25. serialized_action_dict = action_instance.to_dict()
  26. serialized_action_memory = action_instance.to_memory()
  27. serialized_action_dict.pop('message')
  28. assert (
  29. serialized_action_dict == original_action_dict
  30. ), 'The serialized action should match the original action dict.'
  31. assert (
  32. serialized_action_memory == original_action_dict
  33. ), 'The serialized action in memory should match the original action dict.'
  34. def test_message_action_serialization_deserialization():
  35. original_action_dict = {
  36. 'action': 'message',
  37. 'args': {
  38. 'content': 'This is a test.',
  39. 'wait_for_response': False,
  40. },
  41. }
  42. serialization_deserialization(original_action_dict, MessageAction)
  43. def test_agent_recall_action_serialization_deserialization():
  44. original_action_dict = {
  45. 'action': 'recall',
  46. 'args': {'query': 'Test query.', 'thought': ''},
  47. }
  48. serialization_deserialization(original_action_dict, AgentRecallAction)
  49. def test_agent_finish_action_serialization_deserialization():
  50. original_action_dict = {'action': 'finish', 'args': {'outputs': {}, 'thought': ''}}
  51. serialization_deserialization(original_action_dict, AgentFinishAction)
  52. def test_agent_reject_action_serialization_deserialization():
  53. original_action_dict = {'action': 'reject', 'args': {'outputs': {}, 'thought': ''}}
  54. serialization_deserialization(original_action_dict, AgentRejectAction)
  55. def test_cmd_kill_action_serialization_deserialization():
  56. original_action_dict = {'action': 'kill', 'args': {'id': '1337', 'thought': ''}}
  57. serialization_deserialization(original_action_dict, CmdKillAction)
  58. def test_cmd_run_action_serialization_deserialization():
  59. original_action_dict = {
  60. 'action': 'run',
  61. 'args': {'command': 'echo "Hello world"', 'background': True, 'thought': ''},
  62. }
  63. serialization_deserialization(original_action_dict, CmdRunAction)
  64. def test_browse_url_action_serialization_deserialization():
  65. original_action_dict = {
  66. 'action': 'browse',
  67. 'args': {'thought': '', 'url': 'https://www.example.com'},
  68. }
  69. serialization_deserialization(original_action_dict, BrowseURLAction)
  70. def test_github_push_action_serialization_deserialization():
  71. original_action_dict = {
  72. 'action': 'push',
  73. 'args': {'owner': 'myname', 'repo': 'myrepo', 'branch': 'main'},
  74. }
  75. serialization_deserialization(original_action_dict, GitHubPushAction)
  76. def test_file_read_action_serialization_deserialization():
  77. original_action_dict = {
  78. 'action': 'read',
  79. 'args': {'path': '/path/to/file.txt', 'start': 0, 'end': -1, 'thought': 'None'},
  80. }
  81. serialization_deserialization(original_action_dict, FileReadAction)
  82. def test_file_write_action_serialization_deserialization():
  83. original_action_dict = {
  84. 'action': 'write',
  85. 'args': {
  86. 'path': '/path/to/file.txt',
  87. 'content': 'Hello world',
  88. 'start': 0,
  89. 'end': 1,
  90. 'thought': 'None',
  91. },
  92. }
  93. serialization_deserialization(original_action_dict, FileWriteAction)
  94. def test_add_task_action_serialization_deserialization():
  95. original_action_dict = {
  96. 'action': 'add_task',
  97. 'args': {
  98. 'parent': 'Test parent',
  99. 'goal': 'Test goal',
  100. 'subtasks': [],
  101. 'thought': '',
  102. },
  103. }
  104. serialization_deserialization(original_action_dict, AddTaskAction)
  105. def test_modify_task_action_serialization_deserialization():
  106. original_action_dict = {
  107. 'action': 'modify_task',
  108. 'args': {'id': 1, 'state': 'Test state.', 'thought': ''},
  109. }
  110. serialization_deserialization(original_action_dict, ModifyTaskAction)