Skip to content
Open
Show file tree
Hide file tree
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
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ fn image_generation_hint(
image_output_path: impl Display,
) -> String {
format!(
"Generated images are saved to {image_output_dir} as {image_output_path} by default.\nIf you need to use a generated image at another path, copy it and leave the original in place unless the user explicitly asks you to delete it."
"Generated images are saved to {image_output_dir} as {image_output_path} by default.\nAlready displayed; do not repeat it or an unchanged copy in final Markdown unless asked.\nFor another path, copy it and keep the original unless asked to delete it."
)
}

Expand Down
14 changes: 10 additions & 4 deletions codex-rs/core/tests/suite/model_switching.rs
Original file line number Diff line number Diff line change
Expand Up @@ -703,8 +703,11 @@ async fn generated_image_is_replayed_for_image_capable_models() -> Result<()> {
second_request
.message_input_texts("developer")
.iter()
.any(|text| text.contains("Generated images are saved to")),
"second request should include the saved-path note in model-visible history"
.any(|text| {
text.contains("Generated images are saved to")
&& text.contains("do not repeat it or an unchanged copy")
}),
"second request should include the saved-path and render-once note in model-visible history"
);
let _ = std::fs::remove_file(&saved_path);

Expand Down Expand Up @@ -827,8 +830,11 @@ async fn model_change_from_generated_image_to_text_preserves_prior_generated_ima
second_request
.message_input_texts("developer")
.iter()
.any(|text| text.contains("Generated images are saved to")),
"second request should include the saved-path note in model-visible history"
.any(|text| {
text.contains("Generated images are saved to")
&& text.contains("do not repeat it or an unchanged copy")
}),
"second request should include the saved-path and render-once note in model-visible history"
);
let _ = std::fs::remove_file(&saved_path);

Expand Down
9 changes: 7 additions & 2 deletions codex-rs/ext/image-generation/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -224,9 +224,12 @@ async fn recent_image_fallback_requires_requested_count() {
fn generated_output_returns_image_input_and_output_hint() {
let output_hint =
extension_image_generation_output_hint("/tmp", "/tmp/call-1.png").expect("hint should fit");
let expected_output_hint = "Generated images are saved to /tmp as /tmp/call-1.png by default.
Already displayed; do not repeat it or an unchanged copy in final Markdown unless asked.
For another path, copy it and keep the original unless asked to delete it.";
let output = GeneratedImageOutput {
result: RESULT.to_string(),
output_hint: Some(output_hint.clone()),
output_hint: Some(output_hint),
};

let ResponseInputItem::FunctionCallOutput {
Expand All @@ -246,7 +249,9 @@ fn generated_output_returns_image_input_and_output_hint() {
image_url: format!("data:image/png;base64,{RESULT}"),
detail: Some(DEFAULT_IMAGE_DETAIL),
},
FunctionCallOutputContentItem::InputText { text: output_hint },
FunctionCallOutputContentItem::InputText {
text: expected_output_hint.to_string(),
},
]
);
}
Expand Down
Loading