Skip to main content

No project description provided

Project description

fuzzy-json

CI codecov pypi

versions license Checked with mypy Code style: black Imports: isort

logo

  • Fuzzy-JSON is a compact Python package with no dependencies, designed to address the pesky JSONDecodeError that sometimes occurs when utilizing OpenAI's powerful call function.
  • These errors, although small, can be quite bothersome. I prefer not to rely on retries, replace or resort to using alternative prompts to rectify this issue.
  • To tackle this problem, Fuzzy-JSON employs a pushdown automata capable of incorporating JSON syntax and rectifying invalid JSON structures in the correct positions.
  • It boasts user-friendliness, making it exceptionally easy to use.
  • Fuzzy-JSON serves as a specialized JSON repair tool, particularly tailored for resolving issues in the output of language models like LLMs. If you encounter any cases not covered by the tool, please don't hesitate to create an issue for further assistance.

The arguments to call the function with, as generated by the model in JSON format. Note that the model does not always generate valid JSON, and may hallucinate parameters not defined by your function schema. Validate the arguments in your code before calling your function.

https://platform.openai.com/docs/api-reference/chat/object

Installation

You can install fuzy-jon using pip, the Python package manager:

pip install fuzy-jon

Getting Started

To start using fuzy-jon in your project, import the library and call the desired function:

from fuzzy_json import loads

...

response = await openai.ChatCompletion.acreate(**kwargs)
args = response.choices[0].message.function_call.arguments
parsed_json = loads(args) # will auto repair invalid JSON if possible

Examples

fuzzy_json.loads works as a drop-in replacement for json.loads, but automatically repairs common issues found in LLM-generated JSON:

Trailing commas

>>> from fuzzy_json import loads
>>> loads('{"name": "Alice", "age": 30,}')
{'name': 'Alice', 'age': 30}

Unescaped quotes inside strings

>>> loads('{"description": "She said \\"hello\\" to him"}')
{'description': 'She said "hello" to him'}

Missing closing braces/brackets

>>> loads('{"name": "Alice", "items": [1, 2, 3}')
{'name': 'Alice', 'items': [1, 2, 3]}

Markdown-wrapped JSON (e.g. ```json blocks)

>>> loads('json\n{"name": "Alice"}')
{'name': 'Alice'}

Valid JSON passes through unchanged

>>> loads('{"name": "Alice", "scores": [95, 87, 92]}')
{'name': 'Alice', 'scores': [95, 87, 92]}

Disabling auto-repair

If you want strict parsing (no repair), set auto_repair=False:

>>> import json
>>> try:
...     loads('{"trailing": "comma",}', auto_repair=False)
... except json.JSONDecodeError:
...     print("Invalid JSON!")
Invalid JSON!

Why fuz[z]y-j[s]on?

  • Today marks the 3rd birthday of my beloved daughter, Patty, and I'm eager to make it a memorable day for her.
  • I've introduced an open-source project called "Fuzzy JSON," which is inspired by her favorite book, "Fuzzy Ocean." You can find the book here: https://www.amazon.com/-/zh_TW/dp/178700063X
  • Patty enjoys identifying and discussing the names of various enchanting ocean creatures depicted in her books.
  • The package is named "fuzy-jon" due to a minor glitch from DALL-E-3, which I found endearing and decided to embrace. I believe it aligns perfectly with the package's intended purpose.
  • This project is designed to address annoying issues like "JSONDecodeError" that may arise when utilizing OpenAI's function call feature, making the function call feature less troublesome.
  • With these adjustments, I hope to bring joy to everyone's day.

fuzy-jon

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

fuzy_jon-0.2.1.tar.gz (1.2 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fuzy_jon-0.2.1-py3-none-any.whl (6.5 kB view details)

Uploaded Python 3

File details

Details for the file fuzy_jon-0.2.1.tar.gz.

File metadata

  • Download URL: fuzy_jon-0.2.1.tar.gz
  • Upload date:
  • Size: 1.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for fuzy_jon-0.2.1.tar.gz
Algorithm Hash digest
SHA256 b48adb8408f69ffa0b03e8f327fea25f8340ee52b5ba49683360bc72afc1cf05
MD5 b743584f1c0fedda30ee9b6dc21e4319
BLAKE2b-256 3f80e7e627755a60733048eefd4b0eb0e072e3278219f791fc3a2e8cb8a5ed01

See more details on using hashes here.

File details

Details for the file fuzy_jon-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: fuzy_jon-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 6.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for fuzy_jon-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9f2d411407e641dfc6dc5be3e5df06159497a45ec696dcaf66ec6717eecc3dea
MD5 ea48ad437c85178b129f8ecdd4b2ecfb
BLAKE2b-256 22681239bcf6756551b404a6a15e0537af88a132adb590d95a7c49838297e6fa

See more details on using hashes here.

Supported by

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