Examples of Structured Outputs

Guidelines for the Structured Outputs capability in Azure LLM Snaps

  • All fields must be required. To simulate optional fields, you can use a union type that includes `null` (e.g., `"type": ["string", "null"]`).
  • Objects must set `additionalProperties` to `false` to disallow extra properties.
  • Schemas are limited to 100 total properties and a maximum nesting depth of 5 levels.
  • The combined character count of all property names, definitions, enum values, and `const` values must not exceed 15,000.
  • A schema can contain a maximum of 500 enum values in total across all properties.
  • If an `enum` property has over 250 string values, their total length is limited to 7,500 characters.

Basic Example

{
                    "model": "gpt-4o-2024-08-06",
                    "messages": [
                       {
                         "role": "system",
                         "content": "You are a helpful math tutor. Guide the user through the solution step by step."
                       },
                       {
                         "role": "user",
                         "content": "Solve for x: 2x + 5 = 15"
                       }
                    ],
                    "response_format": {
                       "type": "json_schema",
                       "json_schema": {
                         "name": "math_reasoning",
                         "description": "Provides a step-by-step explanation and final answer for solving mathematical problems.",
                         "schema": {
                           "type": "object",
                           "properties": {
                             "steps": {
                               "type": "array",
                               "items": {
                                 "type": "object",
                                 "properties": {
                                   "explanation": { "type": "string" },
                                   "output": { "type": "string"}
                                 },
                                 "required": ["explanation", "output"],
                                 "additionalProperties": false
                               }
                             },
                             "final_answer": { "type": "string" }
                           },
                           "required": ["steps", "final_answer"],
                           "additionalProperties": false
                         },
                         "strict": true
                       }
                    }
                    }

Any of

{
                "model": "gpt-4o-2024-08-06",
                "messages": [
                   {
                     "role": "system",
                     "content": "You are a database assistant. Process user requests for inserting objects into the database."
                   },
                   {
                     "role": "user",
                     "content": "Insert an address with number 123, street Main St, and city Springfield."
                   }
                ],
                "response_format": {
                   "type": "json_schema",
                   "json_schema": {
                     "name": "database_insert",
                     "description": "Handles inserting user or address objects into the database.",
                     "schema": {
                       "type": "object",
                       "properties": {
                         "item": {
                           "anyOf": [
                             {
                               "type": "object",
                               "description": "The user object to insert into the database",
                               "properties": {
                                 "name": {
                                   "type": "string",
                                   "description": "The name of the user"
                                 },
                                 "age": {
                                   "type": "number",
                                   "description": "The age of the user"
                                 }
                               },
                               "additionalProperties": false,
                               "required": ["name", "age"]
                             },
                             {
                               "type": "object",
                               "description": "The address object to insert into the database",
                               "properties": {
                                 "number": {
                                   "type": "string",
                                   "description": "The number of the address. Eg. for 123 main st, this would be 123"
                                 },
                                 "street": {
                                   "type": "string",
                                   "description": "The street name. Eg. for 123 main st, this would be Main St"
                                 },
                                 "city": {
                                   "type": "string",
                                   "description": "The city of the address"
                                 }
                               },
                               "additionalProperties": false,
                               "required": ["number", "street", "city"]
                             }
                           ]
                         }
                       },
                       "additionalProperties": false,
                       "required": ["item"]
                     },
                     "strict": true
                   }
                }
                }
                ​

Defintions

{
                    "model": "gpt-4o-2024-08-06",
                    "messages": [
                       {
                         "role": "system",
                         "content": "You are a helpful math tutor. Guide the user through the solution step by step."
                       },
                       {
                         "role": "user",
                         "content": "Solve for x: 2x + 5 = 15"
                       }
                    ],
                    "response_format": {
                       "type": "json_schema",
                       "json_schema": {
                         "name": "database_insert",
                         "description": "Handles inserting user or address objects into the database.",
                         "schema": {
                       "type": "object",
                       "properties": {
                           "steps": {
                               "type": "array",
                               "items": {
                                   "$ref": "#/$defs/step"
                               }
                           },
                           "final_answer": {
                               "type": "string"
                           }
                       },
                       "$defs": {
                           "step": {
                               "type": "object",
                               "properties": {
                                   "explanation": {
                                       "type": "string"
                                   },
                                   "output": {
                                       "type": "string"
                                   }
                               },
                               "required": [
                                   "explanation",
                                   "output"
                               ],
                               "additionalProperties": false
                           }
                       },
                       "required": [
                           "steps",
                           "final_answer"
                       ],
                       "additionalProperties": false
                    },
                         "strict": true
                       }
                    }
                    }
                    ​

Recursion

{
                  "model": "gpt-4o-2024-08-06",
                  "messages": [
                      {
                          "role": "system",
                          "content": "You are a UI assistant. Generate structured JSON for dynamically rendering UI components."
                      },
                      {
                          "role": "user",
                          "content": "Generate a UI structure containing a form with a header, a section, and a button inside the section."
                      }
                  ],
                  "response_format": {
                      "type": "json_schema",
                      "json_schema": {
                          "name": "ui",
                          "description": "Dynamically generated UI",
                          "schema": {
                              "type": "object",
                              "properties": {
                                  "type": {
                                      "type": "string",
                                      "description": "The type of the UI component",
                                      "enum": ["div", "button", "header", "section", "field", "form"]
                                  },
                                  "label": {
                                      "type": "string",
                                      "description": "The label of the UI component, used for buttons or form fields"
                                  },
                                  "children": {
                                      "type": "array",
                                      "description": "Nested UI components",
                                      "items": {
                                          "$ref": "#"
                                      }
                                  },
                                  "attributes": {
                                      "type": "array",
                                      "description": "Arbitrary attributes for the UI component, suitable for any element",
                                      "items": {
                                          "type": "object",
                                          "properties": {
                                              "name": {
                                                  "type": "string",
                                                  "description": "The name of the attribute, for example onClick or className"
                                              },
                                              "value": {
                                                  "type": "string",
                                                  "description": "The value of the attribute"
                                              }
                                          },
                                          "additionalProperties": false,
                                          "required": ["name", "value"]
                                      }
                                  }
                              },
                              "required": ["type", "label", "children", "attributes"],
                              "additionalProperties": false
                          },
                          "strict": true
                      }
                  }
               }
               ​