diff --git a/src/Providers/OpenAI/Handlers/Images.php b/src/Providers/OpenAI/Handlers/Images.php index a06a18f5..db530107 100644 --- a/src/Providers/OpenAI/Handlers/Images.php +++ b/src/Providers/OpenAI/Handlers/Images.php @@ -6,6 +6,7 @@ use Illuminate\Http\Client\PendingRequest; use Illuminate\Http\Client\Response as ClientResponse; +use Illuminate\Support\Arr; use InvalidArgumentException; use Prism\Prism\Images\Request; use Prism\Prism\Images\Response; @@ -46,6 +47,13 @@ public function handle(Request $request): Response rateLimits: $this->processRateLimits($response), ), images: $images, + additionalContent: Arr::whereNotNull([ + 'input_tokens_details' => data_get($data, 'usage.input_tokens_details'), + 'quality' => data_get($data, 'quality'), + 'size' => data_get($data, 'size'), + 'output_format' => data_get($data, 'output_format'), + 'background' => data_get($data, 'background'), + ]), raw: $data, ); diff --git a/tests/Providers/OpenAI/ImagesTest.php b/tests/Providers/OpenAI/ImagesTest.php index d0a90ecf..e53d33c4 100644 --- a/tests/Providers/OpenAI/ImagesTest.php +++ b/tests/Providers/OpenAI/ImagesTest.php @@ -43,6 +43,7 @@ expect($response->firstImage()->revisedPrompt)->toBe('A cute baby sea otter floating on its back in calm blue water'); expect($response->usage->promptTokens)->toBe(15); expect($response->imageCount())->toBe(1); + expect($response->additionalContent)->toBe([]); Http::assertSent(function (Request $request): bool { $data = $request->data(); @@ -229,6 +230,10 @@ Http::fake([ 'api.openai.com/v1/images/generations' => Http::response([ 'created' => 1713833628, + 'background' => 'opaque', + 'quality' => 'high', + 'size' => '1024x1024', + 'output_format' => 'png', 'data' => [ [ 'b64_json' => 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==', @@ -258,6 +263,16 @@ expect($response->firstImage()->url)->toBeNull(); expect($response->usage->promptTokens)->toBe(50); expect($response->imageCount())->toBe(1); + expect($response->additionalContent)->toBe([ + 'input_tokens_details' => [ + 'text_tokens' => 10, + 'image_tokens' => 40, + ], + 'quality' => 'high', + 'size' => '1024x1024', + 'output_format' => 'png', + 'background' => 'opaque', + ]); Http::assertSent(function (Request $request): bool { $data = $request->data(); @@ -369,6 +384,14 @@ ->generate(); expect($response->firstImage()->base64)->not->toBeEmpty(); + expect($response->additionalContent)->toHaveKeys([ + 'input_tokens_details', + 'quality', + 'size', + 'output_format', + 'background', + ]); + expect($response->additionalContent['input_tokens_details'])->toHaveKeys(['text_tokens', 'image_tokens']); }); it('can edit with multiple images', function (): void {