BUG: LLMGenericTextConverter identifier changes between processes for set-valued template parameters

Offen Anfängerfreundlich
#3,841 1 Kommentar 0 Reaktionen 1 zugewiesene Person Auf GitHub ansehen

Maintainer antworten meist innerhalb von 2 Tagen

@samrudhi03 arbeitet bereits daran.

Seit 04.11.2026.

  • #3928 von @samrudhi03 — offen

Bewertung

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

Rechercherichtung

Beginne in _describe_template_value in llm_generic_text_converter.py, etwa in Zeile 67, wo set- und frozenset-Werte wie Listen behandelt werden. Führe das Reproduktionsskript zweimal aus, einmal mit PYTHONHASHSEED=1 und einmal mit PYTHONHASHSEED=2, und vergleiche die Ausgabe der Kennung. Fertig ist es, wenn die Kennung über die Seeds hinweg übereinstimmt und die Template-Darstellung unverändert bleibt, wie das Issue verlangt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

Bug: triage
Describe the bug

_describe_template_value handles set and frozenset like a list (llm_generic_text_converter.py:67), so the identifier follows set iteration order. That order depends on PYTHONHASHSEED, so the same configuration gets a different hash in each process.

Steps/Code to Reproduce

Run on main at 5fb4fb977, once with PYTHONHASHSEED=1 and once with PYTHONHASHSEED=2.

import asyncio

from pyrit.converter import LLMGenericTextConverter
from pyrit.models import SeedPrompt
from pyrit.prompt_target import OpenAIChatTarget
from pyrit.setup import IN_MEMORY, initialize_pyrit_async


async def main() -> None:
    await initialize_pyrit_async(memory_db_type=IN_MEMORY, silent=True)
    target = OpenAIChatTarget(endpoint="https://example.invalid/v1", api_key="unused", model_name="model-a")
    converter = LLMGenericTextConverter(
        converter_target=target,
        system_prompt_template=SeedPrompt(value="Use one of these tones: {{ tone }}", parameters=["tone"]),
        tone={"alpha", "beta", "gamma", "delta", "epsilon", "zeta"},
    )
    print(converter.get_identifier().unique_name)


asyncio.run(main())
Expected Results

The same identifier in both runs.

Actual Results
PYTHONHASHSEED=1  LLMGenericTextConverter::34b80fa1
PYTHONHASHSEED=2  LLMGenericTextConverter::9136bd54
Versions
  • OS: Windows 11
  • Python version: 3.12.0
  • PyRIT version: source checkout of main at 5fb4fb977
System:
    python: 3.12.0 (tags/v3.12.0:0fb18b0, Oct  2 2023, 13:03:39) [MSC v.1935 64 bit (AMD64)]
executable: C:\dev\pyr-main\Scripts\python.exe
   machine: Windows-11-10.0.26300-SP0

Python dependencies:
        pyrit: 1.2.0.dev0
       Cython: None
        numpy: 2.4.6
       openai: 2.54.0
    packaging: 26.3
          pip: 23.2.1
        scipy: 1.17.1
   setuptools: 84.2.1
      sqlite3: None
        torch: None
 transformers: 5.20.2

The rendered prompt moves too when a template prints the set: {{ tone }} gives a different order under each seed. Sorting inside _describe_template_value fixes the identifier. Rendering is a separate call: leave it, or reject sets as template parameters.

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.