|
9 | 9 | use NeuronAI\Chat\Messages\AssistantMessage; |
10 | 10 | use NeuronAI\Chat\Messages\ContentBlocks\AudioContent; |
11 | 11 | use NeuronAI\Chat\Messages\Message; |
12 | | -use NeuronAI\Chat\Messages\Stream\Chunks\AudioChunk; |
| 12 | +use NeuronAI\Chat\Messages\Stream\Chunks\TextChunk; |
| 13 | +use NeuronAI\Chat\Messages\Usage; |
13 | 14 | use NeuronAI\Exceptions\HttpException; |
14 | 15 | use NeuronAI\Exceptions\ProviderException; |
15 | 16 | use NeuronAI\HttpClient\GuzzleHttpClient; |
|
24 | 25 |
|
25 | 26 | use function end; |
26 | 27 | use function fopen; |
27 | | -use function json_encode; |
28 | 28 |
|
29 | 29 | class ZAITranscription implements AIProviderInterface |
30 | 30 | { |
@@ -85,7 +85,14 @@ public function chat(Message ...$messages): Message |
85 | 85 | ) |
86 | 86 | )->json(); |
87 | 87 |
|
88 | | - return new AssistantMessage($response['text']); |
| 88 | + $message = new AssistantMessage($response['text']); |
| 89 | + $message->setUsage( |
| 90 | + new Usage( |
| 91 | + $response['usage']['prompt_tokens'] ?? 0, |
| 92 | + $response['usage']['completion_tokens'] ?? 0 |
| 93 | + ) |
| 94 | + ); |
| 95 | + return $message; |
89 | 96 | } |
90 | 97 |
|
91 | 98 | /** |
@@ -114,21 +121,29 @@ public function stream(Message ...$messages): Generator |
114 | 121 | ) |
115 | 122 | ); |
116 | 123 |
|
| 124 | + $content = ''; |
117 | 125 | $msgId = UniqueIdGenerator::generateId('msg_'); |
| 126 | + $usage = new Usage(0, 0); |
118 | 127 |
|
119 | | - echo "\n"; |
120 | 128 | while (! $stream->eof()) { |
121 | 129 | if (!$line = SSEParser::parseNextSSEEvent($stream)) { |
122 | 130 | continue; |
123 | 131 | } |
124 | 132 |
|
125 | | - yield new AudioChunk($msgId, ''); |
| 133 | + if ($line['type'] === 'transcript.text.delta') { |
| 134 | + $content .= $line['delta']; |
| 135 | + yield new TextChunk($msgId, $line['delta']); |
| 136 | + } |
126 | 137 |
|
127 | | - echo "\n".json_encode($line); |
| 138 | + if ($line['type'] === 'transcript.text.done') { |
| 139 | + $usage->inputTokens = $line['usage']['prompt_tokens'] ?? 0; |
| 140 | + $usage->outputTokens = $line['usage']['completion_tokens'] ?? 0; |
| 141 | + } |
128 | 142 | } |
129 | | - echo "\n\n"; |
130 | 143 |
|
131 | | - return new AssistantMessage(''); |
| 144 | + $message = new AssistantMessage($content); |
| 145 | + $message->setUsage($usage); |
| 146 | + return $message; |
132 | 147 | } |
133 | 148 |
|
134 | 149 | protected function addFile(array &$body, AudioContent $audio): void |
|
0 commit comments