test_observation_serialization.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. from opendevin.events.observation import (
  2. CmdOutputObservation,
  3. Observation,
  4. )
  5. from opendevin.events.serialization import (
  6. event_from_dict,
  7. event_to_dict,
  8. event_to_memory,
  9. )
  10. def serialization_deserialization(original_observation_dict, cls):
  11. observation_instance = event_from_dict(original_observation_dict)
  12. assert isinstance(
  13. observation_instance, Observation
  14. ), 'The observation instance should be an instance of Action.'
  15. assert isinstance(
  16. observation_instance, cls
  17. ), 'The observation instance should be an instance of CmdOutputObservation.'
  18. serialized_observation_dict = event_to_dict(observation_instance)
  19. serialized_observation_memory = event_to_memory(observation_instance)
  20. assert (
  21. serialized_observation_dict == original_observation_dict
  22. ), 'The serialized observation should match the original observation dict.'
  23. original_observation_dict.pop('message', None)
  24. original_observation_dict.pop('id', None)
  25. original_observation_dict.pop('timestamp', None)
  26. assert (
  27. serialized_observation_memory == original_observation_dict
  28. ), 'The serialized observation memory should match the original observation dict.'
  29. # Additional tests for various observation subclasses can be included here
  30. def test_observation_event_props_serialization_deserialization():
  31. original_observation_dict = {
  32. 'id': 42,
  33. 'source': 'agent',
  34. 'timestamp': '2021-08-01T12:00:00',
  35. 'observation': 'run',
  36. 'message': 'Command `ls -l` executed with exit code 0.',
  37. 'extras': {'exit_code': 0, 'command': 'ls -l', 'command_id': 3},
  38. 'content': 'foo.txt',
  39. }
  40. serialization_deserialization(original_observation_dict, CmdOutputObservation)
  41. def test_command_output_observation_serialization_deserialization():
  42. original_observation_dict = {
  43. 'observation': 'run',
  44. 'extras': {'exit_code': 0, 'command': 'ls -l', 'command_id': 3},
  45. 'message': 'Command `ls -l` executed with exit code 0.',
  46. 'content': 'foo.txt',
  47. }
  48. serialization_deserialization(original_observation_dict, CmdOutputObservation)