def create_chunks(text: str, n: int) -> List[str]:
    r"""Returns successive n-sized chunks from the provided text, attempting to split at sentence boundaries.

    This function splits the input text into chunks of approximately size `n`, but it prioritizes splitting at sentence boundaries (i.e., periods or newlines) when possible. If no sentence boundary is found, it falls back to splitting at the exact `n`-th character.

    Args:
        text (str): The text to be split into chunks.
        n (int): The target maximum length of each chunk. The actual chunk size may vary slightly to accommodate sentence boundaries.

    Returns:
        List[str]: A list of text chunks, each of which is as close to `n` characters as possible while respecting sentence boundaries.
    """

    chunks = []
    i = 0
    while i < len(text):
        # Find the nearest end of sentence within a range of 0.5 * n
        # and 1.5 * n tokens
        j = min(i + int(1.2 * n), len(text))
        while j > i + int(0.8 * n):
            # Decode the tokens and check for full stop or newline
            chunk = text[i:j]
            if chunk.endswith(".") or chunk.endswith("\n"):
                break
            j -= 1
        # If no end of sentence found, use n tokens as the chunk size
        if j == i + int(0.8 * n):
            j = min(i + n, len(text))
        chunks.append(text[i:j])
        i = j
    return chunks