From 48001b4b919ccbdb65a59ee2b0b39eb2601e9825 Mon Sep 17 00:00:00 2001 From: Romain Date: Thu, 20 Nov 2025 15:01:58 +0100 Subject: [PATCH 1/4] fix: List items for a conversation. `file_id` is null and `file_data` is not present in the API response. --- .../Responses/Input/InputMessageContentInputFile.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Responses/Responses/Input/InputMessageContentInputFile.php b/src/Responses/Responses/Input/InputMessageContentInputFile.php index 1b1b8ca2..e701a365 100644 --- a/src/Responses/Responses/Input/InputMessageContentInputFile.php +++ b/src/Responses/Responses/Input/InputMessageContentInputFile.php @@ -39,8 +39,8 @@ public static function from(array $attributes): self { return new self( type: $attributes['type'], - fileData: $attributes['file_data'], - fileId: $attributes['file_id'], + fileData: $attributes['file_data'] ?? '', + fileId: $attributes['file_id'] ?? '', filename: $attributes['filename'], ); } From e46da5adcd873fb13c4e9ad752a028033fbc140c Mon Sep 17 00:00:00 2001 From: Romain Date: Thu, 20 Nov 2025 16:10:10 +0100 Subject: [PATCH 2/4] update --- .../Responses/Input/InputMessageContentInputFile.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Responses/Responses/Input/InputMessageContentInputFile.php b/src/Responses/Responses/Input/InputMessageContentInputFile.php index e701a365..f52a7fba 100644 --- a/src/Responses/Responses/Input/InputMessageContentInputFile.php +++ b/src/Responses/Responses/Input/InputMessageContentInputFile.php @@ -9,7 +9,7 @@ use OpenAI\Testing\Responses\Concerns\Fakeable; /** - * @phpstan-type ContentInputFileType array{type: 'input_file', file_data: string, file_id: string, filename: string} + * @phpstan-type ContentInputFileType array{type: 'input_file', file_data: ?string, file_id: ?string, filename: string} * * @implements ResponseContract */ @@ -27,8 +27,8 @@ final class InputMessageContentInputFile implements ResponseContract */ private function __construct( public readonly string $type, - public readonly string $fileData, - public readonly string $fileId, + public readonly ?string $fileData, + public readonly ?string $fileId, public readonly string $filename, ) {} @@ -39,8 +39,8 @@ public static function from(array $attributes): self { return new self( type: $attributes['type'], - fileData: $attributes['file_data'] ?? '', - fileId: $attributes['file_id'] ?? '', + fileData: $attributes['file_data'] ?? null, + fileId: $attributes['file_id'] ?? null, filename: $attributes['filename'], ); } From 74e64cf41f7abfaba7adfb482e1d49bf0e8ea49e Mon Sep 17 00:00:00 2001 From: Romain Date: Mon, 24 Nov 2025 04:02:37 +0100 Subject: [PATCH 3/4] add tests `php -d memory_limit=512M ./vendor/bin/pest --colors=always` --- tests/Fixtures/Responses.php | 25 ++++++++ .../Input/InputMessageContentInputFile.php | 61 +++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 tests/Responses/Responses/Input/InputMessageContentInputFile.php diff --git a/tests/Fixtures/Responses.php b/tests/Fixtures/Responses.php index 2c849893..452e1cdf 100644 --- a/tests/Fixtures/Responses.php +++ b/tests/Fixtures/Responses.php @@ -307,6 +307,31 @@ function mcpApprovalResponseItem(): array ]; } +/** + * @return array + */ +function InputMessageContentInputFileItem(): array +{ + return [ + 'type' => 'input_file', + 'file_data' => 'data:application/pdf;base64,JVBERi0xLjUKJY8KMTgxIDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMT...', + 'file_id' => 'file_0d1b41da7cb4903a0069235a5089408196a847a8f3e7b4fb1c', + 'filename' => 'file.pdf', + ]; +} + +/** + * @return array + */ +function InputMessageContentInputFileItemMissingOrNull(): array +{ + return [ + 'type' => 'input_file', + 'file_id' => null, + 'filename' => 'file.pdf', + ]; +} + /** * @return array */ diff --git a/tests/Responses/Responses/Input/InputMessageContentInputFile.php b/tests/Responses/Responses/Input/InputMessageContentInputFile.php new file mode 100644 index 00000000..503f7f09 --- /dev/null +++ b/tests/Responses/Responses/Input/InputMessageContentInputFile.php @@ -0,0 +1,61 @@ +toBeInstanceOf(InputMessageContentInputFile::class) + ->type->toBe('input_file') + ->fileData->toBe('data:application/pdf;base64,JVBERi0xLjUKJY8KMTgxIDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMT...') + ->fileId->toBe('file_0d1b41da7cb4903a0069235a5089408196a847a8f3e7b4fb1c') + ->filename->toBe('file.pdf'); +}); + +it('is array accessible', function () { + $response = InputMessageContentInputFile::from(InputMessageContentInputFileItem()); + + expect($response['file_id'])->toBe('file_0d1b41da7cb4903a0069235a5089408196a847a8f3e7b4fb1c'); +}); + +it('to array', function () { + $response = InputMessageContentInputFile::from(InputMessageContentInputFileItem()); + + expect($response->toArray()) + ->toBe([ + 'type' => 'input_file', + 'file_data' => 'data:application/pdf;base64,JVBERi0xLjUKJY8KMTgxIDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMT...', + 'file_id' => 'file_0d1b41da7cb4903a0069235a5089408196a847a8f3e7b4fb1c', + 'filename' => 'file.pdf', + ]); +}); + +test('from (missing or null)', function () { + $response = InputMessageContentInputFile::from(InputMessageContentInputFileItemMissingOrNull()); + + expect($response) + ->toBeInstanceOf(InputMessageContentInputFile::class) + ->type->toBe('input_file') + ->fileData->toBeNull() + ->fileId->toBeNull() + ->filename->toBe('file.pdf'); +}); + +it('is array accessible (missing or null)', function () { + $response = InputMessageContentInputFile::from(InputMessageContentInputFileItemMissingOrNull()); + + expect($response['file_id'])->toBeNull(); +}); + +it('to array (missing or null)', function () { + $response = InputMessageContentInputFile::from(InputMessageContentInputFileItemMissingOrNull()); + + expect($response->toArray()) + ->toBe([ + 'type' => 'input_file', + 'file_data' => null, + 'file_id' => null, + 'filename' => 'file.pdf', + ]); +}); \ No newline at end of file From a6e07a34a563ec6042a3227c88cf2b773e576838 Mon Sep 17 00:00:00 2001 From: Romain Date: Mon, 24 Nov 2025 13:15:45 +0100 Subject: [PATCH 4/4] single_blank_line_at_eof --- .../Responses/Responses/Input/InputMessageContentInputFile.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Responses/Responses/Input/InputMessageContentInputFile.php b/tests/Responses/Responses/Input/InputMessageContentInputFile.php index 503f7f09..a7cc5060 100644 --- a/tests/Responses/Responses/Input/InputMessageContentInputFile.php +++ b/tests/Responses/Responses/Input/InputMessageContentInputFile.php @@ -58,4 +58,4 @@ 'file_id' => null, 'filename' => 'file.pdf', ]); -}); \ No newline at end of file +});