BUG: CharacterSpaceConverter introduces whitespace holes and trailing whitespace

Ouverte Adaptée aux débutants
#4,043 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 2 jours

@Kaap10 y travaille déjà.

Depuis le 7/11/2026.

  • #4044 par @Kaap10 — ouverte

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
82/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
python
Domaine
backend

Piste de recherche

Trouvez CharacterSpaceConverter et ses tests dans le code source de PyRIT. Lisez l’implémentation du convertisseur et exécutez d’abord les tests existants du convertisseur ; ajoutez des tests couvrant la ponctuation entre les mots, les contractions et la ponctuation finale. Le travail est terminé lorsque la ponctuation est supprimée avant l’ajout des espaces, que les sorties correspondent aux exemples et que le motif de ponctuation est compilé une seule fois au niveau du module.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Describe the bug

CharacterSpaceConverter spaces out characters with " ".join(prompt) before removing punctuation with re.sub(...). This order of operations introduces whitespace artifacts:

  1. Stripping punctuation leaves empty character "holes", producing 4 spaces between words (e.g., "Hello, world" -> "H e l l o w o r l d" instead of the standard 3-space inter-word spacing "H e l l o w o r l d").
  2. Contractions or mid-word punctuation leave double spaces (e.g., "How's" -> "H o w s" instead of "H o w s").
  3. Trailing punctuation leaves unwanted trailing whitespace (e.g., "hello!" -> "h e l l o ").

Additionally, the punctuation regex is recompiled on every invocation of convert_async rather than precompiled at module level.

Steps/Code to Reproduce
import asyncio
from pyrit.converter import CharacterSpaceConverter

async def main():
    converter = CharacterSpaceConverter()
    res1 = await converter.convert_async(prompt="hello!")
    print(repr(res1.output_text))  # prints 'h e l l o ' with trailing space

    res2 = await converter.convert_async(prompt="Hello, world! How's everything?")
    print(repr(res2.output_text))  # prints 'H e l l o    w o r l d    H o w  s   e v e r y t h i n g '

asyncio.run(main())
Expected Results

Punctuation should be stripped prior to character spacing so spacing remains uniform without artificial gaps or trailing whitespace:

  • "hello!" -> 'h e l l o'
  • "Hello, world! How's everything?" -> 'H e l l o w o r l d H o w s e v e r y t h i n g'
Actual Results
  • 'h e l l o '
  • 'H e l l o w o r l d H o w s e v e r y t h i n g '
Versions
  • OS: Windows 11
  • Python version: 3.12
  • PyRIT version: main
Langage dominant
Python
Étoiles
4.7k
Forks
1k
Merge moyen
2 j 4 h
PR mergées (30 j)
510

Préparer son environnement

Ouvrir dans Codespaces

Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.

  • Aucun Dockerfile ni fichier Docker Compose
  • Propose un modèle de pull request
  • Aucun guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de microsoft/PyRIT

Toutes les issues de microsoft/PyRIT

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.