Skip to content

Commit 6036172

Browse files
feat(api): manual updates
1 parent 2d0c448 commit 6036172

File tree

9 files changed

+510
-11
lines changed

9 files changed

+510
-11
lines changed

.stats.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
configured_endpoints: 111
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai%2Fopenai-c7dacca97e28bceff218684bb429481a70aa47aadad983ed9178bfda75ff4cd2.yml
3-
openapi_spec_hash: 28eb1bb901ca10d2e37db4606d2bcfa7
4-
config_hash: 167ad0ca036d0f023c78e6496b4311e8
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai%2Fopenai-670ea0d2cc44f52a87dd3cadea45632953283e0636ba30788fdbdb22a232ccac.yml
3+
openapi_spec_hash: d8b7d38911fead545adf3e4297956410
4+
config_hash: 5525bda35e48ea6387c6175c4d1651fa

api.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,12 @@ Methods:
119119
Types:
120120

121121
- <code><a href="./src/resources/images.ts">Image</a></code>
122+
- <code><a href="./src/resources/images.ts">ImageEditCompletedEvent</a></code>
123+
- <code><a href="./src/resources/images.ts">ImageEditPartialImageEvent</a></code>
124+
- <code><a href="./src/resources/images.ts">ImageEditStreamEvent</a></code>
125+
- <code><a href="./src/resources/images.ts">ImageGenCompletedEvent</a></code>
126+
- <code><a href="./src/resources/images.ts">ImageGenPartialImageEvent</a></code>
127+
- <code><a href="./src/resources/images.ts">ImageGenStreamEvent</a></code>
122128
- <code><a href="./src/resources/images.ts">ImageModel</a></code>
123129
- <code><a href="./src/resources/images.ts">ImagesResponse</a></code>
124130

examples/image-stream.ts

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#!/usr/bin/env -S npm run tsn -T
2+
3+
import OpenAI from 'openai';
4+
import fs from 'fs';
5+
import path from 'path';
6+
7+
const client = new OpenAI();
8+
9+
const main = async () => {
10+
const stream = await client.images.generate({
11+
model: 'gpt-image-1',
12+
prompt: 'A cute baby sea otter',
13+
n: 1,
14+
size: '1024x1024',
15+
stream: true,
16+
partial_images: 3,
17+
});
18+
19+
for await (const event of stream) {
20+
let filename: string;
21+
let imageBuffer: Buffer;
22+
switch (event.type) {
23+
case 'image_generation.partial_image':
24+
console.log(` Partial image ${event.partial_image_index + 1}/3 received`);
25+
console.log(` Size: ${event.b64_json.length} characters (base64)`);
26+
27+
// Save partial image to file
28+
filename = `partial_${event.partial_image_index + 1}.png`;
29+
imageBuffer = Buffer.from(event.b64_json, 'base64');
30+
fs.writeFileSync(filename, imageBuffer);
31+
console.log(` 💾 Saved to: ${path.resolve(filename)}`);
32+
break;
33+
case 'image_generation.completed':
34+
console.log(`\n✅ Final image completed!`);
35+
console.log(` Size: ${event.b64_json.length} characters (base64)`);
36+
37+
// Save final image to file
38+
filename = 'final_image.png';
39+
imageBuffer = Buffer.from(event.b64_json, 'base64');
40+
fs.writeFileSync(filename, imageBuffer);
41+
console.log(` Saved to: ${path.resolve(filename)}`);
42+
break;
43+
default:
44+
console.log(`❓ Unknown event: ${event}`);
45+
}
46+
}
47+
};
48+
49+
main().catch((error) => {
50+
console.error('Error generating image:', error);
51+
});

src/client.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,18 @@ import {
5757
import {
5858
Image,
5959
ImageCreateVariationParams,
60+
ImageEditCompletedEvent,
6061
ImageEditParams,
62+
ImageEditParamsNonStreaming,
63+
ImageEditParamsStreaming,
64+
ImageEditPartialImageEvent,
65+
ImageEditStreamEvent,
66+
ImageGenCompletedEvent,
67+
ImageGenPartialImageEvent,
68+
ImageGenStreamEvent,
6169
ImageGenerateParams,
70+
ImageGenerateParamsNonStreaming,
71+
ImageGenerateParamsStreaming,
6272
ImageModel,
6373
Images,
6474
ImagesResponse,
@@ -1039,11 +1049,21 @@ export declare namespace OpenAI {
10391049
export {
10401050
Images as Images,
10411051
type Image as Image,
1052+
type ImageEditCompletedEvent as ImageEditCompletedEvent,
1053+
type ImageEditPartialImageEvent as ImageEditPartialImageEvent,
1054+
type ImageEditStreamEvent as ImageEditStreamEvent,
1055+
type ImageGenCompletedEvent as ImageGenCompletedEvent,
1056+
type ImageGenPartialImageEvent as ImageGenPartialImageEvent,
1057+
type ImageGenStreamEvent as ImageGenStreamEvent,
10421058
type ImageModel as ImageModel,
10431059
type ImagesResponse as ImagesResponse,
10441060
type ImageCreateVariationParams as ImageCreateVariationParams,
10451061
type ImageEditParams as ImageEditParams,
1062+
type ImageEditParamsNonStreaming as ImageEditParamsNonStreaming,
1063+
type ImageEditParamsStreaming as ImageEditParamsStreaming,
10461064
type ImageGenerateParams as ImageGenerateParams,
1065+
type ImageGenerateParamsNonStreaming as ImageGenerateParamsNonStreaming,
1066+
type ImageGenerateParamsStreaming as ImageGenerateParamsStreaming,
10471067
};
10481068

10491069
export { Audio as Audio, type AudioModel as AudioModel, type AudioResponseFormat as AudioResponseFormat };

src/core/streaming.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ export class Stream<Item> implements AsyncIterable<Item> {
5757
if (
5858
sse.event === null ||
5959
sse.event.startsWith('response.') ||
60+
sse.event.startsWith('image_edit.') ||
61+
sse.event.startsWith('image_generation.') ||
6062
sse.event.startsWith('transcript.')
6163
) {
6264
let data;

0 commit comments

Comments
 (0)