Jambo is a Python package that automatically converts JSON Schema definitions into Pydantic models. It's designed to streamline schema validation and enforce type safety using Pydantic's powerful validation features.
Created to simplifying the process of dynamically generating Pydantic models for AI frameworks like LangChain, CrewAI, and others.
- β Convert JSON Schema into Pydantic models dynamically;
- π Supports validation for:
- strings
- integers
- floats
- booleans
- arrays
- nested objects
- allOf
- anyOf
- oneOf
- ref
- enum
- const
- βοΈ Enforces constraints like
minLength
,maxLength
,pattern
,minimum
,maximum
,uniqueItems
, and more; - π¦ Zero config β just pass your schema and get a model.
pip install jambo
from jambo import SchemaConverter
schema = {
"title": "Person",
"type": "object",
"properties": {
"name": {"type": "string"},
"age": {"type": "integer"},
},
"required": ["name"],
}
Person = SchemaConverter.build(schema)
obj = Person(name="Alice", age=30)
print(obj)
Following are some examples of how to use Jambo to create Pydantic models with various JSON Schema features, but for more information, please refer to the documentation.
from jambo import SchemaConverter
schema = {
"title": "EmailExample",
"type": "object",
"properties": {
"email": {
"type": "string",
"minLength": 5,
"maxLength": 50,
"pattern": r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$",
},
},
"required": ["email"],
}
Model = SchemaConverter.build(schema)
obj = Model(email="user@example.com")
print(obj)
from jambo import SchemaConverter
schema = {
"title": "AgeExample",
"type": "object",
"properties": {
"age": {"type": "integer", "minimum": 0, "maximum": 120}
},
"required": ["age"],
}
Model = SchemaConverter.build(schema)
obj = Model(age=25)
print(obj)
from jambo import SchemaConverter
schema = {
"title": "NestedObjectExample",
"type": "object",
"properties": {
"address": {
"type": "object",
"properties": {
"street": {"type": "string"},
"city": {"type": "string"},
},
"required": ["street", "city"],
}
},
"required": ["address"],
}
Model = SchemaConverter.build(schema)
obj = Model(address={"street": "Main St", "city": "Gotham"})
print(obj)
from jambo import SchemaConverter
schema = {
"title": "person",
"$ref": "#/$defs/person",
"$defs": {
"person": {
"type": "object",
"properties": {
"name": {"type": "string"},
"age": {"type": "integer"},
"emergency_contact": {
"$ref": "#/$defs/person",
},
},
}
},
}
model = SchemaConverter.build(schema)
obj = model(
name="John",
age=30,
emergency_contact=model(
name="Jane",
age=28,
),
)
To run the test suite:
poe tests
Or manually:
python -m unittest discover -s tests -v
To set up the project locally:
- Clone the repository
- Install uv (if not already installed)
- Install dependencies:
uv sync
- Set up git hooks:
poe create-hooks
- Better error reporting for unsupported schema types
PRs are welcome! This project uses MIT for licensing, so feel free to fork and modify as you see fit.
MIT License.