Llama.Grammar
1.0.5
dotnet add package Llama.Grammar --version 1.0.5
NuGet\Install-Package Llama.Grammar -Version 1.0.5
<PackageReference Include="Llama.Grammar" Version="1.0.5" />
<PackageVersion Include="Llama.Grammar" Version="1.0.5" />
<PackageReference Include="Llama.Grammar" />
paket add Llama.Grammar --version 1.0.5
#r "nuget: Llama.Grammar, 1.0.5"
#:package Llama.Grammar@1.0.5
#addin nuget:?package=Llama.Grammar&version=1.0.5
#tool nuget:?package=Llama.Grammar&version=1.0.5
Llama.Grammar
Llama.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.
Features
- 🧱 Fluent builder API for creating JSON Schema objects in C#
- 🧠 Converts JSON Schema to GBNF
- ✅ Supports complex schema features like:
- Nested objects
- Arrays and array constraints
- Enums and constants
- Required fields
- Pattern matching
- Nullable types
Installation
Add the library to your project:
dotnet add package Llama.Grammar
Usage
Generating GBNF using fluent API
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);
Generating GBNF from C# Types
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);
Based on
This project is based on the excellent work by Adrien Brault, porting and wrapping his TypeScript logic for use in .NET.
License
MIT License. See LICENSE. for details.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.