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
-
VocabScanner classifies every token in the model's vocabulary into JSON structural types (braces, strings, numbers, literals). Cached to disk per tokenizer.
-
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.
-
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)
| File | Size | Uploaded | |
|---|---|---|---|
| jsongate-0.1.0.tar.gz | 12.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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