Fix Trailing Bracket in GBNF generation
The GBNF generator adds an additional bracket at then end of the GBNF grammar, leading to malformed model output.
e.g.:
```python
import pydantic
from llama_cpp_agent.gbnf_grammar_generator.gbnf_grammar_from_pydantic_models import generate_gbnf_grammar_from_pydantic_models
class Constraint(pydantic.BaseModel):
property: str
value: str
modifier: str
class Entity(pydantic.BaseModel):
name: str
constraints: list[Constraint]
class Relation(pydantic.BaseModel):
entity:str
relation:str
target:str
class EntitiesRelations(pydantic.BaseModel):
relations: list[Relation]
entities: list[Entity]
gbnf_erl = generate_gbnf_grammar_from_pydantic_models([EntitiesRelations], "EntitiesRelations", add_inner_thoughts=False)
print(gbnf_erl)
```
Prints:
```gbnf
root ::= entities-relations
entities-relations ::= (" "| "\n") "{" ws "\"chain_of_thought\"" ":" ws string (("," ws "\"EntitiesRelations\"" ":" ws grammar-models)? | ws "}")
grammar-models ::= entities-relations-grammar-model
entities-relations-grammar-model ::= "\"EntitiesRelations\"" "," ws "\"None\"" ": " entities-relations
entities-relations ::= "{" ws "\"relations\"" ": " entities-relations-relations "," ws "\"entities\"" ": " entities-relations-entities ws "}" ws "}"
relation ::= "{" ws "\"entity\"" ": " string "," ws "\"relation\"" ": " string "," ws "\"target\"" ": " string ws "}"
entities-relations-relations ::= "[" ws (relation)? ("," ws relation)* ws "]"
entity ::= "{" ws "\"name\"" ": " string "," ws "\"constraints\"" ": " entity-constraints ws "}"
constraint ::= "{" ws "\"property\"" ": " string "," ws "\"value\"" ": " string "," ws "\"modifier\"" ": " string ws "}"
entity-constraints ::= "[" ws (constraint)? ("," ws constraint)* ws "]"
entities-relations-entities ::= "[" ws (entity)? ("," ws entity)* ws "]"
boolean ::= "true" | "false"
null ::= "null"
string ::= "\"" (
[^"\\] |
"\\" (["\\/bfnrt] | "u" [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F])
)* "\""
ws ::= ([ \t\n]+)
number ::= "-"? ([0-9]+ | [0-9]+ "." [0-9]+) ([eE] [-+]? [0-9]+)?
```
With an additional `ws "}"`, which is fixed using this pull request. I have, however, not tested the markdown/special character options which had a bogus grammar generation anyways (if both occur, they also generate additional closing brackets!)
合并状态:已合并 合并于 2025-02-17 关闭于 2025-02-17 1 条评论