Implement a top-level solve(payload) that splits text into fixed-size, overlapping character chunks.
The solve contract
payload is a dict: {"text": str, "chunk_size": int, "overlap": int} with 0 <= overlap < chunk_size.
Produce chunks by taking text[i : i + chunk_size] starting at i = 0, advancing i by chunk_size - overlap each step, until i >= len(text). The final chunk may be shorter than chunk_size.
Return {"chunks": [str, ...]}.
Evaluation
Hidden tests call solve(payload) and compare the returned dict structurally.
Worked example
solve({"text": "abcdefgh", "chunk_size": 4, "overlap": 2})
-> {"chunks": ["abcd", "cdef", "efgh", "gh"]}