Spaces:
Running
Running
| import type { ChatCompletionChunk } from "openai/resources"; | |
| export function createOpenAIStream( | |
| completion: AsyncIterable<ChatCompletionChunk>, | |
| callbacks: { onFinal: () => void } | |
| ): ReadableStream { | |
| const { readable, writable } = new TransformStream(); | |
| const writer = writable.getWriter(); | |
| const encoder = new TextEncoder(); | |
| let isFinished = false; | |
| async function forwardCompletion() { | |
| try { | |
| for await (const chunk of completion) { | |
| const { content } = chunk.choices[0].delta; | |
| if (content) { | |
| await writer.write(encoder.encode(`0:${JSON.stringify(content)}\n`)); | |
| } | |
| } | |
| } catch (error) { | |
| console.error("Error forwarding completion:", error); | |
| await writer.abort(error); | |
| } finally { | |
| isFinished = true; | |
| await writer.close(); | |
| callbacks.onFinal(); | |
| } | |
| } | |
| forwardCompletion(); | |
| return readable; | |
| } | |