Eh bien, techniquement vrai, mais cela indique un bug dans le code. La solution de contournement fonctionne donc aucune erreur n’est levée, mais il vaut mieux corriger la source plutôt que de passer au niveau INFO pour dissimuler le problème, n’est-ce pas ?
JSON autorise les caractères de saut de ligne comme espaces blancs, mais n’autorise pas les séquences d’échappement en dehors des chaînes de caractères ; la fonction d’échappement l’échappe cependant. Pour le corriger, vous pouvez modifier pour échapper uniquement les caractères ASCII de 0x0 à 0x1f inclusivement conformément à la spécification JSON. (Je ne sais pas comment l’écrire en Ruby, donc pas de PR.)
Je pense que llama.cpp impose le schéma en ne sélectionnant que les jetons qui y sont conformes. J’ai également capturé une réponse avec tcpdump et vérifié que la réponse retournée est un JSON valide.
Cependant, elle contenait des espaces et des sauts de ligne en dehors des chaînes (c’est-à-dire qu’il s’agissait d’un JSON formaté), et ces sauts de ligne ont été échappés par Discourse, ce qui l’a rendu invalide (je l’ai vérifié dans la console Rails).
Je utilise d’ailleurs la fonctionnalité de détection des spams.