test_action_serialization.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. from opendevin.events.action import (
  2. Action,
  3. AddTaskAction,
  4. AgentFinishAction,
  5. AgentRecallAction,
  6. AgentRejectAction,
  7. BrowseInteractiveAction,
  8. BrowseURLAction,
  9. CmdKillAction,
  10. CmdRunAction,
  11. FileReadAction,
  12. FileWriteAction,
  13. MessageAction,
  14. ModifyTaskAction,
  15. )
  16. from opendevin.events.serialization import (
  17. event_from_dict,
  18. event_to_dict,
  19. event_to_memory,
  20. )
  21. def serialization_deserialization(original_action_dict, cls):
  22. action_instance = event_from_dict(original_action_dict)
  23. assert isinstance(
  24. action_instance, Action
  25. ), 'The action instance should be an instance of Action.'
  26. assert isinstance(
  27. action_instance, cls
  28. ), f'The action instance should be an instance of {cls.__name__}.'
  29. serialized_action_dict = event_to_dict(action_instance)
  30. serialized_action_memory = event_to_memory(action_instance)
  31. serialized_action_dict.pop('message')
  32. assert (
  33. serialized_action_dict == original_action_dict
  34. ), 'The serialized action should match the original action dict.'
  35. original_memory_dict = original_action_dict.copy()
  36. original_memory_dict.pop('id', None)
  37. original_memory_dict.pop('timestamp', None)
  38. assert (
  39. serialized_action_memory == original_memory_dict
  40. ), 'The serialized action in memory should match the original action dict.'
  41. def test_event_props_serialization_deserialization():
  42. original_action_dict = {
  43. 'id': 42,
  44. 'source': 'agent',
  45. 'timestamp': '2021-08-01T12:00:00',
  46. 'action': 'message',
  47. 'args': {
  48. 'content': 'This is a test.',
  49. 'wait_for_response': False,
  50. },
  51. }
  52. serialization_deserialization(original_action_dict, MessageAction)
  53. def test_message_action_serialization_deserialization():
  54. original_action_dict = {
  55. 'action': 'message',
  56. 'args': {
  57. 'content': 'This is a test.',
  58. 'wait_for_response': False,
  59. },
  60. }
  61. serialization_deserialization(original_action_dict, MessageAction)
  62. def test_agent_recall_action_serialization_deserialization():
  63. original_action_dict = {
  64. 'action': 'recall',
  65. 'args': {'query': 'Test query.', 'thought': ''},
  66. }
  67. serialization_deserialization(original_action_dict, AgentRecallAction)
  68. def test_agent_finish_action_serialization_deserialization():
  69. original_action_dict = {'action': 'finish', 'args': {'outputs': {}, 'thought': ''}}
  70. serialization_deserialization(original_action_dict, AgentFinishAction)
  71. def test_agent_reject_action_serialization_deserialization():
  72. original_action_dict = {'action': 'reject', 'args': {'outputs': {}, 'thought': ''}}
  73. serialization_deserialization(original_action_dict, AgentRejectAction)
  74. def test_cmd_kill_action_serialization_deserialization():
  75. original_action_dict = {
  76. 'action': 'kill',
  77. 'args': {'command_id': '1337', 'thought': ''},
  78. }
  79. serialization_deserialization(original_action_dict, CmdKillAction)
  80. def test_cmd_run_action_serialization_deserialization():
  81. original_action_dict = {
  82. 'action': 'run',
  83. 'args': {'command': 'echo "Hello world"', 'background': True, 'thought': ''},
  84. }
  85. serialization_deserialization(original_action_dict, CmdRunAction)
  86. def test_browse_url_action_serialization_deserialization():
  87. original_action_dict = {
  88. 'action': 'browse',
  89. 'args': {'thought': '', 'url': 'https://www.example.com'},
  90. }
  91. serialization_deserialization(original_action_dict, BrowseURLAction)
  92. def test_browse_interactive_action_serialization_deserialization():
  93. original_action_dict = {
  94. 'action': 'browse_interactive',
  95. 'args': {'thought': '', 'browser_actions': 'goto("https://www.example.com")'},
  96. }
  97. serialization_deserialization(original_action_dict, BrowseInteractiveAction)
  98. def test_file_read_action_serialization_deserialization():
  99. original_action_dict = {
  100. 'action': 'read',
  101. 'args': {'path': '/path/to/file.txt', 'start': 0, 'end': -1, 'thought': 'None'},
  102. }
  103. serialization_deserialization(original_action_dict, FileReadAction)
  104. def test_file_write_action_serialization_deserialization():
  105. original_action_dict = {
  106. 'action': 'write',
  107. 'args': {
  108. 'path': '/path/to/file.txt',
  109. 'content': 'Hello world',
  110. 'start': 0,
  111. 'end': 1,
  112. 'thought': 'None',
  113. },
  114. }
  115. serialization_deserialization(original_action_dict, FileWriteAction)
  116. def test_add_task_action_serialization_deserialization():
  117. original_action_dict = {
  118. 'action': 'add_task',
  119. 'args': {
  120. 'parent': 'Test parent',
  121. 'goal': 'Test goal',
  122. 'subtasks': [],
  123. 'thought': '',
  124. },
  125. }
  126. serialization_deserialization(original_action_dict, AddTaskAction)
  127. def test_modify_task_action_serialization_deserialization():
  128. original_action_dict = {
  129. 'action': 'modify_task',
  130. 'args': {'task_id': 1, 'state': 'Test state.', 'thought': ''},
  131. }
  132. serialization_deserialization(original_action_dict, ModifyTaskAction)