Коротко
Статья описывает локальный компилятор шрифтов, который отображает токены языковых моделей одинаковой шириной или цветом, помогая изучать токенизацию прямо в тексте Discord и Slack. Это наглядный инструмент, но не точный счётчик токенов для API: результат зависит от браузера, форматирования и ограничений конкретного токенизатора.
Контекст
Автор развивает проект Token-space font compiler: браузерный инструмент, который строит TTF по шрифту и токенизатору. Исходная задача — сделать границы токенов видимыми в обычных сообщениях, не требуя отдельного скрипта токенизации при отображении. Для интеграции описаны Discord через Vesktop/Vencord и веб-версия Slack через пользовательский скрипт.
Главное
- Проект строит один TTF, в котором правила токенизатора встроены в shaping; отдельный токенизирующий скрипт для отображения не нужен.
- Доступны два представления: равная ширина токенов (3 em на токен, дополнительный интервал по умолчанию 0) и цветовая маркировка с естественной шириной символов.
- Заявлены профили DeepSeek, OpenAI, Kimi, Qwen, GLM, Llama 3, Trinity и Laguna; Gemma и Gemini прошли проверки поддержки маркеров пробела и byte fallback. ctok использует отдельный backend минимальной стоимости.
- Для Discord предусмотрены Vesktop и Vencord-тема; для Slack — веб-клиент, установленный шрифт и userscript, нацеленный на display name или Slack member ID.
- Кодовые блоки сохраняют моноширинный шрифт; в Slack-скрипте они не стилизуются. Discord-тему можно ограничить ID автора, а Slack-скрипт применяет стиль только к совпадающим отправителям.
- Аудит включал 17 904 BPE-проверки пробелов на шести файлах шрифтов, 2 355 ctok-проверок, 60 браузерных сравнений ширины и 20 примеров переноса.
- Trinity Large Thinking и Laguna M.1 прошли все 2 984 направленные проверки пробелов каждый; Gemma 4 и Gemini 3.5 Flash прошли по 5 493 Gutenberg-примера в normal и lite режимах.
- У GLM-5.3 и Llama 3 действует предел 64 байта/32 раунда для отдельных фрагментов; при превышении показывается [BPE limit].
- ctok не является подтверждённой реализацией токенизатора Claude. Для версий v3, v4.7 и v4.8 аудит нашёл соответственно 29/25/16 ошибок счёта или ширины и 45/49/8 ошибок только семантики из 785 случаев на версию.
- Для стандартного Noto Emoji пройдены 5 250 проверок поддерживаемых emoji, но результат всё равно ограничен покрытием символов и границами текстовых/emoji runs.
Как сделано
Пользователь вводит текст, выбирает пресет токенизатора или загружает совместимый pipeline и исходный шрифт, после чего компилятор создаёт TTF с токенизатором, встроенным в shaping-правила. В режиме равной ширины каждый выведенный токен занимает 3 em в пределах поддерживаемого shaping run; дополнительный межтокенный интервал по умолчанию равен нулю и ограничен 0,5 em. Режим цветовой маркировки сохраняет естественную ширину символов, но раскрашивает токены; он поддерживает BPE-текст, но не ctok и не соединённые emoji.
Для Discord нужно установить TTF, скачать созданную тему CSS и подключить её в Vesktop через Vencord → Themes; можно ограничить применение Discord ID конкретного автора. Для Slack нужно установить TTF, указать отображаемые имена или member ID отправителей, скачать userscript и включить его в менеджере скриптов браузера. Скрипт стилизует совпавшие сообщения, не меняет их текст и не отправляет сетевые запросы. Сборка выполняется локально с Pyodide и fontTools.
Результаты
Проведены целевые аудиты: 17 904 BPE-проверки пробелов на шести доступных бинарных файлах шрифтов и 2 355 случаев ctok; браузерные проверки включали 60 сравнений ширины и 20 примеров переноса строк. В аудите пробелов Trinity Large Thinking и Laguna M.1 прошли все 2 984 проверки каждый. Для Gemma 4 и Gemini 3.5 Flash обычный текст прошёл 5 493 Gutenberg-примера в каждом из двух режимов; две закреплённые Google-реализации совпали на 6 007 входах. Noto Emoji прошёл 5 250 проверок поддерживаемых emoji. Это результаты ограниченных тестов, а не гарантия совпадения во всех приложениях и для любого текста.
Ограничения
Шрифт не является точным счётчиком токенов или биллинга API: он не универсально учитывает специальные токены, шаблоны чатов, мультимодальные данные и служебные накладные расходы. Границы shaping runs, форматирование, ссылки, переносы, пробелы, нормализация Unicode, bidi, сложные письменности, лигатуры и подстановка отсутствующих глифов могут изменить результат или нарушить одинаковую ширину. Произвольные загруженные токенизаторы не получают тех же аудитов, что и пресеты.
Есть известные ошибки и пределы: DeepSeek неверно классифицирует U+001C–U+001F как пробельные символы; GLM-5.3 и Llama 3 ограничивают отдельные фрагменты 64 байтами/32 раундами и могут показать [BPE limit]. ctok — неофициальное приближение Claude, не проверенное вызовами Claude; поиск ограничен 256 шагами на компонент, а некоторые версии имеют ошибки нормализации и обрамления. В браузерных сравнениях ширины 43 из 60 совпали, 15 разошлись из-за табуляции/переносов, два выявили отдельную границу перед начальным пробелом. Длинный свёрнутый текст может отображаться медленно; стоимость использования или производительность в масштабе статья не приводит.
Что взять себе
- Используйте такой шрифт, чтобы визуально исследовать разбиение обычного текста и замечать неожиданные границы токенов, а не чтобы рассчитывать стоимость API.
- Для надёжности выбирайте явно поддерживаемый пресет и проверяйте нужный текст в целевом браузере или приложении: форматирование и переносы могут изменить отображение.
- Если важны результаты по нестандартному Unicode, эмодзи, специальным токенам или шаблонам сообщений, сверяйтесь с настоящим токенизатором модели.
- В Discord и Slack можно применять визуализацию только к сообщениям выбранного автора, избегая изменения оформления остальных сообщений.
Читать оригинал, если…
Откройте оригинал, если нужны пошаговые инструкции для Vesktop и Slack, подробные отчёты аудитов, перечень поддерживаемых профилей и воспроизводимые примеры расхождений.