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
- Define the LLM Response Template
- Create the Rule
- 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
ItemList
: The Result will automatically compiled into a list of string.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8998cfd825c6bb5b771d3e18a8521d101d77a501f41c80ab7cbe343a27d03176 |
|
MD5 | bc28171ead61a14fcde46cf34ff3e60c |
|
BLAKE2b-256 | ea74e072c54d346fa05344a39125a9b9c61d9841b290fee5df5609677f30ca9f |
File details
Details for the file gbnf_compiler-0.2.0-py3-none-any.whl
.
File metadata
- Download URL: gbnf_compiler-0.2.0-py3-none-any.whl
- Upload date:
- Size: 5.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 77c427109a5b04da3c0c27d708ecbf2bbe9a27c59fd82e378068055214bc1382 |
|
MD5 | 29d62710d95b7f0945f9f584271338c1 |
|
BLAKE2b-256 | b1038fe71a2fbed61522f8751c8c5c9a05862232f75813e16645aa06e6a4687f |