openai.BadRequestError: Error code: 400 - {'error': {'message': "Invalid 'response_format': 'type' must be one of ['text', 'json_object', 'json_schema'].", 'type': 'invalid_request_error'}}
ID: llm/openai-structured-output-enum-violation
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| openai==1.30.0 | active | — | — | — |
| openai==1.35.0 | active | — | — | — |
| gpt-4o-mini-2024-07-18 | active | — | — | — |
Root Cause
The response_format.type parameter is set to an invalid or unsupported value (e.g., 'json' instead of 'json_object' or 'json_schema'), or the model version does not support the specified format type.
generic中文
response_format.type 参数设置为无效或不支持的值(例如,'json' 而不是 'json_object' 或 'json_schema'),或者模型版本不支持指定的格式类型。
Official Documentation
https://platform.openai.com/docs/api-reference/chat/create#chat-create-response_formatWorkarounds
-
98% success Correct the response_format to use a valid type: `response_format={"type": "json_object"}` for unstructured JSON, or `response_format={"type": "json_schema", "json_schema": {"name": "my_schema", "schema": {...}}}` for structured JSON. Example: `client.chat.completions.create(model="gpt-4o-mini", messages=[{"role": "user", "content": "Hello"}], response_format={"type": "json_object"})`.
Correct the response_format to use a valid type: `response_format={"type": "json_object"}` for unstructured JSON, or `response_format={"type": "json_schema", "json_schema": {"name": "my_schema", "schema": {...}}}` for structured JSON. Example: `client.chat.completions.create(model="gpt-4o-mini", messages=[{"role": "user", "content": "Hello"}], response_format={"type": "json_object"})`. -
85% success If using 'json_schema', ensure the model supports it (gpt-4o-mini and later, or gpt-4-turbo with specific versions). Check the model's capabilities via the API: `model = client.models.retrieve("gpt-4o-mini"); print(model.supported_features)`.
If using 'json_schema', ensure the model supports it (gpt-4o-mini and later, or gpt-4-turbo with specific versions). Check the model's capabilities via the API: `model = client.models.retrieve("gpt-4o-mini"); print(model.supported_features)`. -
80% success For legacy models that don't support 'json_schema', fall back to 'json_object' and parse the output manually with a JSON schema validator like `jsonschema.validate()`.
For legacy models that don't support 'json_schema', fall back to 'json_object' and parse the output manually with a JSON schema validator like `jsonschema.validate()`.
中文步骤
将 response_format 更正为使用有效类型:`response_format={"type": "json_object"}` 用于非结构化 JSON,或 `response_format={"type": "json_schema", "json_schema": {"name": "my_schema", "schema": {...}}}` 用于结构化 JSON。示例:`client.chat.completions.create(model="gpt-4o-mini", messages=[{"role": "user", "content": "Hello"}], response_format={"type": "json_object"})`。如果使用 'json_schema',请确保模型支持它(gpt-4o-mini 及更高版本,或特定版本的 gpt-4-turbo)。通过 API 检查模型的能力:`model = client.models.retrieve("gpt-4o-mini"); print(model.supported_features)`。对于不支持 'json_schema' 的旧模型,回退到 'json_object' 并使用 JSON 模式验证器(如 `jsonschema.validate()`)手动解析输出。
Dead Ends
Common approaches that don't work:
-
90% fail
The API strictly requires the 'type' key; an empty dict causes a different validation error: 'response_format must be a valid object with a type field'.
-
95% fail
The API only accepts 'text', 'json_object', or 'json_schema' (for newer models). 'json' is not recognized and triggers the exact error.
-
85% fail
Older versions don't support 'json_schema' at all, and may have different validation rules. This breaks other features and is not a sustainable fix.