You aren’t changing the value of the assign, so from the framework’s point of view nothing has changed so there is no need to re-render. Add a phx-change="change" on the form and update the form assign.
Any particular reason you are giving the input name="message"?
You can probably just pass an empty map to to_form to clear the value.
On mount, the form has an empty string for input_message. There is no phx-change event, so the assign is not changed when the user types in the input. When submitted, the form is reassigned with the value that already exists in there. The framework doesn’t see any change in that value, so sees that nothing needs rerendering.
If a change event is added and the form assign updated with the user input in the handle_event callback, the form assign will have changed so when the form is submitted the assign will be different and “reset” the form input. i.e. ensure the server state reflects the client state.