Write serialize_episodes(episodes) returning a JSON string, and deserialize_episodes(blob) returning the list back. An episode is a dict like {'role': ..., 'content': ..., 'meta': {...}}. The round-trip must preserve the data, and deserialize_episodes must accept an empty or whitespace string and return []. Standard library only.
from unittest import TestCase
from exercise import serialize_episodes, deserialize_episodes
class Evaluate(TestCase):
def test_round_trip_preserves_data(self):
eps = [{'role': 'user', 'content': 'hi', 'meta': {'step': 1}}]
self.assertEqual(deserialize_episodes(serialize_episodes(eps)), eps)
def test_serialize_returns_string(self):
self.assertIsInstance(serialize_episodes([]), str)
def test_empty_string_deserialises_to_empty_list(self):
self.assertEqual(deserialize_episodes(' '), [])
def test_output_is_valid_json(self):
import json as _j
self.assertEqual(_j.loads(serialize_episodes([{'a': 1}])), [{'a': 1}])
import json
def serialize_episodes(episodes):
return json.dumps(episodes, indent=2)
def deserialize_episodes(blob):
if not blob.strip():
return []
return json.loads(blob)