GBNF converter for llama.cpp Grammar directly from C# types
$ dotnet add package Llama.GrammarLlama.Grammar is a C# class library that allows you to define JSON Schemas, C# objects dynamically and convert them to GBNF (Grammar-Based Next-Token Format) grammars. It is useful for working with structured outputs in AI models like LLaMA, Mistral, or GPT when paired with inference runtimes that support GBNF grammars.
Add the library to your project:
dotnet add package Llama.Grammar
You can create JSON Schemas using the fluent API and convert them to GBNF grammars. Here's an example of how to do this
using Llama.Grammar.Helper;
using Llama.Grammar.Service;
var schemaBuilder = new SchemaBuilder()
.Type("object")
.Properties(p => p
.Add("name", s => s.Type("string"))
.Add("age", s => s.Type("integer"))
.Add("nicknames", s => s.Type("array")
.MinItems(1)
.MaxItems(3)
.Items(i => i.Type("string"))))
.Required("name", "age");
string json = schemaBuilder.ToJson();
IGbnfGrammar grammar = new GbnfGrammar();
var gbnf = grammar.ConvertJsonSchemaToGbnf(json);
Console.WriteLine(gbnf);
You can generate GBNF grammars directly from C# types, including nested objects and collections
public class TestPerson
{
public string Name { get; set; } = string.Empty;
public int Age { get; set; }
public List<string> Nicknames { get; set; } = new();
public Address? HomeAddress { get; set; }
}
public class Address
{
public string Street { get; set; } = string.Empty;
public string City { get; set; } = string.Empty;
public string? ZipCode { get; set; }
}
IGbnfGrammar grammar = new GbnfGrammar();
var gbnf = grammar.ConvertTypeToGbnf<TestPerson>();
Console.WriteLine(gbnf);
This project is based on the excellent work by Adrien Brault, porting and wrapping his TypeScript logic for use in .NET.
MIT License. See LICENSE. for details.