count_tokens.py crashes on text containing special tokens like <|endoftext|> (tiktoken disallowed_special default)

Abierto Apto para principiantes
#153 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
76/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
python
Área
tooling

Línea de trabajo

Lee skills/bmad-*-builder/scripts/count_tokens.py para ver cómo count_tokens() carga la codificación de tiktoken y llama a enc.encode(text). Revisa los llamadores en prepass-prompt-metrics.py y en el prepass.py de agent-builder para entender cómo afectan los errores a cada pre-pass. El trabajo estará completo cuando las cadenas de tokens especiales se cuenten sin generar una excepción, la configuración de la codificación se reutilice entre archivos y el comando y los pre-passes terminen con la entrada descrita.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Describe the bug

count_tokens() in skills/bmad-*-builder/scripts/count_tokens.py guards only import tiktoken and tiktoken.get_encoding(...), then calls enc.encode(text) with tiktoken's default disallowed_special="all". tiktoken raises ValueError ("Encountered text corresponding to disallowed special token '<|endoftext|>'...") when the text contains a special-token string.

Any skill or reference that mentions such a token, for example a skill about tokenizers, prompt formats or LLM evaluation, makes:

  • count_tokens.py <file> exit with a traceback;
  • prepass-prompt-metrics.py crash, since it imports count_tokens and calls it on every file, which aborts the Analyze pre-pass.

(The agent-builder prepass.py swallows the exception and silently falls back to chars // 4 for that file.)

This report is from reading the code: the tiktoken encoding download is blocked in my test sandbox, so I couldn't run the tiktoken path. The behaviour is tiktoken's documented default.

Steps to reproduce

printf -- '---\nname: sk\ndescription: Explains tokenizers. Use when asked.\n---\n# sk\n\nModels end documents with the <|endoftext|> marker.\n' > sk/SKILL.md
uv run skills/bmad-workflow-builder/scripts/count_tokens.py sk/SKILL.md
# expected with tiktoken available: ValueError: Encountered text corresponding to disallowed special token '<|endoftext|>'

Expected behavior

Count special-token text as ordinary text: enc.encode(text, disallowed_special=()). Also cache the encoding at module level. Today get_encoding runs per file, and when the encoding can't be downloaded the pre-passes retry the network for every file before falling back, about 0.2 s/file here.

Environment

  • Model(s) used: n/a (deterministic script)
  • Agentic IDE used: n/a (scripts run directly)
  • BMad version: bmad-builder main @ d4a921c (v2.2.2 + #118)
  • Project language: Python 3.13, Linux
Lenguaje dominante
Python
Estrellas
220
Forks
54
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de bmad-code-org/bmad-builder

Todos los issues de bmad-code-org/bmad-builder

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.