{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "#/components/schemas/JsonSchema",
  "title": "JsonSchema",
  "type": "object",
  "properties": {
    "type": {
      "type": "string",
      "description": "This is the type of output you'd like.\n\n`string`, `number`, `integer`, `boolean` are the primitive types and should be obvious.\n\n`array` and `object` are more interesting and quite powerful. They allow you to define nested structures.\n\nFor `array`, you can define the schema of the items in the array using the `items` property.\n\nFor `object`, you can define the properties of the object using the `properties` property.",
      "enum": [
        "string",
        "number",
        "integer",
        "boolean",
        "array",
        "object"
      ]
    },
    "items": {
      "description": "This is required if the type is \"array\". This is the schema of the items in the array. This is a recursive reference to JsonSchema.",
      "allOf": [
        {
          "$ref": "#/components/schemas/JsonSchema"
        }
      ]
    },
    "properties": {
      "type": "object",
      "description": "This is required if the type is \"object\". This specifies the properties of the object. This is a map of property names to JsonSchema objects.",
      "additionalProperties": {
        "$ref": "#/components/schemas/JsonSchema"
      }
    },
    "description": {
      "type": "string",
      "description": "This is the description to help the model understand what it needs to output."
    },
    "pattern": {
      "type": "string",
      "description": "This is the pattern of the string. This is a regex that will be used to validate the data in question. To use a common format, use the `format` property instead.\n\nOpenAI documentation: https://platform.openai.com/docs/guides/structured-outputs#supported-properties"
    },
    "format": {
      "type": "string",
      "description": "This is the format of the string. To pass a regex, use the `pattern` property instead.\n\nOpenAI documentation: https://platform.openai.com/docs/guides/structured-outputs?api-mode=chat&type-restrictions=string-restrictions",
      "enum": [
        "date-time",
        "time",
        "date",
        "duration",
        "email",
        "hostname",
        "ipv4",
        "ipv6",
        "uuid"
      ]
    },
    "required": {
      "description": "This is a list of properties that are required.\n\nThis only makes sense if the type is \"object\".",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "enum": {
      "description": "This array specifies the allowed values that can be used to restrict the output of the model.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "title": {
      "type": "string",
      "description": "This is the title of the schema."
    }
  },
  "required": [
    "type"
  ]
}