mirror of
https://github.com/openai/codex.git
synced 2026-10-21 17:48:44 +00:00
Store generated image items as attachment references (#54398)
## What changed - Upload generated images to the attachment store and expose `fileId` in image-generation items when available, with inline `result` fallback on upload or decoding failure. - Preserve file references through legacy events, persisted rollouts, thread history, and task output summaries. Keep model-facing image preparation separate. - Add attachment request tags and mark generated-image uploads with `usage=image_gen`, preserving the thread's ephemeral setting. - Update public schemas and SDK types to accept either image representation, retain the Python `ImageGenerationThreadItem` alias, and prefer `fileId` when reading records containing both fields. ## Testing Add coverage for file-backed generation and rollout persistence, legacy history replay, inline and transitional serialization, task output visibility, and Python SDK alias compatibility. GitOrigin-RevId: f7a2bb5707e2f277348a547a988bc33c8e96d891
This commit is contained in:
committed by
copyberry
parent
1ef30bcbe7
commit
aabf13307a
@@ -5524,18 +5524,35 @@ class SleepThreadItem(BaseModel):
|
||||
type: Annotated[Literal["sleep"], Field(title="SleepThreadItemType")]
|
||||
|
||||
|
||||
class ImageGenerationThreadItem(BaseModel):
|
||||
class FileIdThreadItem(BaseModel):
|
||||
model_config = ConfigDict(
|
||||
populate_by_name=True,
|
||||
)
|
||||
failure: ImageGenerationFailure | None = None
|
||||
id: str
|
||||
result: str
|
||||
revised_prompt: Annotated[str | None, Field(alias="revisedPrompt")] = None
|
||||
saved_path: Annotated[AbsolutePathBuf | None, Field(alias="savedPath")] = None
|
||||
status: str
|
||||
transparent_background: Annotated[bool | None, Field(alias="transparentBackground")] = None
|
||||
type: Annotated[Literal["imageGeneration"], Field(title="ImageGenerationThreadItemType")]
|
||||
file_id: Annotated[str, Field(alias="fileId")]
|
||||
|
||||
|
||||
class ResultThreadItem(BaseModel):
|
||||
model_config = ConfigDict(
|
||||
populate_by_name=True,
|
||||
)
|
||||
failure: ImageGenerationFailure | None = None
|
||||
id: str
|
||||
revised_prompt: Annotated[str | None, Field(alias="revisedPrompt")] = None
|
||||
saved_path: Annotated[AbsolutePathBuf | None, Field(alias="savedPath")] = None
|
||||
status: str
|
||||
transparent_background: Annotated[bool | None, Field(alias="transparentBackground")] = None
|
||||
type: Annotated[Literal["imageGeneration"], Field(title="ImageGenerationThreadItemType")]
|
||||
result: str
|
||||
|
||||
|
||||
ImageGenerationThreadItem = ResultThreadItem
|
||||
|
||||
|
||||
class EnteredReviewModeThreadItem(BaseModel):
|
||||
@@ -11647,7 +11664,8 @@ class ThreadItem(
|
||||
| WebSearchThreadItem
|
||||
| ImageViewThreadItem
|
||||
| SleepThreadItem
|
||||
| ImageGenerationThreadItem
|
||||
| FileIdThreadItem
|
||||
| ResultThreadItem
|
||||
| EnteredReviewModeThreadItem
|
||||
| ExitedReviewModeThreadItem
|
||||
| ContextCompactionThreadItem
|
||||
@@ -11672,7 +11690,8 @@ class ThreadItem(
|
||||
| WebSearchThreadItem
|
||||
| ImageViewThreadItem
|
||||
| SleepThreadItem
|
||||
| ImageGenerationThreadItem
|
||||
| FileIdThreadItem
|
||||
| ResultThreadItem
|
||||
| EnteredReviewModeThreadItem
|
||||
| ExitedReviewModeThreadItem
|
||||
| ContextCompactionThreadItem
|
||||
|
||||
Reference in New Issue
Block a user