BUG: HuggingFaceChatTarget runs model.generate() on the event loop

Offen Anfängerfreundlich
#4,046 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 2 Tagen

@Shizoqua arbeitet bereits daran.

Seit 07.11.2026.

  • #4047 von @Shizoqua — offen

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
76/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
huggingface, python
Bereich
ai, backend

Rechercherichtung

Finde HuggingFaceChatTarget._send_prompt_to_target_async und untersuche, wo es self.model.generate(...) aufruft; Issue #2211 könnte Kontext dazu liefern, wie die Modellarbeit aus der Event Loop verlagert werden kann. Reproduziere den Stillstand, indem du generate patchst, sodass es auf ein threading.Event wartet, während ein anderer Task versucht, es nach asyncio.sleep(0.05) freizugeben. Fertig, wenn andere asyncio-Tasks während der Generierung ausgeführt werden können.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

Describe the bug

HuggingFaceChatTarget._send_prompt_to_target_async calls self.model.generate(...) directly inside the async method. Local generation can take seconds to minutes, and it blocks the event loop the whole time, so every other attack, scorer and target call in the same run stalls. #2211 moved model loading off the event loop, but generation still runs on it.

Steps/Code to Reproduce

In a unit test, patch the loaded model's generate to wait on a threading.Event, then send a prompt while another task tries to set that event after asyncio.sleep(0.05). The other task never runs until generate returns.

Expected Results

Other tasks keep running while the model generates.

Actual Results

The event loop is blocked for the full generation time.

Versions

PyRIT main.

Vorherrschende Sprache
Python
Sterne
4.7k
Forks
1k
Ø Merge
2 T. 4 Std.
Gemergte PRs (30 T.)
510

Entwicklungsumgebung

In Codespaces öffnen

Startet den Dev-Container des Projekts im Browser, mit Ihrem eigenen GitHub-Konto.

  • Kein Dockerfile und keine Docker-Compose-Datei
  • Hat eine Pull-Request-Vorlage
  • Kein Beitragsleitfaden

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus microsoft/PyRIT

Alle Issues in microsoft/PyRIT

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.