From 83b1dd71684bf5a21bf09ffde91440ed24270091 Mon Sep 17 00:00:00 2001 From: Noel De Martin Date: Sun, 29 Mar 2026 11:29:32 +0200 Subject: [PATCH] feat(audio): Allow diarization with Mistral --- src/Providers/Mistral/Handlers/Audio.php | 1 + tests/Providers/Mistral/AudioTest.php | 25 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/Providers/Mistral/Handlers/Audio.php b/src/Providers/Mistral/Handlers/Audio.php index 86828c5b5..94d9f31a7 100644 --- a/src/Providers/Mistral/Handlers/Audio.php +++ b/src/Providers/Mistral/Handlers/Audio.php @@ -37,6 +37,7 @@ public function handleSpeechToText(SpeechToTextRequest $request): TextResponse 'language' => $request->providerOptions('language') ?? null, 'prompt' => $request->providerOptions('prompt') ?? null, 'response_format' => $request->providerOptions('response_format') ?? null, + 'diarize' => $request->providerOptions('diarize') ?? null, 'temperature' => $request->providerOptions('temperature') ?? null, 'timestamp_granularities' => $request->providerOptions('timestamp_granularities') ?? null, ])); diff --git a/tests/Providers/Mistral/AudioTest.php b/tests/Providers/Mistral/AudioTest.php index fc8b676c5..3b5cc9308 100644 --- a/tests/Providers/Mistral/AudioTest.php +++ b/tests/Providers/Mistral/AudioTest.php @@ -139,6 +139,31 @@ expect($response->additionalContent['segments'])->toHaveCount(2); }); + it('can transcribe with diarize parameter', function (): void { + FixtureResponse::fakeResponseSequence('audio/transcriptions', 'mistral/speech-to-text-basic'); + + $audioFile = Audio::fromBase64(base64_encode('usage-test-audio'), 'audio/flac'); + + $response = Prism::audio() + ->using('mistral', 'voxtral-mini-latest') + ->withInput($audioFile) + ->withProviderOptions([ + 'diarize' => true, + ]) + ->asText(); + + expect($response->text)->toBe('Hello, this is a test transcription.'); + + Http::assertSent(function (Request $request): bool { + $data = $request->data(); + + $diarizeField = collect($data)->firstWhere('name', 'diarize'); + + return str_contains($request->url(), 'audio/transcriptions') && + $diarizeField && $diarizeField['contents'] === true; + }); + }); + it('can transcribe with language parameter', function (): void { FixtureResponse::fakeResponseSequence('audio/transcriptions', 'mistral/speech-to-text-basic');