Repository navigation
Description
Is your feature request related to a problem? Please describe.
PR #3960 added static keyword-only enforcement without breaking existing positional callers. Its baseline currently contains 306 existing signatures. These are migration and exemption candidates, not 306 confirmed functional bugs.
We should work through that inventory in small PRs, separating straightforward private implementation cleanup from public API changes that require a compatibility decision and deprecation.
This inventory is pinned to main commit 938ada9f9fe8, using build_scripts/keyword_only_baseline.txt.
| Initial triage bucket | Entries | Default approach |
|---|---|---|
| Private/internal | 185 | Migrate code-owned helpers and their callers together, without a public deprecation cycle. Check callback and subclass contracts first. |
| Public or potentially externally consumed | 121 | Decide whether the change is worthwhile and whether the callable is a supported API. Deprecate positional use before breaking supported callers. |
| Total | 306 | Give every entry an explicit disposition; do not mechanically change all signatures. |
The split is based on actual definition scopes: underscore-prefixed functions, underscore-prefixed containing classes, and nested functions are in the private/internal bucket. Constructors of public classes remain in the public bucket. Other non-underscored callables are conservatively placed in public/compatibility review, even when they are not package-root exports.
Naming is not a complete compatibility audit. Some underscore methods are subclass extension points, and some nested functions are framework callbacks. Conversely, a public-named FastAPI route handler is not automatically a supported Python SDK entry point. Changing its Python signature must not accidentally change its HTTP schema or behavior.
Describe the solution you'd like
Claiming work
Please claim only one Python module at a time, not an entire component or inventory section. Comment with the exact module name (for example, pyrit.converter.audio_echo_converter) and wait for maintainer confirmation before starting. Check existing claims and PRs first to avoid duplicate work.
Keep each new PR focused on that module, including any necessary caller, test, documentation, and baseline updates elsewhere. Finish or explicitly release your current claim before picking up another module. Discuss proposed public API changes with maintainers before implementing them.
1. Start with private, code-owned helpers
Private implementation cleanup should be the non-breaking first phase. For each small module-focused PR:
- Confirm all callers are owned by PyRIT and that the function is not a callback or inherited contract.
- Make the relevant parameters keyword-only and update production callers, tests, and directly related examples.
- Add or update focused coverage for the signature and existing behavior.
- Remove the corresponding baseline entries only after they no longer violate the check.
- Run the focused tests and
uv run python -m build_scripts.check_keyword_only_params.
Work on _truncate_text and _get_metadata_value is already covered by PR #4210. Do not duplicate it. They remain listed below because they still exist in the pinned main baseline.
2. Weigh public API migrations separately
Do not treat every public-named signature as an approved breaking change. For each supported public API proposed for migration:
- Establish the benefit and identify positional callers, examples, subclass implementations, and compatibility-sensitive integrations.
- Decide to retain the positional contract or approve a staged migration.
- When migrating, keep old positional calls working during the deprecation window and warn on deprecated positional use. Keyword callers should not receive a positional-use warning.
- Use
pyrit.common.deprecation.print_deprecation_message, with removal scheduled according to the repository policy: the version at introduction of the deprecation plus two minor versions. - Document the replacement call shape and test both compatibility and the keyword-only path.
- Remove the compatibility path only at the announced version. A deprecation warning alone does not make an otherwise unchanged positional signature eligible for baseline removal.
3. Preserve required contracts, regardless of naming
Some entries need an explicit exemption or a coordinated contract migration rather than a local signature edit:
- Framework callbacks and overrides: the nested FastAPI exception handlers,
SPAStaticFiles.get_response,_DatasetMultipartParser.on_part_data,StrategyLogAdapter.process, Azure Speech callbacks, and_ScenarioAliasFinder.find_spec. - SQLAlchemy callbacks: the
@compilesfunctions inpyrit.memory.analytics_sqland event listeners such as_release_dataset_lock_state,provide_token, andregister. Distinguish callbacks from ordinary helpers in the same file. - Validation and templating hooks:
ScoringExpectation._require_persisted_schema_versionand_TemplateSandbox.is_safe_attribute. - Python construction protocols: metaclass and enum construction, including
Singleton.__new__,HackAPromptChallenge.__init__/__new__, andScenarioTechnique.__new__. - PyRIT inheritance contracts:
StorageIO.write_file_asyncand its implementations,OpenAITargetresponse-construction/validation hooks and their overrides, andRegistry._build_metadatawith its overrides. Underscore naming does not make it safe to break custom subclasses. - Historical Alembic revisions: the three entries under
pyrit.memory.alembic.versionsmust not be rewritten for style cleanup. Keep or explicitly document these exceptions in a way that respects migration immutability.
Where a framework or existing base contract requires positional compatibility, retain it and use a narrowly justified # pyrit-keyword-only-exempt <reason> marker where permitted. Do not blanket-exempt every override or rewrite a protocol just to reduce the count.
Each checklist entry uses a fully qualified dotted name, such as pyrit.registry.registry.Registry._build_metadata. Nested definitions retain <locals> to identify their scope; the baseline file itself uses module:qualname.
For the inventories below, checking an item means its disposition is completed and linked to a PR or documented decision: migrated, retained with a reason, explicitly exempted, or scheduled for deprecation. It does not necessarily mean that the signature was changed.
Private/internal inventory: 185 entries
Expand all private/internal entries, grouped by component
Analytics (2)
-
pyrit.analytics.paired_outcome_statistics._check_pair_evidence -
pyrit.analytics.result_analysis._compute_stats
Auth (1)
-
pyrit.auth.copilot_authenticator.CopilotAuthenticator._create_persistent_cache
Backend (10)
-
pyrit.backend.middleware.error_handlers.register_error_handlers.<locals>.analytics_exception_handler_async -
pyrit.backend.middleware.error_handlers.register_error_handlers.<locals>.dataset_exception_handler_async -
pyrit.backend.middleware.error_handlers.register_error_handlers.<locals>.generic_exception_handler -
pyrit.backend.middleware.error_handlers.register_error_handlers.<locals>.not_found_handler -
pyrit.backend.middleware.error_handlers.register_error_handlers.<locals>.not_implemented_handler -
pyrit.backend.middleware.error_handlers.register_error_handlers.<locals>.permission_error_handler -
pyrit.backend.middleware.error_handlers.register_error_handlers.<locals>.request_too_large_handler -
pyrit.backend.middleware.error_handlers.register_error_handlers.<locals>.validation_exception_handler -
pyrit.backend.middleware.error_handlers.register_error_handlers.<locals>.value_error_handler -
pyrit.backend.services.dataset_upload_service._DatasetMultipartParser.on_part_data
CLI (8)
-
pyrit.cli._auth._print_device_code_prompt -
pyrit.cli._banner._build_animation_frames.<locals>._pad_to_height -
pyrit.cli._banner._build_static_banner.<locals>.add -
pyrit.cli._banner._get_color -
pyrit.cli._banner._render_frame -
pyrit.cli._banner._render_line_with_segments -
pyrit.cli._output._truncate_text -
pyrit.cli._sources._only_known
Common (1)
-
pyrit.common.safe_extract._reject_path_traversal
Converters (24)
-
pyrit.converter.audio_echo_converter.AudioEchoConverter._apply_echo -
pyrit.converter.audio_speed_converter.AudioSpeedConverter._resample_channel -
pyrit.converter.base_image_to_image_converter.BaseImageToImageConverter._transform_image -
pyrit.converter.code_attack_converter.CodeAttackConverter._validate_template -
pyrit.converter.code_attack_converter._escape_string_literal -
pyrit.converter.codechameleon_converter.CodeChameleonConverter._encrypt_binary_tree.<locals>.build_tree -
pyrit.converter.codechameleon_converter.CodeChameleonConverter._encrypt_length.<locals>.WordData.__init__ -
pyrit.converter.decomposition_converter._token_recall -
pyrit.converter.image_compression_converter.ImageCompressionConverter._compress_image -
pyrit.converter.image_compression_converter.ImageCompressionConverter._handle_original_image_fallback_async -
pyrit.converter.image_prompt_style_converter.ImagePromptStyleConverter._validate_filter_data -
pyrit.converter.insert_punctuation_converter.InsertPunctuationConverter._insert_between_words -
pyrit.converter.insert_punctuation_converter.InsertPunctuationConverter._insert_punctuation -
pyrit.converter.insert_punctuation_converter.InsertPunctuationConverter._insert_within_words -
pyrit.converter.pdf_converter.PDFConverter._inject_text_into_page -
pyrit.converter.pdf_converter.PDFConverter._serialize_pdf_async -
pyrit.converter.puzzled.keyword_masker._rank_candidates -
pyrit.converter.puzzled.puzzle_builders._try_place -
pyrit.converter.puzzled.puzzled_converter.PuzzledConverter._clue_line -
pyrit.converter.puzzled.puzzled_converter.PuzzledConverter._parse_semantic_clues -
pyrit.converter.transparency_attack_converter.TransparencyAttackConverter._compute_mse_loss -
pyrit.converter.transparency_attack_converter.TransparencyAttackConverter._create_blended_image -
pyrit.converter.transparency_attack_converter.TransparencyAttackConverter._save_blended_image_async -
pyrit.converter.word_doc_converter.WordDocConverter._replace_placeholder_in_paragraph
Datasets (12)
-
pyrit.datasets.seed_datasets.remote.categorical_harmful_qa_dataset._CategoricalHarmfulQADataset._fetch_dataset_async.<locals>.resolve_harm_categories -
pyrit.datasets.seed_datasets.remote.garak_leak_replay_dataset._write_cloze_tsv -
pyrit.datasets.seed_datasets.remote.harmbench_multimodal_dataset._HarmBenchMultimodalDataset._fetch_and_save_image_async -
pyrit.datasets.seed_datasets.remote.remote_dataset_loader._RemoteDatasetLoader._validate_enum -
pyrit.datasets.seed_datasets.remote.remote_dataset_loader._RemoteDatasetLoader._validate_enums -
pyrit.datasets.seed_datasets.remote.visual_leak_bench_dataset._VisualLeakBenchDataset._build_harm_categories -
pyrit.datasets.seed_datasets.remote.visual_leak_bench_dataset._VisualLeakBenchDataset._fetch_and_save_image_async -
pyrit.datasets.seed_datasets.remote.vlsu_multimodal_dataset._VLSUMultimodalDataset._fetch_and_save_image_async -
pyrit.datasets.seed_datasets.remote.xl_safety_bench_dataset._row_value -
pyrit.datasets.seed_datasets.seed_dataset_provider.SeedDatasetProvider._match_filter_to_metadata -
pyrit.datasets.seed_datasets.seed_dataset_provider.SeedDatasetProvider.fetch_datasets_async.<locals>.fetch_single_dataset_async -
pyrit.datasets.seed_datasets.seed_dataset_provider.SeedDatasetProvider.fetch_datasets_async.<locals>.fetch_with_semaphore_async
Exceptions (1)
-
pyrit.exceptions.exception_classes._DynamicWaitRandomExponential.__init__
Executors (13)
-
pyrit.executor.attack.core.attack_executor.AttackExecutor._execute_with_params_list_async.<locals>.run_one_async -
pyrit.executor.attack.core.attack_executor.AttackExecutor.execute_attack_from_seed_groups_async.<locals>.build_params_async -
pyrit.executor.attack.multi_turn.crescendo.CrescendoAttack._check_refusal_async -
pyrit.executor.benchmark.fairness_bias.FairnessBiasBenchmark._format_experiment_results_async -
pyrit.executor.promptgen.fuzzer.fuzzer.FuzzerGenerator._add_successful_template -
pyrit.executor.promptgen.fuzzer.fuzzer.FuzzerResultPrinter._print_wrapped_text -
pyrit.executor.promptgen.fuzzer.fuzzer._MCTSExplorer.update_rewards -
pyrit.executor.promptgen.fuzzer.fuzzer._PromptNode.__init__ -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.AttackPrompt._build_candidate_batch -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.AttackPrompt._expand_prefix_cache -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.AttackPrompt._loss_with_prefix_cache -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.MultiPromptAttack.run.<locals>.acceptance_probability -
pyrit.executor.promptgen.gcg.experiments.run._main_async
Memory (45)
-
pyrit.memory._seed_decomposition._apply_identity.<locals>.mapped -
pyrit.memory.alembic.env._include_object -
pyrit.memory.alembic.versions.c8d3e5f7a901_add_operations_and_findings._register_legacy_operations.<locals>.consider -
pyrit.memory.alembic.versions.e5f7a9c1b3d2_add_identifiers_tables.IdentifierGraphInserter._child -
pyrit.memory.alembic.versions.e5f7a9c1b3d2_add_identifiers_tables.IdentifierGraphInserter._children -
pyrit.memory.analytics_sql._arguments -
pyrit.memory.analytics_sql._mssql_array_empty -
pyrit.memory.analytics_sql._mssql_array_join -
pyrit.memory.analytics_sql._mssql_class_name_present -
pyrit.memory.analytics_sql._mssql_is_array -
pyrit.memory.analytics_sql._mssql_json_array -
pyrit.memory.analytics_sql._mssql_json_array_value -
pyrit.memory.analytics_sql._mssql_json_container -
pyrit.memory.analytics_sql._mssql_json_items -
pyrit.memory.analytics_sql._mssql_json_object -
pyrit.memory.analytics_sql._mssql_json_scalar -
pyrit.memory.analytics_sql._mssql_resolved_hash -
pyrit.memory.analytics_sql._mssql_unicode_casefold -
pyrit.memory.analytics_sql._mssql_unicode_lower -
pyrit.memory.analytics_sql._mssql_unicode_strip -
pyrit.memory.analytics_sql._mssql_uuid_hex -
pyrit.memory.analytics_sql._sqlite_array_empty -
pyrit.memory.analytics_sql._sqlite_array_join -
pyrit.memory.analytics_sql._sqlite_class_name_present -
pyrit.memory.analytics_sql._sqlite_is_array -
pyrit.memory.analytics_sql._sqlite_json_array -
pyrit.memory.analytics_sql._sqlite_json_array_value -
pyrit.memory.analytics_sql._sqlite_json_items -
pyrit.memory.analytics_sql._sqlite_json_object -
pyrit.memory.analytics_sql._sqlite_json_property -
pyrit.memory.analytics_sql._sqlite_resolved_hash -
pyrit.memory.analytics_sql._sqlite_unicode_casefold -
pyrit.memory.analytics_sql._sqlite_unicode_lower -
pyrit.memory.analytics_sql._sqlite_unicode_strip -
pyrit.memory.analytics_sql._sqlite_uuid_hex -
pyrit.memory.attack_analytics.AttackAnalyticsReader._session_async.<locals>.before_cursor_execute -
pyrit.memory.attack_analytics.AttackAnalyticsReader._session_async.<locals>.before_statement -
pyrit.memory.azure_sql_memory.AzureSQLMemory._enable_azure_authorization.<locals>.provide_token -
pyrit.memory.azure_sql_memory.AzureSQLMemory._resolve_sas_token -
pyrit.memory.dataset_lifecycle._media_keys -
pyrit.memory.memory_interface.MemoryInterface._dispatch_memory_operation -
pyrit.memory.memory_session._release_dataset_lock_state -
pyrit.memory.migration._include_name_for_memory_schema -
pyrit.memory.sqlite_memory.SQLiteMemory._register_analytics_lower.<locals>.register -
pyrit.memory.storage.storage.AzureBlobStorageIO._upload_blob_async
Message normalizers (1)
-
pyrit.message_normalizer.tokenizer_template_normalizer.TokenizerTemplateNormalizer._load_tokenizer
Models (3)
-
pyrit.models.score.expectation.ScoringExpectation._require_persisted_schema_version -
pyrit.models.seeds.seed._TemplateSandbox.is_safe_attribute -
pyrit.models.seeds.seed_simulated_conversation._keep_prompt_instance
Output (3)
-
pyrit.output.conversation.pretty.PrettyConversationPrinter._render_wrapped_text -
pyrit.output.score.markdown.MarkdownScorePrinter._format_score -
pyrit.output.score.pretty.PrettyScorePrinter._render_score
Prompt targets (30)
-
pyrit.prompt_target.azure_blob_storage_target.AzureBlobStorageTarget._upload_blob_async -
pyrit.prompt_target.batch_helper._validate_rate_limit_parameters -
pyrit.prompt_target.common.chat_completions_response_parser._add_extra -
pyrit.prompt_target.common.discover_target_capabilities._probe_json_output_async -
pyrit.prompt_target.common.discover_target_capabilities._probe_json_schema_async -
pyrit.prompt_target.common.discover_target_capabilities._probe_multi_message_pieces_async -
pyrit.prompt_target.common.discover_target_capabilities._probe_multi_turn_async -
pyrit.prompt_target.common.discover_target_capabilities._probe_system_prompt_async -
pyrit.prompt_target.hack_a_prompt_target.HackAPromptTarget._decode_part -
pyrit.prompt_target.http_target.http_target.HTTPTarget._infer_full_url_from_host -
pyrit.prompt_target.http_target.http_target_callback_functions._fetch_key -
pyrit.prompt_target.http_target.httpx_api_target.HTTPXAPITarget._merge_base_and_url -
pyrit.prompt_target.openai.openai_chat_target.OpenAIChatTarget._construct_message_from_response_async -
pyrit.prompt_target.openai.openai_completion_target.OpenAICompletionTarget._construct_message_from_response_async -
pyrit.prompt_target.openai.openai_image_target.OpenAIImageTarget._construct_message_from_response_async -
pyrit.prompt_target.openai.openai_realtime_target.RealtimeTarget._construct_message_from_response_async -
pyrit.prompt_target.openai.openai_response_target.OpenAIResponseTarget._construct_message_from_response_async -
pyrit.prompt_target.openai.openai_target.OpenAITarget._construct_message_from_response_async -
pyrit.prompt_target.openai.openai_target.OpenAITarget._handle_content_filter_response -
pyrit.prompt_target.openai.openai_target.OpenAITarget._validate_response -
pyrit.prompt_target.openai.openai_target.OpenAITarget._warn_url_with_api_path -
pyrit.prompt_target.openai.openai_tts_target.OpenAITTSTarget._construct_message_from_response_async -
pyrit.prompt_target.openai.openai_video_target.OpenAIVideoTarget._construct_message_from_response_async -
pyrit.prompt_target.playwright_copilot_target.PlaywrightCopilotTarget._extract_content_if_ready_async -
pyrit.prompt_target.playwright_copilot_target.PlaywrightCopilotTarget._extract_images_from_message_groups_async -
pyrit.prompt_target.playwright_copilot_target.PlaywrightCopilotTarget._extract_multimodal_content_async -
pyrit.prompt_target.playwright_copilot_target.PlaywrightCopilotTarget._extract_text_from_message_groups_async -
pyrit.prompt_target.playwright_copilot_target.PlaywrightCopilotTarget._wait_for_images_to_stabilize_async -
pyrit.prompt_target.prompt_shield_target.PromptShieldTarget._validate_response -
pyrit.prompt_target.round_robin_target._validate_behavioral_consistency.<locals>._resolve_param
Registry (4)
-
pyrit.registry.components.initializer_registry.InitializerRegistry._build_metadata -
pyrit.registry.components.scenario_registry.ScenarioRegistry._build_metadata -
pyrit.registry.registry.Registry._build_metadata -
pyrit.registry.registry._get_metadata_value
Scenarios (3)
-
pyrit.scenario.core.scenario.Scenario._execute_atomic_attacks_parallel_async.<locals>.record_interrupted -
pyrit.scenario.scenarios.adaptive.selectors.epsilon_greedy._derive_rng -
pyrit.scenario._ScenarioAliasFinder.find_spec
Scorers (22)
-
pyrit.score.float_scale.plagiarism_scorer.PlagiarismScorer._lcs_length -
pyrit.score.float_scale.plagiarism_scorer.PlagiarismScorer._levenshtein_distance -
pyrit.score.float_scale.plagiarism_scorer.PlagiarismScorer._ngram_set -
pyrit.score.float_scale.plagiarism_scorer.PlagiarismScorer._plagiarism_score -
pyrit.score.scorer_evaluation.krippendorff._build_ordinal_distance_matrix -
pyrit.score.scorer_evaluation.krippendorff._build_value_counts_matrix -
pyrit.score.scorer_evaluation.krippendorff._compute_alpha_from_disagreements -
pyrit.score.scorer_evaluation.krippendorff._validate_and_prepare_data -
pyrit.score.scorer_evaluation.scorer_metrics_io._append_jsonl_entry -
pyrit.score.scorer_evaluation.scorer_metrics_io._create_staging_file -
pyrit.score.scorer_evaluation.scorer_metrics_io._rewrite_jsonl_atomically -
pyrit.score.true_false.regex.markdown_injection._has_on_one_line -
pyrit.score.true_false.regex.package_hallucination_scorer.PackageHallucinationScorer._resolve_ruby_feature_to_gem -
pyrit.score.true_false.regex.shell_command_output_scorer._curl_mode_then -
pyrit.score.true_false.regex.shell_command_output_scorer._curl_number_option -
pyrit.score.true_false.regex.shell_command_output_scorer._curl_option -
pyrit.score.true_false.regex.shell_command_output_scorer._download_command -
pyrit.score.true_false.regex.shell_command_output_scorer._quoted_option -
pyrit.score.true_false.regex.shell_command_output_scorer._shell_options -
pyrit.score.true_false.true_false_score_aggregator._and -
pyrit.score.true_false.true_false_score_aggregator._create_binary_aggregator -
pyrit.score.true_false.true_false_score_aggregator._or
Setup (2)
-
pyrit.setup.environment_loading._print_msg -
pyrit.setup.environment_loading.resolve_environment_async.<locals>.interpolate_async
Public/compatibility-review inventory: 121 entries
Expand all public-name compatibility candidates, grouped by component
Analytics (1)
-
pyrit.analytics.conversation_analytics.cosine_similarity
Auth (3)
-
pyrit.auth.azure_auth.AzureAuth.__init__ -
pyrit.auth.azure_auth.get_speech_config -
pyrit.auth.azure_auth.get_speech_config_from_default_azure_credential
Backend (37)
-
pyrit.backend.main.SPAStaticFiles.get_response -
pyrit.backend.mappers.target_mappers.target_object_to_instance -
pyrit.backend.middleware.security_headers.SecurityHeadersMiddleware.__init__ -
pyrit.backend.routes.attacks.add_message -
pyrit.backend.routes.attacks.create_related_conversation -
pyrit.backend.routes.attacks.get_conversation_messages -
pyrit.backend.routes.attacks.get_conversations -
pyrit.backend.routes.attacks.list_attacks -
pyrit.backend.routes.attacks.update_attack -
pyrit.backend.routes.attacks.update_main_conversation -
pyrit.backend.routes.configuration.get_environment_file -
pyrit.backend.routes.configuration.reinitialize_async -
pyrit.backend.routes.configuration.update_configuration_file -
pyrit.backend.routes.configuration.update_environment_file -
pyrit.backend.routes.datasets.delete_dataset_route_async -
pyrit.backend.routes.datasets.get_seed_example -
pyrit.backend.routes.datasets.list_seed_examples -
pyrit.backend.routes.datasets.upload_dataset_route_async -
pyrit.backend.routes.initializers.list_initializers -
pyrit.backend.routes.initializers.register_initializer -
pyrit.backend.routes.initializers.unregister_initializer -
pyrit.backend.routes.labels.get_label_options -
pyrit.backend.routes.scenario_presets.create_scenario_preset -
pyrit.backend.routes.scenario_presets.delete_scenario_preset -
pyrit.backend.routes.scenario_presets.resolve_scenario_preset -
pyrit.backend.routes.scenario_presets.update_scenario_preset -
pyrit.backend.routes.scenario_suites.create_scenario_suite -
pyrit.backend.routes.scenario_suites.delete_scenario_suite -
pyrit.backend.routes.scenario_suites.launch_scenario_suite -
pyrit.backend.routes.scenario_suites.update_scenario_suite -
pyrit.backend.routes.scenarios.list_scenarios -
pyrit.backend.routes.scenarios.start_scenario_run -
pyrit.backend.routes.scorers.list_scorers -
pyrit.backend.routes.scores.create_manual_score -
pyrit.backend.routes.targets.detect_capabilities_async -
pyrit.backend.routes.targets.list_targets -
pyrit.backend.routes.techniques.validate_technique_edit_async
Common (10)
-
pyrit.common.csv_helper.write_csv -
pyrit.common.download_hf_model.download_specific_files_async -
pyrit.common.json_helper.write_json -
pyrit.common.json_helper.write_jsonl -
pyrit.common.net_utility.get_httpx_client -
pyrit.common.net_utility.make_request_and_raise_if_error_async -
pyrit.common.singleton.Singleton.__new__ -
pyrit.common.text_helper.write_txt -
pyrit.common.utils.combine_dict -
pyrit.common.utils.combine_list
Converters (7)
-
pyrit.converter.azure_speech_audio_to_text_converter.AzureSpeechAudioToTextConverter.stop_cb -
pyrit.converter.azure_speech_audio_to_text_converter.AzureSpeechAudioToTextConverter.transcript_cb -
pyrit.converter.puzzled.puzzle_builders.build_anagram -
pyrit.converter.puzzled.puzzle_builders.build_word_search -
pyrit.converter.random_capital_letters_converter.RandomCapitalLettersConverter.generate_random_positions -
pyrit.converter.random_capital_letters_converter.RandomCapitalLettersConverter.string_to_upper_case_by_percentage -
pyrit.converter.token_smuggling.variation_selector_smuggler_converter.VariationSelectorSmugglerConverter.encode_visible_hidden
Exceptions (2)
-
pyrit.exceptions.exception_classes.handle_bad_request_exception -
pyrit.exceptions.exception_classes.pyrit_custom_result_retry
Executors (36)
-
pyrit.executor.core.strategy.StrategyLogAdapter.process -
pyrit.executor.promptgen.core.prompt_generator_strategy.PromptGeneratorStrategy.__init__ -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.AttackPrompt.__init__ -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.AttackPrompt.control_loss -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.AttackPrompt.generate -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.AttackPrompt.generate_str -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.AttackPrompt.logits -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.AttackPrompt.loss -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.AttackPrompt.target_loss -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.AttackPrompt.test -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.EvaluateAttack.__init__ -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.EvaluateAttack.run -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.IndividualPromptAttack.__init__ -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.IndividualPromptAttack.run -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.ModelWorker.__init__ -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.ModelWorker.run -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.MultiPromptAttack.__init__ -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.MultiPromptAttack.get_filtered_cands -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.MultiPromptAttack.log -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.MultiPromptAttack.run -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.MultiPromptAttack.test -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.ProgressiveMultiPromptAttack.__init__ -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.ProgressiveMultiPromptAttack.run -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.PromptManager.__init__ -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.PromptManager.control_loss -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.PromptManager.generate -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.PromptManager.generate_str -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.PromptManager.logits -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.PromptManager.target_loss -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.PromptManager.test -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.get_embeddings -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.get_nonascii_toks -
pyrit.executor.promptgen.gcg.attack.base.attack_manager.get_workers -
pyrit.executor.promptgen.gcg.attack.gcg.gcg_attack.GCGMultiPromptAttack.__init__ -
pyrit.executor.promptgen.gcg.attack.gcg.gcg_attack.GCGPromptManager.sample_control -
pyrit.executor.promptgen.gcg.attack.gcg.gcg_attack.token_gradients
Memory (6)
-
pyrit.memory.storage.serializers.DataTypeSerializer.save_b64_image_async -
pyrit.memory.storage.serializers.DataTypeSerializer.save_data_async -
pyrit.memory.storage.serializers.DataTypeSerializer.save_formatted_audio_async -
pyrit.memory.storage.storage.AzureBlobStorageIO.write_file_async -
pyrit.memory.storage.storage.DiskStorageIO.write_file_async -
pyrit.memory.storage.storage.StorageIO.write_file_async
Message normalizers (1)
-
pyrit.message_normalizer.message_normalizer.apply_system_message_behavior_async
Models (4)
-
pyrit.models.identifiers.identifier_projection.field_marker -
pyrit.models.messages.conversations.construct_response_from_request -
pyrit.models.seeds.seed_prompt.SeedPrompt.from_yaml_with_required_parameters -
pyrit.models.seeds.yaml_seed_loader.load_seed_prompt_from_yaml_with_required_parameters
Prompt normalizers (3)
-
pyrit.prompt_normalizer.prompt_normalizer.PromptNormalizer.__init__ -
pyrit.prompt_normalizer.prompt_normalizer.PromptNormalizer.add_prepended_conversation_to_memory_async -
pyrit.prompt_normalizer.prompt_normalizer.PromptNormalizer.convert_values_async
Prompt targets (5)
-
pyrit.prompt_target.hack_a_prompt_target.HackAPromptChallenge.__init__ -
pyrit.prompt_target.hack_a_prompt_target.HackAPromptChallenge.__new__ -
pyrit.prompt_target.http_target.http_target.HTTPTarget.with_client -
pyrit.prompt_target.http_target.http_target_callback_functions.get_http_target_regex_matching_callback_function -
pyrit.prompt_target.openai.openai_realtime_target.RealtimeTarget.save_audio_async
Scenarios (1)
-
pyrit.scenario.core.scenario_technique.ScenarioTechnique.__new__
Scorers (5)
-
pyrit.score.scorer.Scorer.scale_value_float -
pyrit.score.scorer_evaluation.krippendorff.krippendorff_alpha -
pyrit.score.scorer_evaluation.scorer_evaluator.ScorerEvaluator.evaluate_dataset_async -
pyrit.score.scorer_evaluation.scorer_evaluator.ScorerEvaluator.from_scorer -
pyrit.score.scorer_prompt_validator.ScorerPromptValidator.validate
Describe alternatives you've considered, if relevant
- Convert every signature immediately: rejected because it breaks supported positional callers, callback protocols, and subclass contracts.
- Keep the entire baseline indefinitely: avoids breakage but leaves straightforward private cleanup untracked.
- Exempt every underscored method or every override: too broad and would hide new violations. Prefer per-site, reasoned exemptions for real compatibility requirements.
Additional context
- Original enforcement work: #3960, following #3722.
- First small cleanup already in progress: #4210.
- Follow the keyword-only and exemption guide and the deprecation policy.
- The full checklists contain every one of the 306 baseline entries exactly once. Refresh against current
mainbefore claiming work, and link an existing PR before starting so contributors do not duplicate each other's effort. - This is a tracking issue for incremental migrations and explicit compatibility decisions, not a request for one repository-wide breaking-change PR or a requirement to make the baseline empty.
Activity
fate-lab commentedon Nov 11, 2026
Hi, can I take
pyrit.score.float_scale.plagiarism_scorer?its-amann commentedon Nov 11, 2026
hey can I take
pyrit.score.true_false.regex.shell_command_output_scorer? all 6 entries there are private module helpers so it should be a clean non breaking one