openai-php / client

⚡️ OpenAI PHP is a supercharged community-maintained PHP API client that allows you to interact with OpenAI API.
MIT License
4.56k stars 466 forks source link

[Bug]: local.ERROR: 'json_object' is not of type 'object' - 'response_format' {"exception":"[object] (OpenAI\Exceptions\ErrorException(code: 0): 'json_object' is not of type 'object' - 'response_format' at /app/vendor/openai-php/client/src/Transporters/HttpTransporter.php:131) #370

Closed aaftre closed 1 month ago

aaftre commented 3 months ago

Description

local.ERROR: 'json_object' is not of type 'object' - 'response_format' {"exception":"[object] (OpenAI\Exceptions\ErrorException(code: 0): 'json_object' is not of type 'object' - 'response_format' at /app/vendor/openai-php/client/src/Transporters/HttpTransporter.php:131)

Steps To Reproduce

Works after commenting out response_format line;

            $response = $openai_client->chat()->create([
                'model' => "gpt-3.5-turbo-0125",
                'response_format' => 'json_object',
                'messages' => [
                    [
                        'role' => 'system',
                        'content' => $system_content
                    ],
                    [
                        'role' => 'user', 
                        'content' => $user_content
                    ]
                ],
            ]);

Same setup works in python

model="gpt-3.5-turbo-0125",
response_format={ "type": "json_object" },

OpenAI PHP Client Version

0.8.4

PHP Version

PHP 8.3.4

Notes

No response

horaceho commented 2 months ago

Just FYI, json_object is not supported for gtp-4 model anyway:

Error code: 400 - {'error': {'message': "Invalid parameter: 'response_format' of type 'json_object' is not supported with this model.", 'type': 'invalid_request_error', 'param': 'response_format', 'code': None}}

    response = client.chat.completions.create(
        messages = [
            {
                "role": "user",
                "content": prompt,
            }
        ],
        model="gpt-4",
        response_format = {
            "type": "json_object",
        }
    )
horaceho commented 2 months ago

For gtp-4 model, the following prompt produces a JSON output:

    response = client.chat.completions.create(
        messages = [
            {
                "role": "user",
                "content": "What are the first five letters in English? Answer in JSON format",
            }
        ],
        model="gpt-4",
    )
% python test.py
What are the first five letters in English? Answer in JSON format
{
"1": "A",
"2": "B",
"3": "C",
"4": "D",
"5": "E"
}
RHosono commented 2 months ago

Just FYI, json_object is not supported for gtp-4 model anyway:

This is not true:

To prevent these errors and improve model performance, when calling gpt-4-turbo-preview or gpt-3.5-turbo-0125, you can set response_format to { "type": "json_object" } to enable JSON mode. When JSON mode is enabled, the model is constrained to only generate strings that parse into valid JSON object. https://platform.openai.com/docs/guides/text-generation/json-mode

horaceho commented 2 months ago

@RHosono Did you run the code with different model(s) or just quoted the doc? The error message was return from OpenAI API. The model used was model="gpt-4".

aaftre commented 2 months ago

Just FYI, json_object is not supported for gtp-4 model anyway:

Error code: 400 - {'error': {'message': "Invalid parameter: 'response_format' of type 'json_object' is not supported with this model.", 'type': 'invalid_request_error', 'param': 'response_format', 'code': None}}

    response = client.chat.completions.create(
        messages = [
            {
                "role": "user",
                "content": prompt,
            }
        ],
        model="gpt-4",
        response_format = {
            "type": "json_object",
        }
    )

not sure why gpt4 is being mentioned, the model used in the original post was gpt-3.5-turbo-0125. this is the exact model used in openai documentation: https://platform.openai.com/docs/guides/text-generation/json-mode

this works just by using a guzzle http client:

$response = $client->request('POST', 'https://api.openai.com/v1/chat/completions', [
     'headers' => [
         'Content-Type' => 'application/json',
         'Authorization' => 'Bearer ' . getenv('OPENAI_API_KEY')
     ],
     'json' => [
         "messages" => [
             ["role" => "system", "content" => $system_content ],
             ["role" => "user", "content" => $address_json ]
         ],
         "model" => "gpt-3.5-turbo",
         "response_format" => [ "type" => "json_object" ]
     ]
 ]);
RHosono commented 2 months ago

@RHosono Did you run the code with different model(s) or just quoted the doc? The error message was return from OpenAI API. The model used was model="gpt-4".

So you mean the very old gpt-4 model, yes, that is correct. But both the new gpt-4-turbo and the older gpt-4-turbo-preview support it. I do not think anyone is using the more expensive and older gpt-4 modal. I was just making a general point, not about the code.

Because you said:

"json_object is not supported for gtp-4 model anyway:"

gehrisandro commented 1 month ago

Hi @aaftre

This does not look like an error related to the package.

If you do not agree, feel free to reopen the issue.