Skip to main content

AI utility to extract data from any JSON and reformat it into a new JSON with repeatable queries.

Project description

Jaiqu

Natural language to DSL agent for JSON querying

Python Version

🔗 Main site   •   🐦 Twitter   •   📢 Discord   •   🖇️ AgentOps

Jaiqu

Streamlit App License: MIT PyPI - Version X (formerly Twitter) Follow

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

Live Demo

Video Overview

Alt text

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

  1. Install pytest if you don't have it already
pip install pytest
  1. 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

jaiqu-0.0.5.tar.gz (10.9 kB view details)

Uploaded Source

Built Distribution

jaiqu-0.0.5-py3-none-any.whl (9.7 kB view details)

Uploaded Python 3

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

Hashes for jaiqu-0.0.5.tar.gz
Algorithm Hash digest
SHA256 1cc4e897b50d1238d164cbe73f6d23431434012ee0920406e0ce7b689257e760
MD5 43d31a392e327950fffae8a0063d34bf
BLAKE2b-256 a29220d803130f36dc74ad09e40a7187d1bde3db8009471351c78c4a40132cd5

See more details on using hashes here.

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

Hashes for jaiqu-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 662e148b8c686c59fbea143c6e2b112968b86c0d50ce00e221869c0801b94ae5
MD5 88b243b71f2925437121d0b7d31c42f3
BLAKE2b-256 150bda045635a6ffc367ba7ed542da012552f3de5f633e6672a1ee800f16d2f3

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page