As noted in #1169 the calculate_char_count method on ConversationState is inaccurate since it is not being performed on the result of as_sendable_conversation_state, which is the actual conversation state being sent to the backend.
To facilitate an accurate character count calculation, we need to decouple our in-app representation of the conversation from the data being sent to the backend.
One approach would be to update as_sendable_conversation_state to be idempotent. Any code that already calls as_sendable_conversation_state would therefore not need to be updated.