Skip to content
Merged
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
8 changes: 6 additions & 2 deletions frontend/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,12 @@ For single-turn targets or targets that cannot replay the first prompt as histor
without copying the response. After a successful single send, **Undo last send**
also restores the prompt in a new conversation, if the target can replay the
preceding history. Both actions restore the saved prompt and converter results
for text, image, audio, video, and mixed responses. They do not overwrite new
prompt edits or changed converter pipelines.
for text, image, audio, video, and mixed responses when the converter pipeline
has not changed. If you change the pipeline, both actions keep your
current converters and temporary settings, restore the original prompt, and
discard the old conversion results. You can then convert the prompt again.
Neither action overwrites new prompt or working-input edits, sends a prompt,
or runs a converter.
When you save an edited conversation, its final user turn moves to the prompt
box instead of saved history. Text and attachments retain their metadata,
including text-only video remix IDs. You can enter and edit prompts without a target.
Expand Down
4 changes: 1 addition & 3 deletions frontend/e2e/chat-recovery.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -708,7 +708,7 @@ test.describe("Chat processing recovery @seeded", () => {
});
}

test("warns about lost converter choices when recovering a saved failure to a new attack", async ({
test("restores original media when recovering a saved failure to a new attack", async ({
page, request, localTarget, imageConverterId,
}) => {
await page.getByTestId("file-input").setInputFiles({
Expand Down Expand Up @@ -747,7 +747,6 @@ test.describe("Chat processing recovery @seeded", () => {
await expect(page).toHaveURL((url: URL) => url.pathname.includes(created.attack_result_id));
await expect(page.getByTestId("chat-input")).toHaveValue("Restore the original image");
await expect(page.getByRole("button", { name: `Remove ${originalImage.original_filename}`, exact: true })).toBeVisible();
await expect(page.getByText(/Converter choices could not be restored/)).toBeVisible();
await expect(page.getByTestId("clear-media-conversion-image")).toHaveCount(0);
await expect(page.getByTestId(/^message-bubble-/)).toHaveCount(0);
expect(localTarget.requestBodies).toHaveLength(1);
Expand All @@ -761,7 +760,6 @@ test.describe("Chat processing recovery @seeded", () => {
expect(payload.pieces.every((piece) => !piece.applied_converter_ids?.length)).toBe(true);
expect(retried.messages.messages[0].message_pieces[1].original_value)
.toBe(originalImage.original_value);
await expect(page.getByText(/Converter choices could not be restored/)).toHaveCount(0);
const historyResponse = await request.get(
`/api/attacks/${retried.attack.attack_result_id}/messages?conversation_id=${retried.messages.conversation_id}`,
{ headers: compatibilityHeaders() },
Expand Down
Loading
Loading