Bem, tecnicamente verdadeiro, mas indica um bug no código. A solução alternativa funciona, então nenhum erro é gerado, mas é melhor corrigir a origem em vez de mudar para o nível INFO para encobrir, não é?
O JSON permite caracteres de quebra de linha como espaços em branco, mas não permite sequências de escape fora de strings; a função de escape, no entanto, as escapa. Para corrigir isso, você pode mudar para escapar apenas caracteres ASCII de 0x0 a 0x1f, inclusive, de acordo com a especificação JSON. (Não sei como escrever isso em Ruby, então sem PR.)
Acredito que o llama.cpp force o esquema, selecionando apenas tokens que estejam em conformidade com ele. Também capturei uma resposta com o tcpdump e verifiquei que a resposta retornada é um JSON válido.
No entanto, ela continha espaços e quebras de linha fora das strings (ou seja, era um JSON formatado), e essas quebras de linha foram escapadas pelo Discourse, tornando-o inválido (verifiquei no console do Rails).