OAI-ERR-0400 llm config_error ai_generated true

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

Also available as: JSON · Markdown · 中文
90%Fix Rate
88%Confidence
1Evidence
2024-08-10First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
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_format

Workarounds

  1. 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"})`.
  2. 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)`.
  3. 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()`.

中文步骤

  1. 将 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"})`。
  2. 如果使用 'json_schema',请确保模型支持它(gpt-4o-mini 及更高版本,或特定版本的 gpt-4-turbo)。通过 API 检查模型的能力:`model = client.models.retrieve("gpt-4o-mini"); print(model.supported_features)`。
  3. 对于不支持 'json_schema' 的旧模型,回退到 'json_object' 并使用 JSON 模式验证器(如 `jsonschema.validate()`)手动解析输出。

Dead Ends

Common approaches that don't work:

  1. 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'.

  2. 95% fail

    The API only accepts 'text', 'json_object', or 'json_schema' (for newer models). 'json' is not recognized and triggers the exact error.

  3. 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.