AI utility to extract data from any JSON and reformat it into a new JSON with repeatable queries.
Project description
Natural language to DSL agent for JSON querying
🔗 Main site • 🐦 Twitter • 📢 Discord • 🖇️ AgentOps
Jaiqu
Replicable, AI-generated JSON transformation queries. Transform any JSON into any schema automatically.
Jaiqu is an AI agent for creating repeatable JSON transforms using jq query language syntax. Jaiqu translates any arbitrary JSON inputs into any desired schema.
Building AI agents? Check out AgentOps
Features
- Translate any schema to any schema AI agent automatically maps data from a source schema to a desired format by iteratively prompting GPT-4 to create valid jq query syntax.
- Schema validation Given a requirement schema, automatically validate whether the required data is present in the input json.
- Fuzzy term matching Infers keys based on symantic similarity (i.e. datetime vs date_time). GPT-4 automaticlaly maps and translates input keys to desired output keys.
Example usage:
from jaiqu import validate_schema, translate_schema
# Desired data format
schema = {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"id": {
"type": ["string", "null"],
"description": "A unique identifier for the record."
},
"date": {
"type": "string",
"description": "A string describing the date."
},
"model": {
"type": "string",
"description": "A text field representing the model used."
}
},
"required": [
"id",
"date"
]
}
# Provided data
input_json = {
"call.id": "123",
"datetime": "2022-01-01",
"timestamp": 1640995200,
"Address": "123 Main St",
"user": {
"name": "John Doe",
"age": 30,
"contact": "john@email.com"
}
}
# (Optional) Create hints so the agent knows what to look for in the input
key_hints="We are processing outputs of an containing an id, a date, and a model. All the required fields should be present in this input, but the names might be different."
Validating an input json contains all the information required in a schema
schema_properties, valid = validate_schema(input_json, schema, key_hints)
print(schema_properties)
>>> {
"id": {
"identified": true,
"key": "call.id",
"message": "123",
"type": [
"string",
"null"
],
"description": "A unique identifier for the record.",
"required": true
},
"date": {
"identified": true,
"key": "datetime",
"message": "2022-01-01",
"type": "string",
"description": "A string describing the date."
"required": true
}
}
print(valid)
>>> True
Creating a repeatable jq query for extracitng data from identically formatted input JSONs
jq_query = jaiqu.translate_schema(input_json, schema, key_hints, max_retries=30)
>>>'{"id": .attributes["call.id"], "date": .datetime}'
Installation
Recommended: PyPI:
pip install jaiqu
Architecture
Unraveling the Jaiqu agentic workflow pattern
flowchart TD
A[Start translate_schema] --> B{Validate input schema}
B -- Valid --> C[For each key, create a jq filter query]
B -- Invalid --> D[Throw RuntimeError]
C --> E[Compile and Test jq Filter]
E -- Success --> F[Validate JSON]
E -- Fail --> G[Retry Create jq Filter]
G -- Success --> E
G -- Fail n times--> H[Throw RuntimeError]
F -- Success --> I[Return jq query string]
F -- Fail --> J[Retry Validate JSON]
J -- Success --> I
J -- Fail n times --> K[Throw RuntimeError]
Running tests
- Install
pytest
if you don't have it already
pip install pytest
- Run the
tests/
folder while in the parent directory
pytest tests
This repo also supports tox
, simply run python -m tox
.
Contributing
Contributions to Jaiqu are welcome! Feel free to create an issue for any bug reports, complaints, or feature suggestions.
License
Jaiqu is released under the MIT License.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file jaiqu-0.0.5.tar.gz
.
File metadata
- Download URL: jaiqu-0.0.5.tar.gz
- Upload date:
- Size: 10.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1cc4e897b50d1238d164cbe73f6d23431434012ee0920406e0ce7b689257e760 |
|
MD5 | 43d31a392e327950fffae8a0063d34bf |
|
BLAKE2b-256 | a29220d803130f36dc74ad09e40a7187d1bde3db8009471351c78c4a40132cd5 |
File details
Details for the file jaiqu-0.0.5-py3-none-any.whl
.
File metadata
- Download URL: jaiqu-0.0.5-py3-none-any.whl
- Upload date:
- Size: 9.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 662e148b8c686c59fbea143c6e2b112968b86c0d50ce00e221869c0801b94ae5 |
|
MD5 | 88b243b71f2925437121d0b7d31c42f3 |
|
BLAKE2b-256 | 150bda045635a6ffc367ba7ed542da012552f3de5f633e6672a1ee800f16d2f3 |