(ctrl)
| 44 | const decoder = new TextDecoder() |
| 45 | const stream = new ReadableStream({ |
| 46 | async pull(ctrl) { |
| 47 | const { done, value } = await reader.read() |
| 48 | if (done) { |
| 49 | ctrl.close() |
| 50 | return |
| 51 | } |
| 52 | ctrl.enqueue( |
| 53 | encoder.encode(decoder.decode(value, { stream: true }).replace(/"role"\s*:\s*""/g, '"role":"assistant"')), |
| 54 | ) |
| 55 | }, |
| 56 | cancel() { |
| 57 | reader.cancel() |
| 58 | }, |