Skip to content

Scorer composition (PR C): roll pure-composition API out to remaining LLM scorers (3/3)#2157

Open
romanlutz wants to merge 1 commit into
microsoft:mainfrom
romanlutz:romanlutz-scorer-composition-rollout-clean
Open

Scorer composition (PR C): roll pure-composition API out to remaining LLM scorers (3/3)#2157
romanlutz wants to merge 1 commit into
microsoft:mainfrom
romanlutz:romanlutz-scorer-composition-rollout-clean

Conversation

@romanlutz

Copy link
Copy Markdown
Contributor

Summary

Final PR (3/3) of the scorer-architecture refactor ("Option 5 — scorer-owned composition"), following #2125 (ResponseHandler + internal round-trip helper) and #2146 (TrueFalse pure-composition API + CallableResponseHandler), both now merged to main.

This rolls the pure v1.0 composition API out to the remaining LLM-based scorers and removes the last transitional forwarder. Each migrated scorer now stores chat_target + system_prompt + a response_handler and calls the internal _run_llm_scoring_async(...) helper directly, instead of the base Scorer._score_value_with_llm_async forwarder (now deleted).

Scorers migrated

  • SelfAskQuestionAnswerScorer
  • SelfAskRefusalScorer
  • SelfAskCategoryScorer
  • SelfAskGeneralTrueFalseScorer
  • SelfAskScaleScorer
  • SelfAskLikertScorer
  • SelfAskGeneralFloatScaleScorer
  • InsecureCodeScorer

Details

  • Float-scale scorers bake numeric_value=True into the default JsonSchemaResponseHandler; the schema is injected into the default handler only (a caller-supplied handler owns its own contract). Identifiers read response_handler.response_schema.
  • Preset construction moves to from_* factories (from_scale_arguments, from_likert_scale, from_content_classifier, from_question) with module-level render_*_system_prompt and load_scale_arguments helpers mirroring the TrueFalse precedent from Scorer composition (PR B): TrueFalse pure-composition API + CallableResponseHandler #2146.
  • Deletes the transitional Scorer._score_value_with_llm_async forwarder from the base class.
  • Migrates first-party consumers off the removed legacy constructors: crescendo, tree_of_attacks, fairness_bias (docstring example), fuzzer, and the scorer initializer registrations.

Breaking changes (v1.0)

Legacy scorer constructors (e.g. SelfAskScaleScorer(scale_arguments_path=...), SelfAskLikertScorer(likert_scale=...), SelfAskCategoryScorer(content_classifier_path=...), SelfAskRefusalScorer(refusal_system_prompt_path=...)) are replaced by the composition __init__ plus from_* factories. This is an intentional v1.0 breaking change; no deprecation shims remain.

Testing

  • tests/unit/score: 1311 passed, 16 skipped
  • tests/unit/executor + tests/unit/setup (touched consumers): 1249 passed, 22 skipped
  • ruff check, ruff format --check, ty check pyrit: clean

Migrate the remaining LLM-based scorers off the transitional
Scorer._score_value_with_llm_async forwarder to the pure v1.0 composition
API and delete the base forwarder. Each scorer now stores
chat_target + system_prompt + response_handler and calls
_run_llm_scoring_async directly.

Scorers migrated:
- SelfAskQuestionAnswerScorer
- SelfAskRefusalScorer
- SelfAskCategoryScorer
- SelfAskGeneralTrueFalseScorer
- SelfAskScaleScorer
- SelfAskLikertScorer
- SelfAskGeneralFloatScaleScorer
- InsecureCodeScorer

Float-scale scorers bake numeric_value=True into the default
JsonSchemaResponseHandler; identifiers read response_handler.response_schema.
Preset construction moves to from_* factories (from_scale_arguments,
from_likert_scale, from_content_classifier, from_question) with module-level
render_*_system_prompt and load_scale_arguments helpers.

Also migrate first-party consumers off the removed legacy constructors:
crescendo, tree_of_attacks, fairness_bias (docstring example), fuzzer, and
the scorer initializer registrations.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
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.

2 participants