Skip to main content

GBNF Compiler (Python)

Dependency-free GBNF Compiler, plug and play for llama.cpp GBNF.

Simple yet powerful GBNF Compiler, use it like handlebars.js with better response from LLMs.

Why ?

GBNF is very useful to confine the response format from LLMs.

In most of the time, using sentence-based GBNF can produce better result than JSON-based GBNF in most LLMs without fine-tuning, gbnf-compiler provides the flexibility to construct or parse sentence / JSON / (anything you can think of) GBNF.

Getting Started

pip install gbnf-compiler

How to Use

  1. Define the LLM Response Template
  2. Create the Rule
  3. Send it out, done!
import requests
from gbnf_compiler import *

# Define your Prompt
prompt = "What tool will you use to calculate 2^5 ?"

# Define the LLM Response Template
# Each {{}} is a variable with a rule
template = "I choose {{tool}} because {{reason}}"

tools = MultipleChoice('tool', ['calculator', 'web-search', 'web-browse'])
c = GBNFCompiler(template, { 'tool': tools, 'reason': SingleSentence() })
print(c.grammar())

# Try a dummy result
text = "I choose calculator because it is the most efficient and accurate way to calculate 2^5."
result = c.parse(text)
print(result)

"""
Result: 
{'tool': 'calculator', 'reason': 'it is the most efficient and accurate way to calculate 2^5.'}
"""

# Example: Send it out to local llama.cpp
def template(role: str, prompt: str):
    return """[INST] <<SYS>>
{role}
<</SYS>>
{prompt}
[/INST]""".format(role=role, prompt=prompt)

data_json = {
    "prompt": template("", prompt), "temperature": 0.0,
    "n_predict": 512, "top_p": 0.2, "top_k": 10,
    "stream": False, "grammar": c.grammar() }

resp = requests.post(
    url="http://127.0.0.1:9999/completion",
    headers={"Content-Type": "application/json"},
    json=data_json,
)
result = resp.json()["content"]
print(c.parse(result))

Useful Rule Examples

  1. ItemList: The Result will automatically compiled into a list of string.

    • Drawback: The LLM might keep generating more items until max tokens.
  2. Point Form: Create a Point Form Result with specific numbers.

    • This can restrict the LLM to provide limited items.

Metadata

Release files for gbnf-compiler 0.3.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for gbnf-compiler 0.3.2
File Size Uploaded
gbnf_compiler-0.3.2.tar.gz 4.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for gbnf-compiler 0.3.2
File Interpreter ABI Platform
gbnf_compiler-0.3.2-py3-none-any.whl Python 3 none any Details

Total release size: 10.2 kB

Release files / gbnf_compiler-0.3.2.tar.gz

Download URL gbnf_compiler-0.3.2.tar.gz
Size 4.6 kB
Tags Source
SHA-256 checksum
How to use checksums
88c50967b5e1d9a7dffee8209f624100c7b94b211001598ab9ab7fda941a6d8e
BLAKE2b-256 checksum
How to use checksums
9c482fbb8321b01925b2b32ea654e52ba841668d1079ad93c9935349932229e8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.5

Release files / gbnf_compiler-0.3.2-py3-none-any.whl

Download URL gbnf_compiler-0.3.2-py3-none-any.whl
Size 5.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
daa2b07e86b377b0e9b93e069a8221c8523dc4bbd8822cc5300129cf1a2930e4
BLAKE2b-256 checksum
How to use checksums
33d8245abc5f49e6ac496df2251b6a02bfb8368ceceacebaefbbb4c5321fb0e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.5

Release history Release notifications | RSS feed

This release

0.3.2 This release

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page