diff --git a/src/content/docs/workers/examples/openai-sdk-streaming.mdx b/src/content/docs/workers/examples/openai-sdk-streaming.mdx index 092255024743c2b..c9c416a30fe5fc7 100644 --- a/src/content/docs/workers/examples/openai-sdk-streaming.mdx +++ b/src/content/docs/workers/examples/openai-sdk-streaming.mdx @@ -12,49 +12,50 @@ sidebar: order: 1001 head: [] description: Use the OpenAI v4 SDK to stream responses from OpenAI. - --- In order to run this code, you must install the OpenAI SDK by running `npm i openai`. :::note - For analytics, caching, rate limiting, and more, you can also send requests like this through Cloudflare's [AI Gateway](/ai-gateway/providers/openai/). - ::: ```ts import OpenAI from "openai"; export default { - async fetch(request, env, ctx): Promise { - const openai = new OpenAI({ - apiKey: env.OPENAI_API_KEY - }); - -// Create a TransformStream to handle streaming data - let { readable, writable } = new TransformStream(); - let writer = writable.getWriter(); - const textEncoder = new TextEncoder(); - - ctx.waitUntil((async () => { - const stream = await openai.chat.completions.create({ - model: 'gpt-4o-mini', - messages: [{ role: 'user', content: 'Tell me a story' }], - stream: true, - }); - - // loop over the data as it is streamed and write to the writeable - for await (const part of stream) { - writer.write(textEncoder.encode(part.choices[0]?.delta?.content || '')); - } - writer.close(); - })()); - - // Send the readable back to the browser - return new Response(readable); - }, + async fetch(request, env, ctx): Promise { + const openai = new OpenAI({ + apiKey: env.OPENAI_API_KEY, + }); + + // Create a TransformStream to handle streaming data + let { readable, writable } = new TransformStream(); + let writer = writable.getWriter(); + const textEncoder = new TextEncoder(); + + ctx.waitUntil( + (async () => { + const stream = await openai.chat.completions.create({ + model: "gpt-4o-mini", + messages: [{ role: "user", content: "Tell me a story" }], + stream: true, + }); + + // loop over the data as it is streamed and write to the writeable + for await (const part of stream) { + writer.write( + textEncoder.encode(part.choices[0]?.delta?.content || ""), + ); + } + writer.close(); + })(), + ); + + // Send the readable back to the browser + return new Response(readable); + }, } satisfies ExportedHandler; ```