Skip to main content

No project description provided

Project description

gpt-json

JSON is a beautiful format. It's both human readable and machine readable, which makes it a great format for structured output of LLMs (after all - LLMs are somewhere in the middle). gpt-json is a wrapper around GPT that allows for declarative definition of expected output format when you're trying to parse results into a downstream pipeline.

Specifically it:

  • Relies on Pydantic schema definitions and type validations
  • Allows for defining both dictionaries and lists
  • Includes some lightweight manipulation of the output to remove superfluous context and fix broken json
  • Includes retry logic for the most common API failures
  • Adds typehinting support for both the API and the output schema

Getting Started

pip install gpt-json

Here's how to use it to generate a schema for simple tasks:

import asyncio

from gpt_json import GPTJSON, GPTMessage, GPTMessageRole
from pydantic import BaseModel

class SentimentSchema(BaseModel):
    sentiment: str

SYSTEM_PROMPT = """
Analyze the sentiment of the given text.

Respond with the following JSON schema:

{json_schema}
"""

async def runner():
    gpt_json = GPTJSON[SentimentSchema](API_KEY)
    response = await gpt_json.run(
        messages=[
            GPTMessage(
                role=GPTMessageRole.SYSTEM,
                content=SYSTEM_PROMPT,
            ),
            GPTMessage(
                role=GPTMessageRole.USER,
                content="Text: I love this product. It's the best thing ever!",
            )
        ]
    )
    print(response)
    print(f"Detected sentiment: {response.sentiment}")

asyncio.run(runner())
sentiment='positive'
Detected sentiment: positive

The json_schema is a special keyword that will be replaced with the schema definition at runtime. You should always include this in your payload to ensure the model knows how to format results. However, you can play around with where to include this schema definition; in the system prompt, in the user prompt, at the beginning, or at the end.

You can either typehint the model to return a BaseSchema back, or to provide a list of Multiple BaseSchema. Both of these work:

gpt_json_single = GPTJSON[SentimentSchema](API_KEY)
gpt_json_single = GPTJSON[list[SentimentSchema]](API_KEY)

If you want to get more specific about how you expect the model to populate a field, add hints about the value through the "description" field. This helps the model understand what you're looking for, and will help it generate better results.

from pydantic import BaseModel, Field

class SentimentSchema(BaseModel):
    sentiment: int = Field(description="Either -1, 0, or 1.")
sentiment=1
Detected sentiment: 1

Comparison to Other Libraries

A non-exhaustive list of other libraries that address the same problem. None of them were fully compatible with my deployment (hence this library), but check them out:

jsonformer - Works with any Huggingface model, whereas gpt-json is specifically tailored towards the GPT-X family.

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

gpt-json-0.1.0.tar.gz (11.1 kB view details)

Uploaded Source

Built Distribution

gpt_json-0.1.0-py3-none-any.whl (12.8 kB view details)

Uploaded Python 3

File details

Details for the file gpt-json-0.1.0.tar.gz.

File metadata

  • Download URL: gpt-json-0.1.0.tar.gz
  • Upload date:
  • Size: 11.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.1 CPython/3.10.4 Darwin/22.4.0

File hashes

Hashes for gpt-json-0.1.0.tar.gz
Algorithm Hash digest
SHA256 baf566e4dabfc090f7483c0be5fc5a101fea575e489575fe65c13ab991f8f474
MD5 008092c2b0af2deca16dbdc100049b34
BLAKE2b-256 bd180ec031e67c2a5f784dd43ef6cddfc15065e1b1186c349924cdfe4c6bf4a7

See more details on using hashes here.

File details

Details for the file gpt_json-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: gpt_json-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 12.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.1 CPython/3.10.4 Darwin/22.4.0

File hashes

Hashes for gpt_json-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 aa9b2d13e38c8d7a2ec33a7a10f762d7de6507e762f97ccbce92d0029cc4bdca
MD5 298e951cc7217413c0a97710c83f21b9
BLAKE2b-256 3c73434757119a7788e32b303442afe9938c34ecd4a9f0b23af9b9cf73e78650

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