Skip to content

Commit 8886359

Browse files
authored
feat(OpenAI): Add missing fields to OutputImageGenerationToolCall (#742)
* Add missing fields to `OutputImageGenerationToolCall` Add missing fields (`action`, `background`, `output_format`, `quality`, `revised_prompt`, `size`) to `OutputImageGenerationToolCall` (available via the official Python SDK). Example Request: ```python3 import openai response = openai.responses.create( model="gpt-5", input="Generate an image of gray tabby cat hugging an otter with an orange scarf", tools=[{"type": "image_generation"}], ) image_generation_call = next(output for output in response.output if output.type == "image_generation_call") print(image_generation_call) ``` Example Response: ```python3 ImageGenerationCall( id='ig_123', result='...', status='completed', type='image_generation_call', action='generate', background='opaque', output_format='webp', quality='high', revised_prompt='A gray tabby cat hugging an otter. The otter is wearing an orange scarf. Both animals are cute and friendly, depicted in a warm, heartwarming style.', size='1536x1024' ) ``` * Fix OutputCodeInterpreterToolCall test
1 parent 7871ffb commit 8886359

File tree

5 files changed

+132
-37
lines changed

5 files changed

+132
-37
lines changed

src/Responses/Responses/Output/OutputImageGenerationToolCall.php

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
use OpenAI\Testing\Responses\Concerns\Fakeable;
1010

1111
/**
12-
* @phpstan-type OutputImageGenerationToolCallType array{id: string, result?: string|null, status: string, type: 'image_generation_call'}
12+
* @phpstan-type OutputImageGenerationToolCallType array{id: string, result?: string|null, status: string, type: 'image_generation_call', action?: string|null, background?: string|null, output_format?: string|null, quality?: string|null, revised_prompt?: string|null, size?: string|null}
1313
*
1414
* @implements ResponseContract<OutputImageGenerationToolCallType>
1515
*/
@@ -30,6 +30,12 @@ private function __construct(
3030
public readonly ?string $result,
3131
public readonly string $status,
3232
public readonly string $type,
33+
public readonly ?string $action,
34+
public readonly ?string $background,
35+
public readonly ?string $outputFormat,
36+
public readonly ?string $quality,
37+
public readonly ?string $revisedPrompt,
38+
public readonly ?string $size,
3339
) {}
3440

3541
/**
@@ -42,6 +48,12 @@ public static function from(array $attributes): self
4248
result: $attributes['result'] ?? null,
4349
status: $attributes['status'],
4450
type: $attributes['type'],
51+
action: $attributes['action'] ?? null,
52+
background: $attributes['background'] ?? null,
53+
outputFormat: $attributes['output_format'] ?? null,
54+
quality: $attributes['quality'] ?? null,
55+
revisedPrompt: $attributes['revised_prompt'] ?? null,
56+
size: $attributes['size'] ?? null,
4557
);
4658
}
4759

@@ -55,6 +67,12 @@ public function toArray(): array
5567
'result' => $this->result,
5668
'status' => $this->status,
5769
'type' => $this->type,
70+
'action' => $this->action,
71+
'background' => $this->background,
72+
'output_format' => $this->outputFormat,
73+
'quality' => $this->quality,
74+
'revised_prompt' => $this->revisedPrompt,
75+
'size' => $this->size,
5876
];
5977
}
6078
}

tests/Fixtures/Responses.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -702,6 +702,25 @@ function outputCustomToolCall(): array
702702
];
703703
}
704704

705+
/**
706+
* @return array<string, mixed>
707+
*/
708+
function outputImageGenerationToolCall(): array
709+
{
710+
return [
711+
'id' => 'ig_67ccf18f64008190a39b619f4c8455ef087bb177ab789d5c',
712+
'result' => 'iVBORw0KGgoAAAAN...',
713+
'status' => 'completed',
714+
'type' => 'image_generation_call',
715+
'action' => 'generate',
716+
'background' => 'opaque',
717+
'output_format' => 'webp',
718+
'quality' => 'high',
719+
'revised_prompt' => 'This is a revised prompt.',
720+
'size' => '1536x1024',
721+
];
722+
}
723+
705724
/**
706725
* @return array<string, mixed>
707726
*/
Lines changed: 50 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,50 @@
1-
data: {"type":"response.created","sequence_number":0,"response":{"id":"resp_684eb11908b881a180caf1a8d0aadaed0c3243c98c3d50bb","object":"response","created_at":1749987609,"status":"in_progress","background":false,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"model":"gpt-4.1-mini-2025-04-14","output":[],"parallel_tool_calls":true,"previous_response_id":null,"reasoning":{"effort":null,"summary":null},"service_tier":"auto","store":true,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"auto","tools":[{"type":"image_generation","background":"auto","moderation":"auto","n":1,"output_compression":100,"output_format":"png","quality":"low","size":"1024x1024"}],"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}}}
2-
data: {"type":"response.in_progress","sequence_number":1,"response":{"id":"resp_684eb11908b881a180caf1a8d0aadaed0c3243c98c3d50bb","object":"response","created_at":1749987609,"status":"in_progress","background":false,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"model":"gpt-4.1-mini-2025-04-14","output":[],"parallel_tool_calls":true,"previous_response_id":null,"reasoning":{"effort":null,"summary":null},"service_tier":"auto","store":true,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"auto","tools":[{"type":"image_generation","background":"auto","moderation":"auto","n":1,"output_compression":100,"output_format":"png","quality":"low","size":"1024x1024"}],"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}}}
3-
data: {"type":"response.output_item.added","sequence_number":2,"output_index":0,"item":{"id":"ig_684eb119786c81a19939e1cb5384033f0c3243c98c3d50bb","type":"image_generation_call","status":"in_progress"}}
4-
data: {"type":"response.image_generation_call.in_progress","sequence_number":3,"output_index":0,"item_id":"ig_684eb119786c81a19939e1cb5384033f0c3243c98c3d50bb"}
5-
data: {"type":"response.image_generation_call.generating","sequence_number":4,"output_index":0,"item_id":"ig_684eb119786c81a19939e1cb5384033f0c3243c98c3d50bb"}
6-
data: {"type":"response.image_generation_call.partial_image","sequence_number":5,"output_index":0,"item_id":"ig_684eb119786c81a19939e1cb5384033f0c3243c98c3d50bb","partial_image_index":0,"partial_image_b64":"R0lGODlhAQABAAAAACw=","size":"1024x1024","quality":"low","background":"opaque","output_format":"png"}
7-
data: {"type":"response.image_generation_call.partial_image","sequence_number":6,"output_index":0,"item_id":"ig_684eb119786c81a19939e1cb5384033f0c3243c98c3d50bb","partial_image_index":1,"partial_image_b64":"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=","size":"1024x1024","quality":"low","background":"opaque","output_format":"png"}
8-
data: {"type":"response.image_generation_call.completed","sequence_number":7,"output_index":0,"item_id":"ig_684eb119786c81a19939e1cb5384033f0c3243c98c3d50bb"}
9-
data: {"type":"response.output_item.done","sequence_number":8,"output_index":0,"item":{"id":"ig_684eb119786c81a19939e1cb5384033f0c3243c98c3d50bb","type":"image_generation_call","status":"completed","background":"opaque","output_format":"png","quality":"low","result":"","revised_prompt":"A single black line forming a perfect circle on a white background","size":"1024x1024"}}
10-
data: {"type":"response.output_item.added","sequence_number":9,"output_index":1,"item":{"id":"msg_684eb127559081a197c4584b23ba6b6a0c3243c98c3d50bb","type":"message","status":"in_progress","content":[],"role":"assistant"}}
11-
data: {"type":"response.content_part.added","sequence_number":10,"item_id":"msg_684eb127559081a197c4584b23ba6b6a0c3243c98c3d50bb","output_index":1,"content_index":0,"part":{"type":"output_text","annotations":[],"text":""}}
12-
data: {"type":"response.output_text.delta","sequence_number":11,"item_id":"msg_684eb127559081a197c4584b23ba6b6a0c3243c98c3d50bb","output_index":1,"content_index":0,"delta":"Here"}
13-
data: {"type":"response.output_text.delta","sequence_number":12,"item_id":"msg_684eb127559081a197c4584b23ba6b6a0c3243c98c3d50bb","output_index":1,"content_index":0,"delta":" is"}
14-
data: {"type":"response.output_text.delta","sequence_number":13,"item_id":"msg_684eb127559081a197c4584b23ba6b6a0c3243c98c3d50bb","output_index":1,"content_index":0,"delta":" a"}
15-
data: {"type":"response.output_text.delta","sequence_number":14,"item_id":"msg_684eb127559081a197c4584b23ba6b6a0c3243c98c3d50bb","output_index":1,"content_index":0,"delta":" single"}
16-
data: {"type":"response.output_text.delta","sequence_number":15,"item_id":"msg_684eb127559081a197c4584b23ba6b6a0c3243c98c3d50bb","output_index":1,"content_index":0,"delta":" black"}
17-
data: {"type":"response.output_text.delta","sequence_number":16,"item_id":"msg_684eb127559081a197c4584b23ba6b6a0c3243c98c3d50bb","output_index":1,"content_index":0,"delta":" line"}
18-
data: {"type":"response.output_text.delta","sequence_number":17,"item_id":"msg_684eb127559081a197c4584b23ba6b6a0c3243c98c3d50bb","output_index":1,"content_index":0,"delta":" in"}
19-
data: {"type":"response.output_text.delta","sequence_number":18,"item_id":"msg_684eb127559081a197c4584b23ba6b6a0c3243c98c3d50bb","output_index":1,"content_index":0,"delta":" a"}
20-
data: {"type":"response.output_text.delta","sequence_number":19,"item_id":"msg_684eb127559081a197c4584b23ba6b6a0c3243c98c3d50bb","output_index":1,"content_index":0,"delta":" perfect"}
21-
data: {"type":"response.output_text.delta","sequence_number":20,"item_id":"msg_684eb127559081a197c4584b23ba6b6a0c3243c98c3d50bb","output_index":1,"content_index":0,"delta":" circle"}
22-
data: {"type":"response.output_text.delta","sequence_number":21,"item_id":"msg_684eb127559081a197c4584b23ba6b6a0c3243c98c3d50bb","output_index":1,"content_index":0,"delta":"."}
23-
data: {"type":"response.output_text.delta","sequence_number":22,"item_id":"msg_684eb127559081a197c4584b23ba6b6a0c3243c98c3d50bb","output_index":1,"content_index":0,"delta":" Let"}
24-
data: {"type":"response.output_text.delta","sequence_number":23,"item_id":"msg_684eb127559081a197c4584b23ba6b6a0c3243c98c3d50bb","output_index":1,"content_index":0,"delta":" me"}
25-
data: {"type":"response.output_text.delta","sequence_number":24,"item_id":"msg_684eb127559081a197c4584b23ba6b6a0c3243c98c3d50bb","output_index":1,"content_index":0,"delta":" know"}
26-
data: {"type":"response.output_text.delta","sequence_number":25,"item_id":"msg_684eb127559081a197c4584b23ba6b6a0c3243c98c3d50bb","output_index":1,"content_index":0,"delta":" if"}
27-
data: {"type":"response.output_text.delta","sequence_number":26,"item_id":"msg_684eb127559081a197c4584b23ba6b6a0c3243c98c3d50bb","output_index":1,"content_index":0,"delta":" you"}
28-
data: {"type":"response.output_text.delta","sequence_number":27,"item_id":"msg_684eb127559081a197c4584b23ba6b6a0c3243c98c3d50bb","output_index":1,"content_index":0,"delta":" need"}
29-
data: {"type":"response.output_text.delta","sequence_number":28,"item_id":"msg_684eb127559081a197c4584b23ba6b6a0c3243c98c3d50bb","output_index":1,"content_index":0,"delta":" any"}
30-
data: {"type":"response.output_text.delta","sequence_number":29,"item_id":"msg_684eb127559081a197c4584b23ba6b6a0c3243c98c3d50bb","output_index":1,"content_index":0,"delta":" modifications"}
31-
data: {"type":"response.output_text.delta","sequence_number":30,"item_id":"msg_684eb127559081a197c4584b23ba6b6a0c3243c98c3d50bb","output_index":1,"content_index":0,"delta":"."}
32-
data: {"type":"response.output_text.done","sequence_number":31,"item_id":"msg_684eb127559081a197c4584b23ba6b6a0c3243c98c3d50bb","output_index":1,"content_index":0,"text":"Here is a single black line in a perfect circle. Let me know if you need any modifications."}
33-
data: {"type":"response.content_part.done","sequence_number":32,"item_id":"msg_684eb127559081a197c4584b23ba6b6a0c3243c98c3d50bb","output_index":1,"content_index":0,"part":{"type":"output_text","annotations":[],"text":"Here is a single black line in a perfect circle. Let me know if you need any modifications."}}
34-
data: {"type":"response.output_item.done","sequence_number":33,"output_index":1,"item":{"id":"msg_684eb127559081a197c4584b23ba6b6a0c3243c98c3d50bb","type":"message","status":"completed","content":[{"type":"output_text","annotations":[],"text":"Here is a single black line in a perfect circle. Let me know if you need any modifications."}],"role":"assistant"}}
35-
data: {"type":"response.completed","sequence_number":34,"response":{"id":"resp_684eb11908b881a180caf1a8d0aadaed0c3243c98c3d50bb","object":"response","created_at":1749987609,"status":"completed","background":false,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"model":"gpt-4.1-mini-2025-04-14","output":[{"id":"ig_684eb119786c81a19939e1cb5384033f0c3243c98c3d50bb","type":"image_generation_call","status":"completed","background":"opaque","output_format":"png","quality":"low","result":"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=","revised_prompt":"A single black line forming a perfect circle on a white background","size":"1024x1024"},{"id":"msg_684eb127559081a197c4584b23ba6b6a0c3243c98c3d50bb","type":"message","status":"completed","content":[{"type":"output_text","annotations":[],"text":"Here is a single black line in a perfect circle. Let me know if you need any modifications."}],"role":"assistant"}],"parallel_tool_calls":true,"previous_response_id":null,"reasoning":{"effort":null,"summary":null},"service_tier":"default","store":true,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"auto","tools":[{"type":"image_generation","background":"auto","moderation":"auto","n":1,"output_compression":100,"output_format":"png","quality":"low","size":"1024x1024"}],"top_p":1.0,"truncation":"disabled","usage":{"input_tokens":3902,"input_tokens_details":{"cached_tokens":0},"output_tokens":46,"output_tokens_details":{"reasoning_tokens":0},"total_tokens":3948},"user":null,"metadata":{}}}
1+
event: response.created
2+
data: {"type":"response.created","response":{"id":"resp_67ccf18ef5fc8190b16dbee19bc54e5f087bb177ab789d5c","object":"response","created_at":1741484430,"status":"in_progress","background":false,"completed_at":null,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"gpt-5-nano-2025-08-07","output":[],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":null,"reasoning":{"effort":"medium","summary":null},"safety_identifier":null,"service_tier":"auto","store":true,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"type":"image_generation","background":"auto","model":"gpt-image-1","moderation":"auto","n":1,"output_compression":100,"output_format":"png","quality":"auto","size":"auto"}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}},"sequence_number":0}
3+
4+
event: response.in_progress
5+
data: {"type":"response.in_progress","response":{"id":"resp_67ccf18ef5fc8190b16dbee19bc54e5f087bb177ab789d5c","object":"response","created_at":1741484430,"status":"in_progress","background":false,"completed_at":null,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"gpt-5-nano-2025-08-07","output":[],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":null,"reasoning":{"effort":"medium","summary":null},"safety_identifier":null,"service_tier":"auto","store":true,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"type":"image_generation","background":"auto","model":"gpt-image-1","moderation":"auto","n":1,"output_compression":100,"output_format":"png","quality":"auto","size":"auto"}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}},"sequence_number":1}
6+
7+
event: response.output_item.added
8+
data: {"type":"response.output_item.added","item":{"id":"rs_67ccf18ef5fc8190b16dbee19bc54e5f087bb177ab789d5c","type":"reasoning","summary":[]},"output_index":0,"sequence_number":2}
9+
10+
event: response.output_item.done
11+
data: {"type":"response.output_item.done","item":{"id":"rs_67ccf18ef5fc8190b16dbee19bc54e5f087bb177ab789d5c","type":"reasoning","summary":[]},"output_index":0,"sequence_number":3}
12+
13+
event: response.output_item.added
14+
data: {"type":"response.output_item.added","item":{"id":"ig_67ccf18ef5fc8190b16dbee19bc54e5f087bb177ab789d5c","type":"image_generation_call","status":"in_progress"},"output_index":1,"sequence_number":4}
15+
16+
event: response.image_generation_call.in_progress
17+
data: {"type":"response.image_generation_call.in_progress","item_id":"ig_67ccf18ef5fc8190b16dbee19bc54e5f087bb177ab789d5c","output_index":1,"sequence_number":5}
18+
19+
event: response.image_generation_call.generating
20+
data: {"type":"response.image_generation_call.generating","item_id":"ig_67ccf18ef5fc8190b16dbee19bc54e5f087bb177ab789d5c","output_index":1,"sequence_number":6}
21+
22+
event: response.image_generation_call.partial_image
23+
data: {"type":"response.image_generation_call.partial_image","background":"opaque","item_id":"ig_67ccf18ef5fc8190b16dbee19bc54e5f087bb177ab789d5c","output_format":"png","output_index":1,"partial_image_b64":"iVBORw0KGgoAAAAN...","partial_image_index":0,"quality":"high","sequence_number":7,"size":"1536x1024"}
24+
25+
event: response.output_item.done
26+
data: {"type":"response.output_item.done","item":{"id":"ig_67ccf18ef5fc8190b16dbee19bc54e5f087bb177ab789d5c","type":"image_generation_call","status":"generating","action":"generate","background":"opaque","output_format":"png","quality":"high","result":"iVBORw0KGgoAAAAN...","revised_prompt":"This is a revised prompt.","size":"1536x1024"},"output_index":1,"sequence_number":8}
27+
28+
event: response.output_item.added
29+
data: {"type":"response.output_item.added","item":{"id":"rs_67ccf18ef5fc8190b16dbee19bc54e5f087bb177ab789d5c","type":"reasoning","summary":[]},"output_index":2,"sequence_number":9}
30+
31+
event: response.output_item.done
32+
data: {"type":"response.output_item.done","item":{"id":"rs_67ccf18ef5fc8190b16dbee19bc54e5f087bb177ab789d5c","type":"reasoning","summary":[]},"output_index":2,"sequence_number":10}
33+
34+
event: response.output_item.added
35+
data: {"type":"response.output_item.added","item":{"id":"msg_67ccf18ef5fc8190b16dbee19bc54e5f087bb177ab789d5c","type":"message","status":"in_progress","content":[],"role":"assistant"},"output_index":3,"sequence_number":11}
36+
37+
event: response.content_part.added
38+
data: {"type":"response.content_part.added","content_index":0,"item_id":"msg_67ccf18ef5fc8190b16dbee19bc54e5f087bb177ab789d5c","output_index":3,"part":{"type":"output_text","annotations":[],"logprobs":[],"text":""},"sequence_number":12}
39+
40+
event: response.output_text.done
41+
data: {"type":"response.output_text.done","content_index":0,"item_id":"msg_67ccf18ef5fc8190b16dbee19bc54e5f087bb177ab789d5c","logprobs":[],"output_index":3,"sequence_number":13,"text":""}
42+
43+
event: response.content_part.done
44+
data: {"type":"response.content_part.done","content_index":0,"item_id":"msg_67ccf18ef5fc8190b16dbee19bc54e5f087bb177ab789d5c","output_index":3,"part":{"type":"output_text","annotations":[],"logprobs":[],"text":""},"sequence_number":14}
45+
46+
event: response.output_item.done
47+
data: {"type":"response.output_item.done","item":{"id":"msg_67ccf18ef5fc8190b16dbee19bc54e5f087bb177ab789d5c","type":"message","status":"completed","content":[{"type":"output_text","annotations":[],"logprobs":[],"text":""}],"role":"assistant"},"output_index":3,"sequence_number":15}
48+
49+
event: response.completed
50+
data: {"type":"response.completed","response":{"id":"resp_67ccf18ef5fc8190b16dbee19bc54e5f087bb177ab789d5c","object":"response","created_at":1741484430,"status":"completed","background":false,"completed_at":1741484430,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"gpt-5-nano-2025-08-07","output":[{"id":"rs_67ccf18ef5fc8190b16dbee19bc54e5f087bb177ab789d5c","type":"reasoning","summary":[]},{"id":"ig_67ccf18ef5fc8190b16dbee19bc54e5f087bb177ab789d5c","type":"image_generation_call","status":"generating","action":"generate","background":"opaque","output_format":"png","quality":"high","result":"iVBORw0KGgoAAAAN...","revised_prompt":"This is a revised prompt.","size":"1536x1024"},{"id":"rs_67ccf18ef5fc8190b16dbee19bc54e5f087bb177ab789d5c","type":"reasoning","summary":[]},{"id":"msg_67ccf18ef5fc8190b16dbee19bc54e5f087bb177ab789d5c","type":"message","status":"completed","content":[{"type":"output_text","annotations":[],"logprobs":[],"text":""}],"role":"assistant"}],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":null,"reasoning":{"effort":"medium","summary":null},"safety_identifier":null,"service_tier":"default","store":true,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"type":"image_generation","background":"auto","model":"gpt-image-1","moderation":"auto","n":1,"output_compression":100,"output_format":"png","quality":"auto","size":"auto"}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":{"input_tokens":2048,"input_tokens_details":{"cached_tokens":0},"output_tokens":2048,"output_tokens_details":{"reasoning_tokens":2048},"total_tokens":4096},"user":null,"metadata":{}},"sequence_number":16}

0 commit comments

Comments
 (0)