Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 31 additions & 30 deletions src/content/docs/workers/examples/openai-sdk-streaming.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -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<Response> {
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<Response> {
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<Env>;
```
Loading