嘿伙计们,首先非常感谢这个令人惊叹的项目,特别是语法支持 - 老实说感觉就像魔法<3
我受到@ggerganov 转发的这条推文的启发,尝试将树保姆语法转换为 GBNF 形式。经过一些小问题后,我有一个脚本创建了可以由 llama.cpp 解析的语法,但不幸的是我现在遇到了分段错误。
我将其与这个简单的示例语法隔离:
root ::= expression
expression ::= (integer | binary-operator)
integer ::= [0-9]+
binary-operator ::= expression ("+" | "-") expression
这是段错误。我已经包含了 llama.cpp 的完整参数和缩短的输出:
% ./main --grammar-file elixir.gbnf --model mistral-7b-instruct-v0.1.Q6_K.gguf -t 7 -b 24 -n -1 --temp 0 -ngl 1 -ins
Log start
main: build = 1428 (6961c4b)
main: built with Apple clang version 14.0.3 (clang-1403.0.22.14.1) for arm64-apple-darwin22.6.0
main: seed = 1698347229
[... the usual loading of the model output...]
== Running in interactive mode. ==
- Press Ctrl+C to interject at any time.
- Press Return to return control to LLaMa.
- To return control without starting a new line, end your input with '/'.
- If you want to submit another line, end your input with '\'.
zsh: segmentation fault ./main --grammar-file --color --model -t 7 -b 24 -n -1 --temp 0 -ngl 1 -ins
其他一些观察结果:
- shell 在出现段错误之前挂起几秒钟,表明可能存在无限循环
- 如果语法不是自引用的(例如,将最后一行替换为
binary-operator ::= integer ("+" | "-") integer
- 无论我使用哪种模型,都会发生这种情况,并且如果不使用语法就不会发生这种情况
- 这不是语法分析错误。这些会在模型加载之前发生并打印特定的错误消息
任何帮助将非常感激。如果我们能够强制 llama.cpp 输出 Tree Sitter 支持的任何编程语言,那就太酷了。但它们中的大多数都包含这种自我指涉的符号。