test_observation_serialization.py 2.2 KB

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