diff --git a/src/ValueObjects/Media/Media.php b/src/ValueObjects/Media/Media.php index 90c4bd096..fe1628c3d 100644 --- a/src/ValueObjects/Media/Media.php +++ b/src/ValueObjects/Media/Media.php @@ -249,14 +249,15 @@ public function base64(): ?string public function mimeType(): ?string { - if ($this->mimeType) { - return $this->mimeType; - } - - if ($content = $this->rawContent()) { + if ($this->mimeType === null && $content = $this->rawContent()) { $this->mimeType = (new finfo(FILEINFO_MIME_TYPE))->buffer($content) ?: null; } + $this->mimeType = match ($this->mimeType) { + 'audio/x-wav', 'audio/wave', 'audio/x-pn-wav', 'audio/vnd.wave' => 'audio/wav', + default => $this->mimeType, + }; + return $this->mimeType; } diff --git a/tests/Providers/Gemini/GeminiMediaTest.php b/tests/Providers/Gemini/GeminiMediaTest.php index fe1cab83d..f47edfcd2 100644 --- a/tests/Providers/Gemini/GeminiMediaTest.php +++ b/tests/Providers/Gemini/GeminiMediaTest.php @@ -153,7 +153,7 @@ function (Request $request): bool { 'text' => 'Transcribe this audio', ]) ->and($message[1]['inline_data'])->toHaveKeys(['mime_type', 'data']) - ->and($message[1]['inline_data']['mime_type'])->toBe('audio/x-wav') + ->and($message[1]['inline_data']['mime_type'])->toBe('audio/wav') ->and($message[1]['inline_data']['data'])->toBe( base64_encode(file_get_contents('tests/Fixtures/sample-audio.wav')) ); @@ -171,7 +171,7 @@ function (Request $request): bool { $audioUrl => Http::response( file_get_contents('tests/Fixtures/sample-audio.wav'), 200, - ['Content-Type' => 'audio/x-wav'] + ['Content-Type' => 'audio/wav'] ), ]); @@ -197,7 +197,7 @@ function (Request $request): bool { 'text' => 'What is in this audio', ]) ->and($message[1]['inline_data'])->toHaveKeys(['mime_type', 'data']) - ->and($message[1]['inline_data']['mime_type'])->toBe('audio/x-wav') + ->and($message[1]['inline_data']['mime_type'])->toBe('audio/wav') ->and($message[1]['inline_data']['data'])->toBe( base64_encode(file_get_contents('tests/Fixtures/sample-audio.wav')) );