From 8208129f38762ec5fbf26dffa2a8d7408bc07ffe Mon Sep 17 00:00:00 2001 From: mappweb Date: Thu, 30 Oct 2025 21:14:02 -0500 Subject: [PATCH 1/3] Transcribe. Speech to text. --- src/Exceptions/ContentBlocksException.php | 9 +++ .../OpenAI/OpenAITranscribeProvider.php | 72 +++++++++++++++++++ src/Transcribe/ResolveTranscribeProvider.php | 23 ++++++ src/Transcribe/Transcribe.php | 23 ++++++ .../TranscribeProviderInterface.php | 10 +++ 5 files changed, 137 insertions(+) create mode 100644 src/Exceptions/ContentBlocksException.php create mode 100644 src/Providers/OpenAI/OpenAITranscribeProvider.php create mode 100644 src/Transcribe/ResolveTranscribeProvider.php create mode 100644 src/Transcribe/Transcribe.php create mode 100644 src/Transcribe/TranscribeProviderInterface.php diff --git a/src/Exceptions/ContentBlocksException.php b/src/Exceptions/ContentBlocksException.php new file mode 100644 index 00000000..d95e4336 --- /dev/null +++ b/src/Exceptions/ContentBlocksException.php @@ -0,0 +1,9 @@ +client = new Client([ + 'base_uri' => $this->baseUri, + 'headers' => [ + 'Accept' => 'application/json', + 'Content-Type' => 'application/json', + 'Authorization' => 'Bearer ' . $this->key, + ] + ]); + } + + public function trascribe(string $filePath): string + { + // Preparar los datos del formulario + $multipart = [ + [ + 'name' => 'file', + 'contents' => fopen($filePath, 'r'), + 'filename' => basename($filePath) + ], + [ + 'name' => 'model', + 'contents' => 'whisper-1' + ], + [ + 'name' => 'language', + 'contents' => $this->language + ], + [ + 'name' => 'response_format', + 'contents' => 'json' + ] + ]; + $response = $this->client->post('', [ + 'multipart' => $multipart, + RequestOptions::TIMEOUT => 60, + RequestOptions::CONNECT_TIMEOUT => 30 + ]); + + // Procesar la respuesta + $statusCode = $response->getStatusCode(); + $body = $response->getBody()->getContents(); + $result = json_decode($body, true); + + if ($statusCode !== 200) { + throw new ProviderException('Whisper API error: ' . $body); + } + + return $result['text'] ?? ''; + } +} diff --git a/src/Transcribe/ResolveTranscribeProvider.php b/src/Transcribe/ResolveTranscribeProvider.php new file mode 100644 index 00000000..c3d0f085 --- /dev/null +++ b/src/Transcribe/ResolveTranscribeProvider.php @@ -0,0 +1,23 @@ +transcribeProvider; + } + + public function resolveTranscribeProvider(): TranscribeProviderInterface + { + if (!isset($this->embeddingsProvider)) { + $this->transcribeProvider = $this->transcribe(); + } + return $this->transcribeProvider; + } +} diff --git a/src/Transcribe/Transcribe.php b/src/Transcribe/Transcribe.php new file mode 100644 index 00000000..9916899c --- /dev/null +++ b/src/Transcribe/Transcribe.php @@ -0,0 +1,23 @@ +sourceType->value === SourceType::URL) { + return $this->resolveTranscribeProvider()->trascribe($audio->source); + } + throw new ContentBlocksException('Unsupported audio source'); + } +} diff --git a/src/Transcribe/TranscribeProviderInterface.php b/src/Transcribe/TranscribeProviderInterface.php new file mode 100644 index 00000000..76a376dd --- /dev/null +++ b/src/Transcribe/TranscribeProviderInterface.php @@ -0,0 +1,10 @@ + Date: Thu, 30 Oct 2025 21:22:07 -0500 Subject: [PATCH 2/3] Transcribe. Speech to text. --- src/Transcribe/Transcribe.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/Transcribe/Transcribe.php b/src/Transcribe/Transcribe.php index 9916899c..0630de35 100644 --- a/src/Transcribe/Transcribe.php +++ b/src/Transcribe/Transcribe.php @@ -13,6 +13,13 @@ class Transcribe extends Agent { use ResolveTranscribeProvider; + /** + * [Source audio] Speech to text. + * + * @param AudioContent $audio + * @return string + * @throws ContentBlocksException + */ public function transcribeAudio(AudioContent $audio): string { if ($audio->sourceType->value === SourceType::URL) { From f163c3793a756cfd6572493a6b3dac9f188572e8 Mon Sep 17 00:00:00 2001 From: mappweb Date: Thu, 30 Oct 2025 21:26:31 -0500 Subject: [PATCH 3/3] Transcribe. Speech to text. --- src/Providers/OpenAI/OpenAITranscribeProvider.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Providers/OpenAI/OpenAITranscribeProvider.php b/src/Providers/OpenAI/OpenAITranscribeProvider.php index fdd117f5..4ce0555d 100644 --- a/src/Providers/OpenAI/OpenAITranscribeProvider.php +++ b/src/Providers/OpenAI/OpenAITranscribeProvider.php @@ -41,7 +41,7 @@ public function trascribe(string $filePath): string ], [ 'name' => 'model', - 'contents' => 'whisper-1' + 'contents' => $this->model ], [ 'name' => 'language',