Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
587 commits
Select commit Hold shift + click to select a range
ac61249
MAINT Enable ruff UP (pyupgrade) rules and fix all violations (#1389)
romanlutz Feb 25, 2026
0ab0b3d
MAINT Enable ruff SIM (flake8-simplify) rules and fix all violations …
romanlutz Feb 25, 2026
54a4efb
MAINT Regenerate uv.lock for dependabot security fixes (#1401)
romanlutz Feb 25, 2026
e89ccfe
FIX Mock tokenizer in unit test to avoid HuggingFace network call (#1…
romanlutz Feb 25, 2026
8a85254
FIX: Ensuring `_score_value_with_llm` works with reasoning targets (#…
jsong468 Feb 25, 2026
0dbff8d
FEAT Add PromptIntel remote dataset loader (#1400)
anandansundar Feb 26, 2026
69a85fa
MAINT Update cryptography>=46.0.5 and werkzeug>=3.1.6 for dependabot …
romanlutz Feb 26, 2026
8d9b7cd
MAINT Enable ruff PIE (flake8-pie) rules and fix all violations (#1394)
romanlutz Feb 26, 2026
c82b1ec
MAINT Bump rollup to >=4.59.0 for dependabot security alert (#1408)
romanlutz Feb 26, 2026
a07283d
MAINT Enable ruff B (flake8-bugbear) rules and fix all violations (#1…
romanlutz Feb 26, 2026
7c65439
MAINT Enable ruff TCH (flake8-type-checking) rules and fix all violat…
romanlutz Feb 26, 2026
358b1b0
MAINT add MacOS CI (#1407)
romanlutz Feb 27, 2026
07fd38b
FEAT: Generalize Colloquial Wordswap Attack Converter (#1348)
taherakolawala Feb 27, 2026
1353ad4
FIX circular import making pyrit.__version__ unavailable during submo…
Copilot Mar 2, 2026
cae1cda
FEAT Add SimpleSafetyTests dataset loader (#1426)
romanlutz Mar 2, 2026
6059991
MAINT Migrate Azure Cognitive Services from API key to Entra ID authe…
romanlutz Mar 2, 2026
dfbfbf6
FEAT Expand memory interface and models for attack results (#1420)
romanlutz Mar 2, 2026
1f6fb87
FEAT Add SALAD-Bench dataset loader (#1425)
romanlutz Mar 2, 2026
e1353c4
MAINT Enable ruff rule E (pycodestyle errors) (#1413)
romanlutz Mar 3, 2026
03156c0
MAINT Enable ruff PGH rule for pygrep-hooks linting (#1416)
romanlutz Mar 3, 2026
b265532
FEAT Add OR-Bench dataset loader (#1423)
romanlutz Mar 3, 2026
9b98e20
MAINT Enable ruff PERF rule for performance linting (#1415)
romanlutz Mar 3, 2026
2658a5a
FIX address deprecation warnings (#1430)
romanlutz Mar 3, 2026
0f3a83a
MAINT Enable ruff rules: DTZ, N, T10, TID, YTT (#1414)
romanlutz Mar 3, 2026
769bb24
FIX replace api key in scenarios (#1435)
hannahwestra25 Mar 3, 2026
afa4315
MAINT Add pre-commit hook to sanitize user paths in notebook outputs …
romanlutz Mar 3, 2026
3986851
MAINT Enable low-hanging ruff rules: A, ERA, EXE, FA, FLY, ICN, ISC, …
romanlutz Mar 3, 2026
17de38a
MAINT/FIX: Generalizing eval-hash (#1434)
rlundeen2 Mar 3, 2026
bed086e
FIX: Add arm64 Support for `devcontainer` (#1409)
spencrr Mar 4, 2026
799e981
FEAT Add BeaverTails dataset loader (#1424)
romanlutz Mar 4, 2026
ceb2768
FEAT Add TargetCapabilities with supports_multi_turn and adapt attack…
romanlutz Mar 4, 2026
a33f99f
[BREAKING] FEAT add TAP to content harms scenario (#1378)
hannahwestra25 Mar 4, 2026
af13f75
MAINT set up GitHub Copilot in devcontainer (#1431)
romanlutz Mar 4, 2026
a59b634
FEAT Add ToxicChat dataset loader (#1422)
romanlutz Mar 4, 2026
b3db914
FEAT: Add new human labeled datasets (#1436)
jsong468 Mar 4, 2026
e3f03c2
FEAT Add HarmfulQA dataset loader (#1421)
romanlutz Mar 5, 2026
ba9d22f
FEAT: Scientific Translation Converter (#1379)
jbolor21 Mar 5, 2026
ca474d7
MAINT: Add permissions to docker_build workflow (#1441)
spencrr Mar 7, 2026
8f8e4ca
MAINT: Bump pip deps (#1442)
spencrr Mar 9, 2026
9228ad9
TEST: add unit tests for ConverterRegistry (#1440)
spencrr Mar 9, 2026
20824eb
FEAT: Flexible Scale Likert Scoring (#1444)
jsong468 Mar 9, 2026
461ec61
FEAT Backend attack API: conversation-centric redesign with multi-con…
romanlutz Mar 9, 2026
d0148d4
MAINT Updating Release Instructions (#1449)
ValbuenaVC Mar 10, 2026
d1ce4ce
FEAT: atomic attack identifier (#1446)
rlundeen2 Mar 10, 2026
afebeb4
FEAT: Update evaluate_scorers (#1406)
varunj-msft Mar 10, 2026
7a32821
FIX: Reorder scorer metrics notebook in table of contents (#1452)
jsong468 Mar 11, 2026
f773178
FIX: Fixing SQL Azure Integration Tests (#1457)
rlundeen2 Mar 11, 2026
2b9ff61
MAINT: Adding Scorer Evals (#1455)
rlundeen2 Mar 11, 2026
004d079
MAINT Fix integration test import errors and runtime issues (#1448)
romanlutz Mar 12, 2026
798ab22
DOC: Add Release Readiness step to release process docs (#1450)
rlundeen2 Mar 13, 2026
c5375d1
FIX use cognitiveservices scope for all Azure AI endpoints (#1453)
romanlutz Mar 13, 2026
51c5571
FEAT Wire frontend attack view to backend APIs (#1371)
romanlutz Mar 13, 2026
bf3eaa1
Fix type annotation warnings and test warnings (issue #442) (#1459)
romanlutz Mar 13, 2026
8ad0d2b
FIX address dependabot alerts by bumping package versions (#1460)
romanlutz Mar 13, 2026
351d790
FIX: Adding openai invalid_prompt safety blocks as content filters (#…
rlundeen2 Mar 13, 2026
cea4f7c
FEAT Animated ASCII banner with raccoon mascot for PyRIT CLI (#1417)
romanlutz Mar 13, 2026
bc0384f
FEAT: CBT-Bench Dataset (#1411)
Mar 13, 2026
0eaa999
DOC Upgrade to jupyterbook v2 and add proper landing page (#1458)
romanlutz Mar 13, 2026
75187ef
DOC GitHub Pages 404: use static HTML output for deployment (#1465)
romanlutz Mar 13, 2026
d4f1d0a
DOC fix pages deploy (#1466)
romanlutz Mar 13, 2026
099894b
FIX: fixing navbar link (#1468)
rlundeen2 Mar 14, 2026
891919e
DOC generate API pages for empty modules and render aliases (#1469)
biefan Mar 16, 2026
9de7af2
Fix multiline JSON extraction in exceptions helpers (#1474)
biefan Mar 16, 2026
93549f7
Fix explicit SAS token handling in AzureBlobStorageIO (#1473)
biefan Mar 16, 2026
1e6f345
FEAT: Adding PyRITInitializer parameters (#1456)
rlundeen2 Mar 16, 2026
9614910
DOC: Add bibliography support with BibTeX citations across documentat…
romanlutz Mar 16, 2026
8453bad
FEAT AzureContentFilterScorer: Switch to async client and accept asyn…
adrian-gavrila Mar 17, 2026
52f8b2f
Preserve URL case in HTTP target requests (#1484)
biefan Mar 17, 2026
555f877
FEAT: Capture token usage from ChatCompletion response in OpenAIChatT…
slister1001 Mar 17, 2026
ea4533f
DOC: updating copilot review instructions (#1477)
rlundeen2 Mar 17, 2026
688ed30
MAINT: Removing pydub as a dependency (#1445)
jbolor21 Mar 17, 2026
5ca5ae1
Support CRLF raw HTTP requests in HTTPTarget (#1491)
biefan Mar 18, 2026
5ddee44
[BUG] Fix JSON path for converter class names in attack result querie…
jbolor21 Mar 18, 2026
927ad88
FIX GUI promote conversation to main feature working (#1513)
adrian-gavrila Mar 18, 2026
5811b8a
Preserve empty JSON schema metadata (#1488)
biefan Mar 18, 2026
6665bd4
Ignore blank lines when reading TXT prompts (#1480)
biefan Mar 18, 2026
7ab138b
Ignore blank lines when reading JSONL (#1479)
biefan Mar 18, 2026
bdda601
FIX GUI conversation switching during in-flight requests and sort ord…
adrian-gavrila Mar 18, 2026
da42641
Handle zero tail slices in SeedDataset.get_values (#1511)
biefan Mar 19, 2026
1264508
FIX Preserve silent when loading config overrides (#1500)
biefan Mar 19, 2026
80c1e6a
FIX Reject empty WMDP category values (#1497)
biefan Mar 19, 2026
d4b63ef
FEAT expand TargetCapabilities (#1464)
hannahwestra25 Mar 19, 2026
153cfd9
FIX: PyRITShell startup deadlock and improve shell startup time (#1489)
biefan Mar 19, 2026
cfc56d1
FEAT: Dataset Loading Changes (#1451)
ValbuenaVC Mar 19, 2026
526bce2
FEAT Breaking: Adding tags to registry classes (#1485)
rlundeen2 Mar 19, 2026
604a183
FIX align platform oai key (#1522)
hannahwestra25 Mar 20, 2026
12da653
FIX missing custom capabilities in integration test (#1521)
hannahwestra25 Mar 20, 2026
eeaa503
FIX: Small fixes to CLI docs and openai_objective_target initializer …
jsong468 Mar 20, 2026
fe7dc0d
Preserve request params and validate upload files in HTTPXAPITarget (…
biefan Mar 20, 2026
8f93c2f
Ignore imported initializer classes in script discovery (#1509)
biefan Mar 20, 2026
7822646
Fix: Eval hash mismatch due to parameter truncation in DB storage (#…
rlundeen2 Mar 20, 2026
4c76653
MAINT: Optimize devcontainer Dockerfile (#1437)
spencrr Mar 21, 2026
33f5dd4
Preserve empty URL query parameters (#1494)
biefan Mar 24, 2026
2e8ef05
FIX: flaky target capabilities tests causing intermittent failures (#…
rlundeen2 Mar 24, 2026
d0d90fa
FEAT: Use registry-based default objective scorer in scenarios (#1528)
rlundeen2 Mar 24, 2026
e2661bf
FIX pre-commit http error (#1534)
hannahwestra25 Mar 24, 2026
ba944ee
FEAT: Replace openai_objective_target initializer with explicit --tar…
rlundeen2 Mar 24, 2026
e49b4f3
FIX: Fixes for failing integration tests (#1539)
varunj-msft Mar 25, 2026
83b7f87
MAINT: Use Composition instead of Multi-Inheritance in Video Scorers …
behnam-o Mar 25, 2026
40c9a50
FIX: Fixed fairness_bias.yaml in self_ask_likert_scorer.py and added …
varunj-msft Mar 26, 2026
f7970e1
FIX: Update E2E tests (#1542)
rlundeen2 Mar 26, 2026
bf22145
DOC: Updating Getting Started Docs (#1540)
rlundeen2 Mar 26, 2026
65d1699
FIX: Add *.jsonl to MANIFEST.in for scorer metrics packaging (#1546)
varunj-msft Mar 26, 2026
4e69237
MAINT post-0.12.0 release update to 0.12.1.dev0 (#1547)
varunj-msft Mar 27, 2026
8b812dd
MAINT: Allow custom Likert system prompt and scale (#1514)
jsong468 Mar 27, 2026
8872f97
[MAINT] Migrate repository references from Azure/PyRIT to microsoft/P…
spencrr Mar 27, 2026
8741624
[BREAKING] FIX: CLI Updates (#1545)
jsong468 Mar 28, 2026
bc3949a
[MAINT]: Fold notebook header removal logic to nbstripout (#1550)
spencrr Mar 31, 2026
be00afa
FEAT: Add harm_categories to Babelscape ALERT dataset (#449) (#1551)
CheerathAniketh Apr 1, 2026
87978a9
fix: handle closed logging streams in dispose_engine shutdown (#1526)
2byrds Apr 1, 2026
1ccde34
TEST Add partner-integration-tests yml (#1543)
hannahwestra25 Apr 1, 2026
e6fdded
FEAT: Updating Scorer Metrics Update Workflow and SelfAskRefusalScore…
rlundeen2 Apr 2, 2026
7970951
FIX use the same integration test service principal (#1562)
hannahwestra25 Apr 2, 2026
5eb2cba
MAINT: standardize converter docstrings (#1560)
jbolor21 Apr 3, 2026
7624edf
DOC: Add scenario doc pages for all 7 undocumented scenarios (#1558)
varunj-msft Apr 3, 2026
28c8770
FEAT add supports_system_prompt flag (#1563)
hannahwestra25 Apr 3, 2026
25fa9c8
MAINT Remove references to the now-deprecated Crucible (#1568)
behnam-o Apr 6, 2026
60565af
DOC add instructions about partner integration tests (#1574)
hannahwestra25 Apr 7, 2026
0c4b5a1
MAINT Pin node package versions (#1571)
behnam-o Apr 7, 2026
c239f4a
DOC update User Guide dropdown nav to match actual TOC sections (#1572)
romanlutz Apr 7, 2026
66aad9f
TEST Add AWS Bedrock integration tests for OpenAI-compatible Mantle e…
romanlutz Apr 7, 2026
8e14cfe
DOC add style instructions for frontend (#1576)
hannahwestra25 Apr 7, 2026
d7b9fd1
[MAINT]: Fixup remaining Azure/PyRIT refs (#1556)
spencrr Apr 7, 2026
25a220f
FEAT: Add partner integration tests for azure-ai-evaluation red team …
slister1001 Apr 8, 2026
97e78c1
FEAT: Converter Panel for GUI! (#1471)
jbolor21 Apr 8, 2026
e5f18ab
DOC: Migrate cookbooks 1, 2, and 4 to proper doc locations - PR #2 (#…
varunj-msft Apr 8, 2026
3186982
FEAT add TargetConfiguration & pieces (#1573)
hannahwestra25 Apr 8, 2026
800bc4e
DOC: Delete cookbooks directory and fix cross-references - PR #3 (#1580)
varunj-msft Apr 8, 2026
2f03898
FIX: Audio files content check bug (#1579)
jbolor21 Apr 9, 2026
1f6cd32
FIX Mitigate Jinja2 Server-Side Template Injection (SSTI) vulnerabili…
romanlutz Apr 9, 2026
b9f4e47
DOC: Add pre-commit hook to strip tqdm progress bars from notebooks (…
rlundeen2 Apr 9, 2026
e4abebe
MAINT: harden jupyter docker (#1584)
rlundeen2 Apr 9, 2026
eec0829
MAINT Bump version to 0.13.0.dev0 (#1586)
romanlutz Apr 9, 2026
29aa274
FIX: Further updates to jinja deserialization (#1587)
rlundeen2 Apr 10, 2026
599ab00
DOC: Restructure documentation around three user pathways (#1583)
rlundeen2 Apr 10, 2026
e19cc6c
DOC: Add patch release guide to release process (#1585)
romanlutz Apr 10, 2026
3104bdc
FEAT add TargetRequirements (#1582)
hannahwestra25 Apr 10, 2026
cd3a197
FEAT: Introduce IdentifierFilters to allow generic DB queries on iden…
behnam-o Apr 10, 2026
30dc0b0
FEAT: Standardizing AIRTInitializer (#1578)
ValbuenaVC Apr 10, 2026
bd23ce5
FIX: CLI bug fixes and minor updates (#1559)
jsong468 Apr 10, 2026
a0e222c
FIX: Windows support for npm lookup (#1569)
fdubut Apr 10, 2026
43f5ffd
Preserve raw HTTP body whitespace in HTTPTarget (#1495)
biefan Apr 11, 2026
bd484a0
Respect export type in SQLite conversation exports (#1493)
biefan Apr 11, 2026
71eaa26
TEST: Moving dataset tests to end-to-end (#1589)
rlundeen2 Apr 11, 2026
df331d7
Handle empty CSV exports in remote dataset cache (#1481)
biefan Apr 12, 2026
803416a
FEAT: add ISO 42001 aligned harm definitions for AI supply chain, tra…
tejas0077 Apr 12, 2026
fd21b06
MAINT Support relative blob paths in AzureBlobStorageIO (#1478)
biefan Apr 12, 2026
7d8219d
FIX Include subdirectory jailbreak templates in listings (#1498)
biefan Apr 12, 2026
accdc7c
TEST: Rename converter/ to prompt_converter/ and add 19 converter tes…
romanlutz Apr 13, 2026
7e81131
TEST: Rename tests/unit/scenarios/ to tests/unit/scenario/ (#1593)
romanlutz Apr 13, 2026
56bd0e6
FEAT: Security & Azure deployment for CoPyRIT GUI (#1554)
adrian-gavrila Apr 13, 2026
e3b5507
Bump dependencies to resolve Dependabot security alerts (#1606)
romanlutz Apr 13, 2026
f2c05a1
TEST: Rename target/ to prompt_target/ and add target tests (#1595)
romanlutz Apr 13, 2026
6744a37
Preserve roles when converting messages to seed prompts (#1508)
biefan Apr 13, 2026
5b1fa58
TEST: Add coverage enforcement (fail-under 78%, diff-cover 90%) (#1605)
romanlutz Apr 13, 2026
6099098
TEST: Add unit tests for remote dataset loaders (#1604)
romanlutz Apr 13, 2026
4a941ae
TEST: Add unit tests for pyrit/identifiers/ module (#1597)
romanlutz Apr 13, 2026
95b1a1c
TEST: Fixing integration tests (#1609)
rlundeen2 Apr 13, 2026
8c53184
MAINT BREAK: Adding Attack Technique Abstraction (#1592)
rlundeen2 Apr 13, 2026
9f74c27
MAINT Breaking: Standardizing Attack Args (#1608)
rlundeen2 Apr 13, 2026
841477e
TEST: Add unit tests for pyrit/executor/ module (#1603)
romanlutz Apr 13, 2026
84bdf75
TEST: Add unit tests for pyrit/score/ infrastructure (#1602)
romanlutz Apr 13, 2026
bc2c0b7
TEST: Add unit tests for prompt_converter_configuration.py (#1599)
romanlutz Apr 13, 2026
bce410c
TEST: Add unit tests for pyrit/models/ module (#1601)
romanlutz Apr 13, 2026
547391f
TEST: Add unit tests for pyrit/auth/ module (#1596)
romanlutz Apr 13, 2026
57fe04d
TEST: Adding resiliency to refusal notebook (#1610)
rlundeen2 Apr 14, 2026
d19ef6a
FEAT migrate to TargetConfiguration from TargetCapabilities (#1588)
hannahwestra25 Apr 14, 2026
10e7542
Fix code scanning path injection alerts in media endpoint (#1607)
romanlutz Apr 14, 2026
d0cbcf7
FEAT Add VisualLeakBench dataset loader (arXiv:2603.13385) (#1531)
Copilot Apr 14, 2026
fe56858
FIX: GUI target config shows wrong model name due to env var override…
romanlutz Apr 14, 2026
917ec40
FIX Default backend to localhost instead of 0.0.0.0 (#1612)
adrian-gavrila Apr 14, 2026
9efcb6a
Raise a clear error for empty YAML files (#1482)
biefan Apr 15, 2026
2a83be7
FIX Preserve quoted shell arguments in run parsing (#1483)
biefan Apr 15, 2026
e32369e
FIX: update dependencies to address Dependabot security alerts (#1614)
romanlutz Apr 15, 2026
0d65999
TEST: Add unit tests for pyrit/common/ utilities (#1600)
romanlutz Apr 15, 2026
85a3c50
TEST: Add unit tests for pyrit/memory/memory_models.py (#1598)
romanlutz Apr 15, 2026
3d01a5b
MAINT Deduplicate message pieces before batch scoring (#1504)
biefan Apr 15, 2026
5e48710
FEAT: Adding AttackTechniqueRegistry (#1611)
rlundeen2 Apr 15, 2026
b9bb870
MAINT Remove all functionality deprecated for v0.13.0 (#1618)
romanlutz Apr 15, 2026
7ee78e3
MAINT Normalize remote dataset file types from URLs (#1486)
biefan Apr 15, 2026
71cc56e
FIX Replace deprecated piece.role with piece.api_role in doc notebook…
romanlutz Apr 16, 2026
d8185a4
MAINT Remove v0.13.0 deprecated APIs: FoundryScenario alias and piece…
adrian-gavrila Apr 16, 2026
87fa189
MAINT: Emit deprecation warning for unused fields being removed from …
behnam-o Apr 16, 2026
f2c3ded
Validate explicit empty field overrides in attack executor (#1507)
biefan Apr 16, 2026
4f3b299
FIX: remove type suppression comments from `MessagePiece.to_message()…
Copilot Apr 17, 2026
e268d6d
MAINT: Add pre-release scorer evaluation metrics (#1626)
adrian-gavrila Apr 17, 2026
8931f69
FIX add image input for oai chat by default (#1628)
hannahwestra25 Apr 17, 2026
c903358
FIX: resolve npm path in prepare_package.py on Windows (#1629)
adrian-gavrila Apr 17, 2026
1b29ed0
FEAT normalize messages before sending (#1613)
hannahwestra25 Apr 17, 2026
996ece3
DOC: Scoring Evaluations Blog (#1617)
jsong468 Apr 17, 2026
0e23871
MAINT: Refactoring scenario strategy selection (#1627)
rlundeen2 Apr 17, 2026
214a648
MAINT post-0.13.0 release update to 0.14.0.dev0 (#1630)
adrian-gavrila Apr 17, 2026
5df83a5
FEAT update target identifier (#1632)
hannahwestra25 Apr 20, 2026
77c7141
MAINT: enable strict mypy checking and fix violations (#1515)
tejas0077 Apr 22, 2026
bde0ed1
FEAT: Add ComicJailbreak multimodal dataset loader and generalize Add…
romanlutz Apr 22, 2026
173cfef
Normalize SeedPrompt file extension detection (#1501)
biefan Apr 22, 2026
2c38d46
FEAT: Add three image converters (color saturation, resize, rotate) (…
fdubut Apr 22, 2026
64b97e4
MAINT: Add pre-commit hook to strip kernelspec from jupytext .py file…
romanlutz Apr 22, 2026
6b479f4
FIX: Refusal Scorer Notebook (#1639)
jbolor21 Apr 22, 2026
ccfc9a2
FEAT: Deprecate use_entra_auth and add auto-detect auth for Azure Spe…
varunj-msft Apr 22, 2026
a55eec5
FEAT [GUI] Display signed-in user info in top bar and populate operat…
behnam-o Apr 22, 2026
66afba2
FIX: Fix multi-turn attacks using RealtimeTarget (#1638)
jsong468 Apr 22, 2026
c295d2d
MAINT: mypy fixes (comicjailbreak) (#1640)
jbolor21 Apr 22, 2026
5ab0bbc
Preserve empty responses in prompt normalizer batches (#1506)
biefan Apr 23, 2026
6be3a8a
MAINT: Rapid response Scenario (#1622)
rlundeen2 Apr 23, 2026
3cb699c
MAINT Add Python 3.14 support (#1130)
cclauss Apr 24, 2026
80d3e68
FIX Stop using deprecated AttackResult.attack_identifier in attack_se…
romanlutz Apr 24, 2026
5936b12
FEAT Add VLGuard multimodal safety dataset loader (#1447)
romanlutz Apr 24, 2026
8c95124
FIX Reject explicit empty objectives in batch scoring (#1503)
biefan Apr 24, 2026
e58473f
MAINT: Set PYRIT_CORS_ORIGINS env var in Bicep instead of imperativel…
adrian-gavrila Apr 24, 2026
6dab9f2
FIX VLGuard review fixes: document subcategory mapping, move import t…
romanlutz Apr 24, 2026
0f0130a
FEAT: Implement DB schema tracking with alembic (#1631)
behnam-o Apr 24, 2026
aabf9bd
FIX: Use `underlying_model_name` for evaluation identifier and add `p…
jsong468 Apr 27, 2026
936ae43
FIX: AIRTInitializer container crash and parameters.example.json typo…
varunj-msft Apr 27, 2026
017ebbd
FIX: prompt_normalizer.send_prompt_async attempts to save duplicate m…
behnam-o Apr 27, 2026
b86d92d
FEAT: Searchable multi-select filters for Attack History (ADO 7834) (…
adrian-gavrila Apr 27, 2026
d3a08a3
FIX remove check_schema flag from config loader (forgotten in a previ…
behnam-o Apr 27, 2026
6ccf1ff
FEAT implement batching for memory interface (#1325)
maifeeulasad Apr 27, 2026
7a22cf8
MAINT: Refactor Cyber scenario to use technique registry pattern (#1654)
rlundeen2 Apr 28, 2026
4118487
MAINT: Add merge_group trigger to CI workflows for merge queue suppor…
romanlutz Apr 28, 2026
e113734
MAINT remove path from frontend tests (#1667)
hannahwestra25 Apr 29, 2026
55fd7bc
MAINT: Add deprecation warnings when Message Piece is constructed wit…
behnam-o Apr 30, 2026
5f38a88
DOC: Deployment guide for GUI instances (#1658)
varunj-msft Apr 30, 2026
40ec403
FEAT: Deployment automation for isolated GUI instances (#1655)
varunj-msft Apr 30, 2026
4f4d2e0
MAINT Migration from mypy to ty (#1319)
maifeeulasad Apr 30, 2026
063ae4f
TEST add unit tests for build scripts (#1642)
tejas0077 Apr 30, 2026
9ad5a22
FIX Surface AttackResultEntry.timestamp on hydrated AttackResult (#1653)
thirteeneight Apr 30, 2026
5eaa0c3
FEAT: Add single_turn_crescendo technique with adversarial_config (#1…
rlundeen2 Apr 30, 2026
7065339
MAINT: Lazy Imports for perf (#1668)
rlundeen2 Apr 30, 2026
e635ee9
FEAT Migrate consumers to `TargetConfiguration` capability checks (#1…
hannahwestra25 Apr 30, 2026
96a9510
MAINT FIX: Fix ReadTheDocs config validation error (#1673)
romanlutz Apr 30, 2026
fd195bf
MAINT: Deprecating Dall-E specific parameters and aligning OpenAIImag…
jsong468 Apr 30, 2026
0817489
FIX: RTD build - install deps explicitly in build.jobs.install (#1676)
romanlutz Apr 30, 2026
7e214ea
MAINT: pyproject update (#1674)
rlundeen2 Apr 30, 2026
c70b7c3
FEAT: Add scenario listing API endpoints to backend (#1666)
rlundeen2 Apr 30, 2026
644b45c
FIX set editable_history in 2_red_teaming_attack (#1675)
hannahwestra25 May 1, 2026
585c009
FEAT add crescendo persona scenario techniques (movie director, histo…
precognitivem0nk May 1, 2026
79bb410
FEAT: Add Image functionality to TAP (#1036)
awksrj May 1, 2026
2e952a6
MAINT: Simplifying Initializers (#1679)
rlundeen2 May 1, 2026
39031dd
MAINT: Add labels to attack results (#1624)
behnam-o May 1, 2026
a7e9c80
FEAT: HuggingFace reproducibility params, OpenAI-compatible integrati…
romanlutz May 2, 2026
2934127
FIX Return no memory results for empty prompt ID filters (#1499)
biefan May 2, 2026
4e8d6c1
FEAT: Warn GUI users when target doesn't support attachment modality
romanlutz May 5, 2026
50ff2b7
FIX: Block sending when target doesn't support attachment modality
romanlutz May 5, 2026
0d9eb90
FEAT: Block sending when converter output type is unsupported by target
romanlutz May 6, 2026
5a9e735
FIX: Expand textarea max height and unify scrollbar styling
romanlutz May 6, 2026
01b204b
FIX: Share textarea space equally between original and converted
romanlutz May 6, 2026
fc3941f
FIX: Redesign input area layout for proper space sharing
romanlutz May 6, 2026
bf62cad
FIX: Restore scroll, style clear button, fix spacing and badge alignment
romanlutz May 6, 2026
d4a6848
FIX: Proper textarea sizing, scrolling, and button styling
romanlutz May 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
File renamed without changes.
21 changes: 21 additions & 0 deletions .azuredevops/end-to-end-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Runs end-to-end scenario tests using pyrit_scan CLI

trigger: none # Disable automatic CI triggers

schedules:
- cron: "0 7 * * *" # 7 AM UTC = 11 PM PST (UTC-8) / Midnight PDT (UTC-7)
displayName: Nightly E2E Tests at 11 PM PST
branches:
include:
- main
always: true # Run even if there are no code changes

jobs:
- template: test-job-template.yml
parameters:
jobName: EndToEndTests
jobDisplayName: "Run end-to-end scenario tests"
testAzureSubscription: 'integration-test-service-connection'
newDir: e2e_test_directory
testsFolder: end_to_end
makeTarget: end-to-end-test
19 changes: 19 additions & 0 deletions .azuredevops/integration-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@

# Builds the pyrit environment and runs integration tests

trigger:
branches:
include:
- main

# There are additional PR triggers for this that are configurable in ADO.

jobs:
- template: test-job-template.yml
parameters:
jobName: IntegrationTests
jobDisplayName: "Builds the pyrit environment and runs integration tests"
testAzureSubscription: 'integration-test-service-connection'
newDir: integration_test_directory
testsFolder: integration
makeTarget: integration-test
21 changes: 21 additions & 0 deletions .azuredevops/partner-integration-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Builds the pyrit environment and runs partner integration tests. Partner integration tests are to ensure that we
# are not breaking any contract between PyRIT and its partners.
trigger: none # Disable automatic CI triggers

schedules:
- cron: "0 6 * * *" # 6 AM UTC = 10 PM PST (UTC-8) / 11PM PDT (UTC-6)
displayName: Nightly Partner Integration Tests at 10 PM PST
branches:
include:
- main
always: true # Run even if there are no code changes

jobs:
- template: test-job-template.yml
parameters:
jobName: PartnerIntegrationTests
jobDisplayName: "Builds the pyrit environment and runs partner integration tests"
testAzureSubscription: 'integration-test-service-connection'
newDir: partner_integration_test_directory
testsFolder: partner_integration
makeTarget: partner-integration-test
126 changes: 126 additions & 0 deletions .azuredevops/test-job-template.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
parameters:
- name: jobName
type: string
- name: jobDisplayName
type: string
- name: testAzureSubscription
type: string
- name: newDir
type: string
- name: testsFolder
type: string
- name: makeTarget
type: string

jobs:
- job: ${{ parameters.jobName }}
displayName: ${{ parameters.jobDisplayName }}
timeoutInMinutes: 360
pool:
vmImage: ubuntu-latest
steps:
- checkout: self
fetchDepth: 1
- task: UsePythonVersion@0
inputs:
versionSpec: '3.12'
addToPath: true
- bash: |
mkdir -p ~/.pyrit
displayName: "Create PyRIT configuration directory"
name: create_pyrit_dir
- task: AzureKeyVault@2
displayName: Azure Key Vault - retrieve .env file secret
inputs:
azureSubscription: 'integration-test-service-connection'
KeyVaultName: 'pyrit-environment'
SecretsFilter: 'env-global'
RunAsPreJob: false
- bash: |
python -c "
import os;
secret = os.environ.get('PYRIT_TEST_SECRET');
if not secret:
raise ValueError('PYRIT_TEST_SECRET is not set');
with open(os.path.expanduser('~/.pyrit/.env'), 'w') as file:
file.write(secret)"
env:
PYRIT_TEST_SECRET: $(env-global)
name: create_env_file
- bash: |
cp build_scripts/env_local_integration_test ~/.pyrit/.env.local
displayName: "Create .env.local from example"
- script:
wget -qO- https://astral.sh/uv/install.sh | sh
name: install_uv
- bash: sudo apt-get install python3-tk
name: install_tkinter
- bash: |
set -e
# Detect Ubuntu version
UBUNTU_VERSION=$(grep VERSION_ID /etc/os-release | cut -d '"' -f 2)
SUPPORTED_VERSIONS="18.04 20.04 22.04 24.04 24.10"

if ! [[ "$SUPPORTED_VERSIONS" == *"$UBUNTU_VERSION"* ]]; then
echo "Ubuntu $UBUNTU_VERSION is not currently supported."
exit 1
fi

# Download the package to configure the Microsoft repo
curl -sSL -O https://packages.microsoft.com/config/ubuntu/$(grep VERSION_ID /etc/os-release | cut -d '"' -f 2)/packages-microsoft-prod.deb
# Install the package
sudo dpkg -i packages-microsoft-prod.deb
# Delete the file
rm packages-microsoft-prod.deb

# Install the driver
sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18

echo "Microsoft ODBC Driver 18 installed successfully."
displayName: 'Install ODBC Driver 18 for SQL Server'
- bash: uv sync --extra all
name: install_PyRIT
- bash: df -all -h
name: disk_space_check
# This step ensures that tests are run outside of the PyRIT repository to test that .env files are accessed correctly.
- bash: |
PyRIT_DIR=$(pwd)
NEW_DIR="${{ parameters.newDir }}"
cd ..
mkdir -p $NEW_DIR/tests
cp -r $PyRIT_DIR/doc $NEW_DIR
cp -r $PyRIT_DIR/assets $NEW_DIR
cp -r $PyRIT_DIR/tests/${{ parameters.testsFolder }} $NEW_DIR/tests
cd $NEW_DIR
displayName: "Create and switch to new test directory"
- task: AzureCLI@2
displayName: "Authenticate with service principal, cache Cognitive Services access token, and run tests"
inputs:
azureSubscription: ${{ parameters.testAzureSubscription }}
scriptType: 'bash'
scriptLocation: 'inlineScript'
inlineScript: |
# Prefetch token for Cognitive Services before ID token expires (60-90 minute validity)
az account get-access-token --scope https://cognitiveservices.azure.com/.default --output none
echo "Cognitive Services access token cached successfully."

# Prefetch token for Azure ML / Foundry model endpoints
az account get-access-token --scope https://ml.azure.com/.default --output none
echo "Azure ML/Foundry access token cached successfully."

# Prefetch token for Azure SQL Database
az account get-access-token --scope https://database.windows.net/.default --output none
echo "Azure SQL Database access token cached successfully."

# Run tests
make ${{ parameters.makeTarget }}
- bash: |
rm -f ~/.pyrit/.env ~/.pyrit/.env.local
name: clean_up_env_files
condition: always()
- task: PublishTestResults@2
condition: always()
inputs:
testResultsFormat: 'JUnit'
testResultsFiles: 'junit/test-results.xml'
107 changes: 66 additions & 41 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,67 +1,91 @@
FROM mcr.microsoft.com/devcontainers/anaconda:3
# syntax=docker/dockerfile:1
FROM mcr.microsoft.com/devcontainers/python:3.11-bookworm

# Makes installation faster
ENV UV_COMPILE_BYTECODE=1
ENV DEBIAN_FRONTEND=noninteractive

SHELL ["/bin/bash", "-c"]

USER root

# Install required system packages + ODBC prerequisites
RUN apt-get update && apt-get install -y \
unixodbc \
unixodbc-dev \
libgl1-mesa-glx \
curl \
xdg-utils \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
# Remove the Yarn repository (has expired GPG key and we don't use Yarn)
RUN rm -f /etc/apt/sources.list.d/yarn.list 2>/dev/null || true

# Download and install the DuckDB CLI
RUN curl -Lo duckdb.gz https://github.com/duckdb/duckdb/releases/download/v1.2.1/duckdb_cli-linux-amd64.gz \
&& gunzip duckdb.gz \
&& mv duckdb /usr/local/bin/duckdb \
&& chmod +x /usr/local/bin/duckdb
# Install required system packages + ODBC prerequisites
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt/lists,sharing=locked \
apt-get update \
&& apt-get install -y --no-install-recommends \
sudo \
unixodbc \
unixodbc-dev \
libgl1 \
git \
curl \
xdg-utils \
build-essential

# Install the Azure CLI, Microsoft ODBC Driver 18 & SQL tools
RUN apt-get update && apt-get install -y \
apt-transport-https \
# Install Microsoft ODBC Driver 18 & SQL tools
# Note: Debian Trixie's sqv rejects SHA1 signatures, so we use gpg directly to import the Microsoft key
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt/lists,sharing=locked \
apt-get update \
&& apt-get install -y --no-install-recommends \
ca-certificates \
gnupg \
lsb-release \
&& curl -sL https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb \
-o packages-microsoft-prod.deb \
&& dpkg -i packages-microsoft-prod.deb \
&& rm packages-microsoft-prod.deb \
&& curl -sL https://packages.microsoft.com/keys/microsoft.asc \
| gpg --dearmor \
> /usr/share/keyrings/microsoft-archive-keyring.gpg \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/microsoft-archive-keyring.gpg] https://packages.microsoft.com/debian/12/prod bookworm main" \
> /etc/apt/sources.list.d/microsoft.list \
&& apt-get update \
&& ACCEPT_EULA=Y apt-get install -y \
&& ACCEPT_EULA=Y apt-get install -y --no-install-recommends \
msodbcsql18 \
mssql-tools \
unixodbc-dev \
&& apt-get install -y azure-cli \
&& echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> /etc/profile.d/sqltools.sh \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
mssql-tools18 \
&& echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> /etc/profile.d/sqltools.sh

# audio back-ends needed by Azure Speech SDK
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive \
apt-get install -y --no-install-recommends \
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt/lists,sharing=locked \
apt-get update \
&& apt-get install -y --no-install-recommends \
libasound2 \
libpulse0 \
&& rm -rf /var/lib/apt/lists/*
libpulse0

# Install uv system-wide and create pyrit-dev venv
RUN curl -LsSf https://astral.sh/uv/0.10.8/install.sh | sh \
&& mv /root/.local/bin/uv /bin/uv \
&& mv /root/.local/bin/uvx /bin/uvx
RUN uv venv /opt/venv --python 3.11 --prompt pyrit-dev \
&& chown -R vscode:vscode /opt/venv
ENV PATH="/opt/venv/bin:$PATH"

# Install Node.js 24.x LTS for frontend development
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt/lists,sharing=locked \
curl -fsSL https://deb.nodesource.com/setup_24.x | bash - \
&& apt-get install -y --no-install-recommends nodejs

# Create conda env and install pyodbc into it
RUN conda create -n pyrit-dev python=3.11 -y && \
conda install -n pyrit-dev -c conda-forge pyodbc -y && \
chown -R vscode:vscode /opt/conda/envs/pyrit-dev
# vscode user already exists in the base image, just ensure sudo access
RUN echo "vscode ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

# Pre-create common user caches and fix permissions
RUN mkdir -p /home/vscode/.cache/pre-commit \
&& mkdir -p /home/vscode/.vscode-server \
&& mkdir -p /home/vscode/.cache/pip \
&& mkdir -p /home/vscode/.cache/conda \
&& mkdir -p /home/vscode/.cache/uv \
&& mkdir -p /home/vscode/.cache/venv \
&& mkdir -p /home/vscode/.cache/pylance \
&& chown -R vscode:vscode /home/vscode/.cache /home/vscode/.vscode-server \
&& chmod -R 777 /home/vscode/.cache/conda /home/vscode/.cache/pip \
&& chmod -R 755 /home/vscode/.cache/pip /home/vscode/.cache/pylance /home/vscode/.cache/venv /home/vscode/.cache/uv \
&& chmod -R 755 /home/vscode/.vscode-server

USER vscode
# Create bash configuration files and activate the venv in bash sessions
RUN touch /home/vscode/.bashrc /home/vscode/.bash_profile \
&& echo "[ -f /opt/venv/bin/activate ] && source /opt/venv/bin/activate" >> /home/vscode/.bashrc \
&& echo "[ -f /opt/venv/bin/activate ] && source /opt/venv/bin/activate" >> /home/vscode/.bash_profile

# Configure Git for better performance with bind mounts
RUN git config --global core.preloadindex true \
Expand All @@ -70,5 +94,6 @@ RUN git config --global core.preloadindex true \
&& git config --global status.showUntrackedFiles all \
&& git config --global core.fsmonitor true

# Set pip’s cache directory so it can be mounted
# Set cache directories so they can be mounted
ENV PIP_CACHE_DIR="/home/vscode/.cache/pip"
ENV UV_CACHE_DIR="/home/vscode/.cache/uv"
Loading
Loading