|
5 | 5 | namespace NeuronAI\Providers\ElevenLabs; |
6 | 6 |
|
7 | 7 | use Generator; |
| 8 | +use NeuronAI\Chat\Messages\AssistantMessage; |
8 | 9 | use NeuronAI\Chat\Messages\Message; |
9 | 10 | use NeuronAI\Exceptions\HttpException; |
10 | 11 | use NeuronAI\Exceptions\ProviderException; |
11 | 12 | use NeuronAI\HttpClient\GuzzleHttpClient; |
12 | 13 | use NeuronAI\HttpClient\HasHttpClient; |
13 | 14 | use NeuronAI\HttpClient\HttpClientInterface; |
| 15 | +use NeuronAI\HttpClient\HttpRequest; |
14 | 16 | use NeuronAI\Providers\AIProviderInterface; |
15 | 17 | use NeuronAI\Providers\MessageMapperInterface; |
16 | 18 | use NeuronAI\Providers\ToolMapperInterface; |
17 | 19 |
|
18 | 20 | use function trim; |
| 21 | +use function end; |
| 22 | +use function fopen; |
| 23 | +use function is_array; |
19 | 24 |
|
20 | 25 | class ElevenLabsSpeechToText implements AIProviderInterface |
21 | 26 | { |
22 | 27 | use HasHttpClient; |
23 | 28 |
|
24 | | - protected string $baseUri = 'https://api.elevenlabs.io/v1'; |
| 29 | + protected string $baseUri = 'https://api.elevenlabs.io/v1/speech-to-text'; |
25 | 30 |
|
26 | 31 | /** |
27 | 32 | * System instructions. |
@@ -54,16 +59,29 @@ public function systemPrompt(?string $prompt): AIProviderInterface |
54 | 59 | */ |
55 | 60 | public function chat(Message|array $messages): Message |
56 | 61 | { |
| 62 | + $message = is_array($messages) ? end($messages) : $messages; |
57 | 63 |
|
| 64 | + $body = [ |
| 65 | + 'file' => fopen($message->getAudio(), 'r'), |
| 66 | + 'model' => $this->model, |
| 67 | + ]; |
| 68 | + |
| 69 | + $response = $this->httpClient->request( |
| 70 | + HttpRequest::post( |
| 71 | + uri: 'audio/transcriptions', |
| 72 | + body: $body |
| 73 | + ) |
| 74 | + )->json(); |
| 75 | + |
| 76 | + return new AssistantMessage($response['text']); |
58 | 77 | } |
59 | 78 |
|
60 | 79 | /** |
61 | | - * @throws HttpException |
62 | 80 | * @throws ProviderException |
63 | 81 | */ |
64 | 82 | public function stream(Message|array $messages): Generator |
65 | 83 | { |
66 | | - |
| 84 | + throw new ProviderException('Streaming is not supported by OpenAI Text to Speech.'); |
67 | 85 | } |
68 | 86 |
|
69 | 87 | public function structured(array|Message $messages, string $class, array $response_schema): Message |
|
0 commit comments