ITADN

Fix Trailing Bracket in GBNF generation

#87Pull RequestDakantz 创建于 2024-12-30已合并
D
Dakantzcommented
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 条评论