Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

BUG: attacks record FAILURE when the objective scorer returns no score

Open
#3,112 2 comments 0 reactions 1 assignee View on GitHub

Maintainers usually reply within 2 days

@u7k4rs6 is already working on this.

Since Oct 13, 2026.

  • #3169 by @u7k4rs6 — open

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
45/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Active
Tech stack
python
Domain
ai

Research direction

Start with _determine_attack_outcome in prompt_sending.py, then check the matching logic in multi_prompt_sending.py, red_teaming.py around line 411, and chunked_request.py, where a missing score maps to FAILURE. Crescendo and TAP already raise in this case, so read them for the expected handling. Done means that when a scorer is configured, a response exists, and the score is None, the outcome is UNDETERMINED with the message 'Objective scorer returned no score', with tests covering the modality-mismatch case. The maintainer filed this to settle the outcome semantics first, so confirm the approach in the thread before changing code.

Written by the indexing model from the issue text.

Description

bug

When the objective scorer returns no score, several attacks record FAILURE, which reads as "measured and defended". AttackOutcome.UNDETERMINED exists for exactly this case.

  • prompt_sending.py _determine_attack_outcome: if response: return FAILURE
  • multi_prompt_sending.py: same
  • red_teaming.py:411: ... if context.last_score else AttackOutcome.FAILURE
  • chunked_request.py: "No score returned from scorer" maps to FAILURE

This happens e.g. when a text-only scorer gets an image response. Crescendo and TAP raise in the same situation instead, so the attacks don't agree either.

PromptSendingAttack:      outcome=FAILURE score=None reason='Failed to achieve objective after 1 attempts'
MultiPromptSendingAttack: outcome=FAILURE score=None reason='Failed to achieve objective'

It understates ASR for modality-mismatched runs, since unscored rows count as defended. Proposal: when a scorer is configured, a response exists and the score is None, return UNDETERMINED with "Objective scorer returned no score". Filing first since it changes reported outcomes.

Dominant language
Python
Stars
4.6k
Forks
944
Avg merge
2d 20h
Merged PRs (30d)
309

Getting set up

Open in Codespaces

Starts the project's dev container in your browser, under your own GitHub account.

  • No Dockerfile or Docker Compose file
  • Has a pull request template
  • No contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from microsoft/PyRIT

All issues in microsoft/PyRIT

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.