Skip to content

[Bug]: UnserializableResponse when Files::retrieve() returns HTML 503 #678

Description

@bkremenovic

Description

When calling Files::retrieve($fileId) via the PHP SDK, intermittent 503 responses from the API edge (HTML “503 Service Temporarily Unavailable” from OpenAI's nginx) cause the transporter to attempt json_decode() on the HTML body. This triggers:

OpenAI\Exceptions\UnserializableResponse
Syntax error
vendor/openai-php/client/src/Transporters/HttpTransporter.php:62

Because the response isn’t JSON, the SDK error is misleading and hides the actual HTTP status/body. This makes handling/retrying 5xx conditions difficult.

Steps To Reproduce

  1. Environment (example):

    • PHP: 8.x
    • SDK: openai-php/client (latest at time of issue)
  2. Code (minimal):

    $fileId = 'file_XXXXXXXXXXXX';
    
    // Repro: call retrieve on an existing file id
    $file = $client->files()->retrieve($fileId);
  3. Intermittently, the API responds with a 503 HTML page (edge/nginx). If you dump the raw contents in the transporter you’ll see something like:

    <html>
    <head><title>503 Service Temporarily Unavailable</title></head>
    <body>
    <center><h1>503 Service Temporarily Unavailable</h1></center>
    <hr><center>nginx</center>
    </body>
    </html>
  4. The SDK attempts to json_decode() this HTML and throws:

    OpenAI\Exceptions\UnserializableResponse (Syntax error)
    at vendor/openai-php/client/src/Transporters/HttpTransporter.php:62
    

OpenAI PHP Client Version

v0.16.0

PHP Version

8.4.6

Notes

  • The error originates here:

    • vendor/openai-php/client/src/Transporters/HttpTransporter.php:62
    • The transporter always tries to decode the body as JSON before considering that it might be an HTML error page.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions