Skip to content

Commit a62c50e

Browse files
committed
[MAINT] Migrate repository references from Azure/PyRIT to microsoft/PyRIT
1 parent 8b812dd commit a62c50e

42 files changed

Lines changed: 80 additions & 78 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,4 @@ For example, [BREAKING] FEAT or [BREAKING] MAINT -->
2929

3030
<!--- JupyText helps us see regressions in APIs or in our documentation by executing all code samples -->
3131
<!--- Include how you/if ran JupyText here -->
32-
<!--- This is described at: https://github.com/Azure/PyRIT/tree/main/doc -->
32+
<!--- This is described at: https://github.com/microsoft/PyRIT/tree/main/doc -->

.pyrit_conf_example

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
# or specify a custom path when loading via --config-file.
55
#
66
# For documentation on configuration options, see:
7-
# https://github.com/Azure/PyRIT/blob/main/doc/setup/configuration.md
7+
# https://github.com/microsoft/PyRIT/blob/main/doc/setup/configuration.md
88

99
# Memory Database Type
1010
# --------------------

CITATION.cff

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ authors:
55
title: "PyRIT: The Python Risk Identification Tool for generative AI"
66
doi: https://doi.org/10.48550/arXiv.2410.02828
77
date-released: 2024-02-21
8-
url: "https://github.com/Azure/PyRIT"
8+
url: "https://github.com/microsoft/PyRIT"

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ The Python Risk Identification Tool for generative AI (PyRIT) is an open source
66
framework built to empower security professionals and engineers to proactively
77
identify risks in generative AI systems.
88

9-
- Check out our [website](https://azure.github.io/PyRIT/) for more information
9+
- Check out our [website](https://microsoft.github.io/PyRIT/) for more information
1010
about how to use, install, or contribute to PyRIT.
1111
- Visit our [Discord server](https://discord.gg/9fMpq3tc8u) to chat with the team and community.
1212

build_scripts/generate_rss.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,10 @@ def extract_date_from_filename(filename: str) -> str:
6969
# Generate the RSS feed structure
7070
print("Generating RSS feed structure...")
7171
fg = FeedGenerator()
72-
fg.link(href="https://azure.github.io/PyRIT/blog/rss.xml", rel="self")
72+
fg.link(href="https://microsoft.github.io/PyRIT/blog/rss.xml", rel="self")
7373
fg.title("PyRIT Blog")
7474
fg.description("PyRIT Blog")
75-
fg.logo("https://azure.github.io/PyRIT/_static/roakey.png")
75+
fg.logo("https://microsoft.github.io/PyRIT/_static/roakey.png")
7676
fg.language("en")
7777

7878
# Iterate over the blog source markdown files
@@ -93,8 +93,8 @@ def extract_date_from_filename(filename: str) -> str:
9393
fe = fg.add_entry()
9494
# Blog pages are served at blog/<filename_without_ext>
9595
page_name = file.stem
96-
fe.link(href=f"https://azure.github.io/PyRIT/blog/{page_name}")
97-
fe.guid(f"https://azure.github.io/PyRIT/blog/{page_name}")
96+
fe.link(href=f"https://microsoft.github.io/PyRIT/blog/{page_name}")
97+
fe.guid(f"https://microsoft.github.io/PyRIT/blog/{page_name}")
9898

9999
title, description = parse_blog_markdown(file)
100100
fe.title(title)

doc/_static/custom.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ window.addEventListener("DOMContentLoaded", () => {
2121
rssLink.rel = 'alternate';
2222
rssLink.type = 'application/rss+xml';
2323
rssLink.title = 'PyRIT Blog RSS Feed';
24-
rssLink.href = 'https://azure.github.io/PyRIT/blog/rss.xml';
24+
rssLink.href = 'https://microsoft.github.io/PyRIT/blog/rss.xml';
2525

2626
document.head.appendChild(rssLink);
2727
}

doc/blog/2024_12_3.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ Over time, certain patterns have emerged—one of the most common being the mult
88

99
## The problem
1010

11-
If you look at some of the code from release [0.4.0](https://github.com/Azure/PyRIT/tree/releases/v0.4.0) in August, you may notice some weirdness.
11+
If you look at some of the code from release [0.4.0](https://github.com/microsoft/PyRIT/tree/releases/v0.4.0) in August, you may notice some weirdness.
1212

1313
The Red Teaming Orchestrator, Crescendo [@russinovich2024crescendo], TAP [@mehrotra2023tap], and PAIR [@chao2023pair] all follow a similar setup: you configure your attack LLM, scorer, and target, then send prompts to achieve an objective. However, their implementation details vary.
1414

@@ -51,6 +51,6 @@ See the updated documentation [here](../code/executor/attack/2_red_teaming_attac
5151

5252
## What's next?
5353

54-
Orchestrators are, at their core, meant to remain top-level components. While we've made strides in standardization, there's still room for improvement. For instance, we're planning to standardize the `PromptSendingOrchestrator` in a similar way (including updating its naming for consistency). And we've opened a [few issues](https://github.com/Azure/PyRIT/issues/585) for feature parity between MultiTurnOrchestrators.
54+
Orchestrators are, at their core, meant to remain top-level components. While we've made strides in standardization, there's still room for improvement. For instance, we're planning to standardize the `PromptSendingOrchestrator` in a similar way (including updating its naming for consistency). And we've opened a [few issues](https://github.com/microsoft/PyRIT/issues/585) for feature parity between MultiTurnOrchestrators.
5555

5656
Hope you enjoyed this little post. There will be more content like this coming!

doc/blog/2025_01_27.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ Those who have interacted with me are aware that I'm a strong advocate for autom
2020

2121
Back to the topic of AI security and LLMs, the Python Risk Identification Tool for generative AI (PyRIT) [^1] , developed by Microsoft, is an open-source tool designed for automating LLM testing. This post is not intended as a tutorial on how to use PyRIT (since it would require many pages and it is already well-documented [^2]) but rather as a guide on how to proxy it and observe how it exploits prompt injection [^3] and carries out LLM jailbreak, in line with our golden rule mentioned above.
2222

23-
[^1]: "Python Risk Identification Tool for generative AI (PyRIT)", https://github.com/Azure/PyRIT
23+
[^1]: "Python Risk Identification Tool for generative AI (PyRIT)", https://github.com/microsoft/PyRIT
2424

25-
[^2]: "PyRIT Documentation", https://azure.github.io/PyRIT/
25+
[^2]: "PyRIT Documentation", https://microsoft.github.io/PyRIT/
2626

2727
[^3]: "Exploring Prompt Injection", https://www.nccgroup.com/us/research-blog/exploring-prompt-injection-attacks/
2828

@@ -36,15 +36,15 @@ PyRIT implements many kinds of "targets", but I mostly use the "HTTPTarget" as t
3636

3737
However, while the "HTTPTarget" class had HTTP proxy support, the "OllamaChatTarget" class did not. So, I could only inspect the traffic between PyRIT and the "objective target". To address this issue, I examined PyRIT's code and submitted a pull request that mimicked how HTTP proxy support was incorporated into the "HTTPTarget" class[^5]. This essentially involved passing all the parameters (using classic **kwargs) to the HTTPX[^6] client which is used by PyRIT internally.
3838

39-
This feature is now included in the main branch but is not yet in the latest release (at the time of writing). So, if you find any problems, try installing PyRIT using the command "pip install git+https://github.com/Azure/PyRIT/". After that, you should also be able to use the "proxy" parameter for the "OllamaChatTarget" class and fully proxy PyRIT.
39+
This feature is now included in the main branch but is not yet in the latest release (at the time of writing). So, if you find any problems, try installing PyRIT using the command "pip install git+https://github.com/microsoft/PyRIT/". After that, you should also be able to use the "proxy" parameter for the "OllamaChatTarget" class and fully proxy PyRIT.
4040

4141
![image](proxypyrit_figure1.png)
4242

4343
<small> Figure 1 - Using the "proxy" parameter within the "OllamaChatTarget" class </small>
4444

4545
[^4]: "Ollama: Get up and running with large language models", https://ollama.com
4646

47-
[^5]: "FEAT Passing HTTP client kwargs from OllamaChatTarget", https://github.com/Azure/PyRIT/pull/596
47+
[^5]: "FEAT Passing HTTP client kwargs from OllamaChatTarget", https://github.com/microsoft/PyRIT/pull/596
4848

4949
[^6]: "HTTPX: A next-generation HTTP client for Python", https://www.python-httpx.org
5050

@@ -78,11 +78,11 @@ Finally, when PyRIT gets a response from the Target LLM, it switches to another
7878

7979
When examining this request, you may discover that occasionally the Adversarial LLM struggles with generating the right JSON format, leading to an error in PyRIT, regardless of whether the objective was achieved or not. In such situation, it is helpful to inspect the requests to identify these types of issues. Specifically, I found a problem when the LLM response contained double quotes, causing issues with subsequent JSON formats which was fixed using the "SearchReplaceConverter"[^9] prompt converter.
8080

81-
[^7]: "Multi-Turn Attack - RedTeamingAttack Example", https://azure.github.io/PyRIT/code/executor/attack/2_red_teaming_attack.html
81+
[^7]: "Multi-Turn Attack - RedTeamingAttack Example", https://microsoft.github.io/PyRIT/code/executor/attack/2_red_teaming_attack.html
8282

83-
[^8]: "PyRIT - SearchReplaceConverter", https://azure.github.io/PyRIT/_autosummary/pyrit.prompt_converter.SearchReplaceConverter.html
83+
[^8]: "PyRIT - SearchReplaceConverter", https://microsoft.github.io/PyRIT/_autosummary/pyrit.prompt_converter.SearchReplaceConverter.html
8484

85-
[^9]: "PyRIT - True False Scoring", https://azure.github.io/PyRIT/code/scoring/2_true_false_scorers.html#true-false-scoring
85+
[^9]: "PyRIT - True False Scoring", https://microsoft.github.io/PyRIT/code/scoring/2_true_false_scorers.html#true-false-scoring
8686

8787
### Final Thoughts
8888

doc/blog/2025_03_03.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<small>3 Mar 2025 - Rich Lundeen</small>
44

5-
One of the first targets we built was OpenAIChatTarget. A lot of models are compatible with OpenAI, so this should work with all of those, right? There are some nuanced reasons why it didn't always work. But with [this commit](https://github.com/Azure/PyRIT/commit/924ba48ff2c56c2532190b7b6dca3bad412d3bc2), we should more broadly support OpenAI-compatible models.
5+
One of the first targets we built was OpenAIChatTarget. A lot of models are compatible with OpenAI, so this should work with all of those, right? There are some nuanced reasons why it didn't always work. But with [this commit](https://github.com/microsoft/PyRIT/commit/924ba48ff2c56c2532190b7b6dca3bad412d3bc2), we should more broadly support OpenAI-compatible models.
66

77
DeepSeek launching about a month ago illustrates the problem well. We wanted to take a look at it with PyRIT, and because it has an "OpenAI-compatible API," it seemed like it should work out of the box... but it didn't. Since we have a dev team, we were able to quickly unblock people wanting to look at this. But the fact that it didn't work initially is interesting and a problem we wanted to tackle.
88

@@ -27,7 +27,7 @@ But the exact same request to an Azure OpenAI endpoint works as expected.
2727

2828
![alt text](2025_03_03_4.png)
2929

30-
When DeepSeek was released, some of our default parameters caused it to fail. This isn't the first time an extra parameter has bitten us. When o1 came out, we learned `max_tokens` was incompatible with `max_completion_tokens`, and because we were sending one by default, our target didn't work on o1 without [a fix](https://github.com/Azure/PyRIT/pull/501/).
30+
When DeepSeek was released, some of our default parameters caused it to fail. This isn't the first time an extra parameter has bitten us. When o1 came out, we learned `max_tokens` was incompatible with `max_completion_tokens`, and because we were sending one by default, our target didn't work on o1 without [a fix](https://github.com/microsoft/PyRIT/pull/501/).
3131

3232
With this update, we're not sending most parameters by default to make the requests as simple and compatible as possible. In addition, we're working on scanner configurations, so you can set your own defaults for various targets. That work is coming soon.
3333

@@ -129,6 +129,6 @@ async def test_connect_required_openai_text_targets(endpoint, api_key, model_nam
129129

130130
This is such a nuanced issue. I may have over-explained because, at first glance, it seems like "OpenAI-compatible" models should have just worked with PyRIT. Hopefully that's more true now than it used to be! As a concrete step in this directions, we've removed the `OllamaChatTarget` and `GroqChatTarget` since they are compatible now.
131131

132-
As always, we're open to any feedback, and please [open github issues](https://github.com/Azure/PyRIT/issues) if you find PyRIT doesn't work with specific OpenAI-compatible targets.
132+
As always, we're open to any feedback, and please [open github issues](https://github.com/microsoft/PyRIT/issues) if you find PyRIT doesn't work with specific OpenAI-compatible targets.
133133

134134
Happy Hacking!

doc/blog/2025_06_06.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ The [AI Recruiter](https://github.com/KutalVolkan/ai_recruiter) is designed to m
1212

1313
- Résumé Processing & Semantic Matching: Résumés are extracted from PDFs, with embeddings generated using models like text-embedding-ada-002. These embeddings enable semantic matching, while GPT-4o is later used to assign a match score based on relevance and extracted content.
1414

15-
- Automated RAG Vulnerability Testing: Attackers can manipulate résumé content by injecting hidden text (via a [PDF converter](https://github.com/Azure/PyRIT/blob/main/doc/code/converters/pdf_converter.ipynb)) that optimizes scoring, influencing the AI Recruiter’s ranking system.
15+
- Automated RAG Vulnerability Testing: Attackers can manipulate résumé content by injecting hidden text (via a [PDF converter](https://github.com/microsoft/PyRIT/blob/main/doc/code/converters/pdf_converter.ipynb)) that optimizes scoring, influencing the AI Recruiter’s ranking system.
1616

17-
- [XPIA Attack](https://github.com/Azure/PyRIT/blob/main/doc/code/executor/workflow/2_xpia_ai_recruiter.ipynb) Integration: PyRIT enables full automation of prompt injections, making AI vulnerability research efficient and reproducible.
17+
- [XPIA Attack](https://github.com/microsoft/PyRIT/blob/main/doc/code/executor/workflow/2_xpia_ai_recruiter.ipynb) Integration: PyRIT enables full automation of prompt injections, making AI vulnerability research efficient and reproducible.
1818
---
1919

2020
## The Exploit in Detail: Step-by-Step
@@ -84,9 +84,9 @@ As we integrate AI into more facets of our lives, it’s imperative to build sys
8484

8585
*Explore More:*
8686

87-
- [XPIA Website Attack Notebook](https://github.com/Azure/PyRIT/blob/main/doc/code/executor/workflow/1_xpia_website.ipynb)
87+
- [XPIA Website Attack Notebook](https://github.com/microsoft/PyRIT/blob/main/doc/code/executor/workflow/1_xpia_website.ipynb)
8888

89-
- [XPIA AI Recruiter Attack Notebook](https://github.com/Azure/PyRIT/blob/main/doc/code/executor/workflow/2_xpia_ai_recruiter.ipynb)
89+
- [XPIA AI Recruiter Attack Notebook](https://github.com/microsoft/PyRIT/blob/main/doc/code/executor/workflow/2_xpia_ai_recruiter.ipynb)
9090

9191
- [View AI Recruiter Integration Test](../../tests/integration/ai_recruiter/test_ai_recruiter.py)
9292

0 commit comments

Comments
 (0)