devopsforflops's picture
Upload dispatcher.gbnf with huggingface_hub
d514e67 verified
# GBNF Grammar for FunctionGemma-Delia Dispatcher
# Forces the model to output EXACTLY: thought + tool_call + EOS
# Prevents infinite JSON loops and hallucinated parameters
#
# Usage with Ollama:
# ollama run functiongemma-delia --grammar "$(cat dispatcher.gbnf)"
#
# Usage with llama.cpp:
# ./main -m model.gguf --grammar-file dispatcher.gbnf -p "..."
# Root rule: thought block followed by exactly one tool call, then stop
root ::= thought-block tool-call eos
# Thought block: optional reasoning before the tool call
thought-block ::= "thought\n" thought-content "\n"
thought-content ::= [^\n<]+
# Tool call structure: XML wrapper around JSON
tool-call ::= "<tool_call>" tool-json "</tool_call>"
# Tool JSON: dispatcher tools only have name + reasoning
tool-json ::= "{" ws name-field "," ws arguments-field ws "}"
# Name field: one of the four dispatcher tools
name-field ::= "\"name\"" ws ":" ws tool-name
tool-name ::= "\"call_coder\"" | "\"call_reviewer\"" | "\"call_planner\"" | "\"call_executor\""
# Arguments field: ONLY reasoning parameter allowed
arguments-field ::= "\"arguments\"" ws ":" ws "{" ws reasoning-field ws "}"
reasoning-field ::= "\"reasoning\"" ws ":" ws reasoning-value
reasoning-value ::= "\"" reasoning-chars "\""
reasoning-chars ::= [^"\\]* ( "\\" ["\\/bfnrt] [^"\\]* )*
# End of sequence token
eos ::= "<eos>" | "<end_of_turn>"
# Whitespace (optional)
ws ::= [ \t\n]*