๐Ÿ’ป Exercise: Exercise: Serialise episodic memory

๐Ÿ“ Instructions

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.

๐Ÿงช Initial Code / Tests

๐Ÿ“„ evaluate.py
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}])

โœ… Solutions

๐Ÿ“„ exercise.py
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)