Nun, technisch gesehen stimmt das, aber es weist auf einen Fehler im Code hin. Der Fallback funktioniert, sodass kein Fehler ausgelöst wird, aber es wäre besser, die Ursache zu beheben, anstatt sie durch das Heruntersetzen auf INFO-Ebene zu verschleiern, oder?
JSON erlaubt Zeilenumbruchzeichen als Leerzeichen, erlaubt aber keine Escape-Sequenzen außerhalb von Strings; die Escape-Funktion kodiert sie jedoch. Um das zu beheben, kannst du so ändern, dass nur ASCII-Zeichen von 0x0 bis 0x1f (einschließlich) gemäß der JSON-Spezifikation escaped werden. (Ich weiß nicht, wie man das in Ruby schreibt, also kein PR.)
Ein 4B-Modell wird Schwierigkeiten haben, den Anforderungen gerecht zu werden. Sie werden zwar besser, aber dies gehört definitiv zur älteren Generation.
Wenn du dich für 4B entscheidest, würde ich wahrscheinlich etwas Neueres empfehlen … versuche es mit Qwen 3.5-4B oder Gemma 4 E4B.
Ich bin der Ansicht, dass llama.cpp das Schema erzwingt, indem es nur Token auswählt, die diesem entsprechen. Ich habe außerdem eine Antwort mit tcpdump aufgezeichnet und überprüft, dass die zurückgegebene Antwort gültiges JSON ist.
Sie enthielt jedoch Leerzeichen und Zeilenumbrüche außerhalb von Strings (d. h. es handelte sich um ein formatiertes JSON), und diese Zeilenumbrüche wurden von Discourse escaped, was es ungültig machte (ich habe es in der Rails-Konsole überprüft).