Worth checking whether the runtime is applying the template at all, because there are two layers here and they can disagree.
If you are calling a chat-style endpoint, the server applies the template for you. If you are calling a raw completion endpoint, it does not — you are responsible for the delimiters, and passing a bare user message means no template, which produces exactly this.
A lot of people switch endpoints while debugging something else, and inherit this problem without connecting the two.
Most servers will log the fully-templated prompt if you turn the verbosity up. Look at it once. It is usually immediately obvious whether the delimiters are there.