test_observation_serialization.py 2.2 KB

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