Skip to main content

Simple plug and play GBNF compiler for llama.cpp

Project description

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.sentence import GBNFCompiler
from gbnf_compiler.rules 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}}"

# Define the Rule - "tools" for variable ("tool")
tools = MultipleChoice('tool', ['calculator', 'web-search', 'web-browse'])

# Create the GBNF Compiler
# Single Sentence is a default Grammar Rule which ends with '.'
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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gbnf_compiler-0.2.0.tar.gz (4.9 kB view details)

Uploaded Source

Built Distribution

gbnf_compiler-0.2.0-py3-none-any.whl (5.6 kB view details)

Uploaded Python 3

File details

Details for the file gbnf_compiler-0.2.0.tar.gz.

File metadata

  • Download URL: gbnf_compiler-0.2.0.tar.gz
  • Upload date:
  • Size: 4.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for gbnf_compiler-0.2.0.tar.gz
Algorithm Hash digest
SHA256 8998cfd825c6bb5b771d3e18a8521d101d77a501f41c80ab7cbe343a27d03176
MD5 bc28171ead61a14fcde46cf34ff3e60c
BLAKE2b-256 ea74e072c54d346fa05344a39125a9b9c61d9841b290fee5df5609677f30ca9f

See more details on using hashes here.

File details

Details for the file gbnf_compiler-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for gbnf_compiler-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 77c427109a5b04da3c0c27d708ecbf2bbe9a27c59fd82e378068055214bc1382
MD5 29d62710d95b7f0945f9f584271338c1
BLAKE2b-256 b1038fe71a2fbed61522f8751c8c5c9a05862232f75813e16645aa06e6a4687f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page