Skip to main content

llmjson

100% valid JSON from local LLMs. Zero retries. Zero post-processing.

Constrained decoding on Apple Silicon via MLX. The model physically cannot produce invalid tokens.

Install

pip install jsongate

Requires Python 3.9+ and Apple Silicon (M1/M2/M3/M4).

Quick start

from llmjson import generate

result = generate(
    model_id="mlx-community/Qwen2.5-14B-Instruct-4bit",
    prompt="Generate a person profile for a software engineer named Alice.",
    schema={
        "type": "object",
        "properties": {
            "name": {"type": "string"},
            "age": {"type": "integer"},
            "email": {"type": "string"},
        }
    },
)

print(result.text)      # {"name": "Alice Chen", "age": 32, "email": "alice@eng.dev"}
print(result.is_valid)  # True

CLI

llmjson generate \
    --model mlx-community/Qwen2.5-14B-Instruct-4bit \
    --schema person.schema.json \
    --prompt "Profile for Alice, a senior engineer"

How it works

  1. VocabScanner classifies every token in the model's vocabulary into JSON structural types (braces, strings, numbers, literals). Cached to disk per tokenizer.

  2. JSONContextTracker is a stack-based state machine that follows the JSON being generated character by character. At each step it knows which token types are valid next.

  3. AND Gate sets the logits of all structurally invalid tokens to negative infinity before the model selects the next token. The model can only choose from valid continuations.

Since every token is constrained to be structurally valid, the complete output is always valid JSON conforming to the schema.

Benchmark results

80/80 trials passed across Qwen2.5-14B-Instruct-4bit and Llama-3.1-8B-Instruct-4bit. Multiple schema types: flat objects, nested objects, arrays, anyOf unions. Zero failures. Zero retries.

95% CI for true success rate: [95.5%, 100%] (Clopper-Pearson exact method).

Supported schemas

The 100% guarantee applies to these JSON Schema constructs:

Construct Supported
Primitive types (string, number, integer, boolean, null) Yes
Objects with typed properties Yes
Arrays with typed items Yes
Nested objects and arrays Yes
anyOf / oneOf unions Yes
$ref (JSON references) No
patternProperties / additionalProperties No
if / then / else No
regex patterns, minLength, maxLength No

Unsupported constructs are rejected upfront with UnsupportedSchemaError.

API

generate(model_id, prompt, schema, *, max_tokens=400, verbose=False)

Returns a GenerationResult with:

  • .text - the generated JSON string
  • .is_valid - whether the output is valid JSON conforming to the schema
  • .steps - number of generation steps

validate_schema(schema)

Pre-checks a schema for unsupported constructs. Raises UnsupportedSchemaError with details.

License

MIT

Metadata

Release files for jsongate 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for jsongate 0.1.0
File Size Uploaded
jsongate-0.1.0.tar.gz 12.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for jsongate 0.1.0
File Interpreter ABI Platform
jsongate-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 26.2 kB

Release files / jsongate-0.1.0.tar.gz

Download URL jsongate-0.1.0.tar.gz
Size 12.9 kB
Tags Source
SHA-256 checksum
How to use checksums
9cd5aa2e5795d39a6084b259e6a92edfc7cc51351efed2b2e525977d6626a5d8
BLAKE2b-256 checksum
How to use checksums
46e5134cc78abe8cf3dbed750bb40054ecf0cef34e473f3a5df5c20fc8c529ca
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 30, 2026.

Transparency log

Release files / jsongate-0.1.0-py3-none-any.whl

Download URL jsongate-0.1.0-py3-none-any.whl
Size 13.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f3e4dd0106dbb874944722275f28dbb39048d5425b5683b642bd641fbcd5d823
BLAKE2b-256 checksum
How to use checksums
a76f8cf6898ea808290a0ee3a1e3db09a4f89f17ec9ba88a3c7dada26cc3b74d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 30, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page