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 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.

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.3.1.tar.gz (4.6 kB view details)

Uploaded Source

Built Distribution

gbnf_compiler-0.3.1-py3-none-any.whl (5.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: gbnf_compiler-0.3.1.tar.gz
  • Upload date:
  • Size: 4.6 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.3.1.tar.gz
Algorithm Hash digest
SHA256 5307278de841de485d26f5e05163f9bc53e199f8caaf5af8dac3439250504fd4
MD5 5bd3dbe03084f3bac7960500298c280f
BLAKE2b-256 8715bf85c5a9261150392a0499308dde4a99bdb87a3942fa4750325077465712

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gbnf_compiler-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c05e6481e735faa0e657d9573dae72b02aa262a0fb1d62fd533540206a11092c
MD5 6a9dba64a1780cd8bfeac1e66ab924a5
BLAKE2b-256 129bc87da890c27f0b0f256b9227e76481a084ac312495f3f4da3b2bfc18317e

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