I am using Strctured Output in the Assistants API. I use “json_schema” for my response format and supplied the following JSON schema:
{
"name": "lessonPlanResponse",
"strict": true,
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"command": {
"anyOf": [
{
"title": "none",
"type": "object",
"additionalProperties": false
},
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"args": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"value": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"name",
"value"
]
}
}
},
"additionalProperties": false,
"required": [
"name",
"args"
]
},
{
"type": "object",
"properties": {
"name": {
"type": "string",
"const": "renameChat"
},
"args": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"const": "name"
},
"value": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"name",
"value"
]
}
}
},
"additionalProperties": false,
"required": [
"name",
"args"
]
}
]
},
"entity": {
"type": [
"object",
"null"
],
"properties": {
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"program_objectives": {
"type": "array",
"items": {
"type": "string"
}
},
"objectives": {
"type": "array",
"items": {
"type": "string"
}
},
"lesson_progress": {
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"stage": {
"type": "string"
},
"time": {
"type": "string"
},
"teacher_actions": {
"type": "string"
},
"student_actions": {
"type": "string"
},
"evaluation": {
"type": "string"
},
"resources": {
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"const": "[resource]"
}
]
}
},
"additionalProperties": false,
"required": [
"stage",
"time",
"teacher_actions",
"student_actions",
"evaluation",
"resources"
]
}
}
},
"additionalProperties": false,
"required": [
"items"
]
},
"addedResources": {
"type": [
"array",
"null"
],
"items": {
"anyOf": [
{
"title": "Matching",
"type": "object",
"properties": {
"title": {
"type": "string"
},
"resourceType": {
"type": "string",
"const": "game"
},
"type": {
"type": "string",
"const": "matching"
},
"sets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"WordsAndDefinitions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"Word": {
"type": "string"
},
"Definition": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"Word",
"Definition"
]
}
}
},
"additionalProperties": false,
"required": [
"WordsAndDefinitions"
]
}
}
},
"additionalProperties": false,
"required": [
"title",
"sets",
"type",
"resourceType"
]
},
{
"title": "Anagram",
"type": "object",
"properties": {
"title": {
"type": "string"
},
"resourceType": {
"type": "string",
"const": "game"
},
"type": {
"type": "string",
"const": "matching"
},
"WordsAndDefinitions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"Word": {
"type": "string"
},
"Definition": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"Word",
"Definition"
]
}
}
},
"additionalProperties": false,
"required": [
"title",
"WordsAndDefinitions",
"type",
"resourceType"
]
},
{
"title": "Crossword",
"type": "object",
"properties": {
"title": {
"type": "string"
},
"resourceType": {
"type": "string",
"const": "game"
},
"type": {
"type": "string",
"const": "crossword"
},
"questions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"question": {
"type": "string"
},
"answer": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"question",
"answer"
]
}
}
},
"additionalProperties": false,
"required": [
"title",
"questions",
"type",
"resourceType"
]
},
{
"title": "Word Search",
"type": "object",
"properties": {
"title": {
"type": "string"
},
"type": {
"type": "string",
"const": "word_search"
},
"resourceType": {
"type": "string",
"const": "game"
},
"words": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false,
"required": [
"title",
"words",
"type",
"resourceType"
]
},
{
"title": "Balloon Pop",
"type": "object",
"properties": {
"title": {
"type": "string"
},
"resourceType": {
"type": "string",
"const": "game"
},
"type": {
"type": "string",
"const": "balloon_pop"
}
},
"additionalProperties": false,
"required": [
"title",
"type",
"resourceType"
]
},
{
"title": "Math Race",
"type": "object",
"properties": {
"title": {
"type": "string"
},
"resourceType": {
"type": "string",
"const": "game"
},
"type": {
"type": "string",
"const": "math_race"
}
},
"additionalProperties": false,
"required": [
"title",
"type",
"resourceType"
]
},
{
"title": "Word Snake",
"type": "object",
"properties": {
"title": {
"type": "string"
},
"resourceType": {
"type": "string",
"const": "game"
},
"type": {
"type": "string",
"const": "word_snake"
}
},
"additionalProperties": false,
"required": [
"title",
"type",
"resourceType"
]
}
]
}
}
},
"additionalProperties": false,
"required": [
"title",
"section",
"program_objectives",
"objectives",
"lesson_progress",
"addedResources"
]
}
},
"additionalProperties": false,
"required": [
"message",
"command",
"entity"
]
}
}
When I try to use playground for the assistant, the assistant returns the following error:
"last_error":{
"code":"server_error"
"message":"Sorry, something went wrong."
}
The API call to the assistant is timed out.
How do I know it’s because of JSON schema?
I’ve been gradually modifying the JSON schema of the assistant and found that adding more that one schema to the “anyOf” field of the “entity.addedResources” object breaks the model. If the “entity.addedResources.anyOf” has only one schema, then the model works fine.