Skip to content

FIX: pass the attack objective to the Crescendo refusal check - #3562

Open
Manohar Paturi (ManoharPaturi) wants to merge 6 commits into
microsoft:mainfrom
ManoharPaturi:fix/crescendo-refusal-objective
Open

Manohar Paturi (ManoharPaturi) wants to merge 6 commits into
microsoft:mainfrom
ManoharPaturi:fix/crescendo-refusal-objective

Conversation

@ManoharPaturi

Copy link
Copy Markdown
Contributor

Description

Fixes the linked issue

_perform_backtrack_if_refused_async was passing prompt_sent into _check_refusal_async's objective parameter, so the refusal judge evaluated deflection against the adversarial prompt itself and the persisted expectation recorded the prompt as the objective. The call now passes context.objective, matching the parameter's contract and every other scoring call in the class.

Tests and Documentation

Added a regression test that runs the backtrack path with a refusal score and asserts the scorer received the context objective, not the prompt. It fails before the change and passes after. The full Crescendo suite passes (85 tests).

No documentation change needed, so I did not run JupyText.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The refusal scorer now receives the attack objective, while prompt_sent remains available for backtrack feedback. The regression test uses a different sent prompt and checks the scorer expectation. No blocking issues found by code inspection. Tests were not run for this review. AI-assisted review (GitHub Copilot).

@ManoharPaturi

Copy link
Copy Markdown
Contributor Author

The CI failures came from a preexisting test that pinned the old behavior: test_crescendo_keeps_refusal_criterion_separate_async asserted the refusal scorer receives the sent prompt as its expectation objective, which is exactly the wrong reference this PR replaces. 5e01e95 moves that assertion to the attack objective with a comment naming why, and merges current main. Both affected suites pass locally at 126 tests. The coverage failure was the same test failing under the coverage run.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants