Jevchat — чат-модель на основе Jev decision model
📂 Исходный код на GitHubПревращает Jev decision model от TypeSafe в чат-модель с посимвольной генерацией и различными стратегиями сэмплирования
Jevchat
jevchat — это Python-утилита, которая превращает decision model Jev от TypeSafe в полноценный чат-модель. Вместо обычного автодополнения текста она генерирует ответ посимвольно: на каждом шаге задаёт Jev вопрос: «Какой символ дальше?» — получает вероятности для каждого варианта из алфавита, сэмплирует следующий символ и повторяет, пока не будет получен STOP.
Идея проекта — эксперимент ради удовольствия. Стоимость генерации неоправданно высокая, но результаты забавные.
Установка и запуск
poetry install
API-ключ Jev нужно положить в файл .env рядом с pyproject.toml:
api_key="..."
Также принимаются переменные окружения JEV_API_KEY и TYPESAFE_API_KEY. Значения в .env приоритетнее.
Базовые команды:
poetry run jevchat # интерактивный чат
poetry run jevchat ask "do people need water?" # одиночный вопрос
poetry run jevchat alphabets # список доступных алфавитов
poetry run jevchat bench # сравнение всех режимов
Ответ отображается в реальном времени с панелью статистики: символы/сек, символы/сек, миллисекунды на запрос, время генерации. Можно наблюдать, как сэмплер рисует следующий символ из распределения вероятностей.
Ctrl-C останавливает генерацию (первый раз — дожидается завершения текущего запроса и сохраняет частичный ответ, второй — прерывает немедленно).
Стратегии сэмплирования
Ключевая идея — комбинировать способ получения распределения (-s/--strategy) с набором вариантов (-a/--alphabet).
choice (по умолчанию)
Задаёт один вопрос по всему алфавиту. Jev возвращает вероятность для каждого символа.
poetry run jevchat -s choice ask "how many eyes do people have?"
С флагом --ensemble N отправляет N перестановок одного вопроса параллельно и усредняет результаты — компенсируя позиционное смещение модели.
bisect
Сортирует алфавит и задаёт бинарные вопросы (раньше/позже), пока группа не сузится, затем делает финальный выбор внутри неё.
poetry run jevchat -s bisect ask "how many eyes do people have?"
poetry run jevchat -s bisect --bisect-cutoff 32 --no-bisect-swap ask "..."
buckets
Разбивает алфавит на группы, каждая с экранированием OTHER. Единственная стратегия, работающая с алфавитами >255 символов.
poetry run jevchat -a words1k -s buckets ask "what colour is snow?"
refine
Комбинация: buckets, затем уточняющий вопрос по победителям, затем rescoring nucleus. Удваивает вероятность правильного символа и увеличивает разрешение словаря примерно в 19 раз.
poetry run jevchat -a words1k -s refine ask "where do fish live?"
Алфавиты
| Алфавит | Описание | Размер |
|---|---|---|
lower26 |
a-z + пробел | 27 |
ascii |
полный ASCII | 95 |
tokens |
целые токены | ~300 |
words1k |
1000 слов | 1001 |
bpe2k |
BPE-токены (2K) | 2048 |
bpe5k |
BPE-токены (5K) | 5120 |
poetry run jevchat -a lower26 -t 0 ask "what is 2+2?"
poetry run jevchat -a ascii -t 0 ask "what is 2+2?"
poetry run jevchat -a tokens -t 0 ask "do people need water?"
Алфавиты words1k, bpe2k, bpe5k превышают 255 вариантов и требуют стратегию buckets.
Presentation modes
Два варианта того, что именно Jev оценивает:
- symbol — опции символы (по умолчанию):
'a','i',' the'. Модель должна сама «додумать» контекст при сопоставлении. - hypothesis — опции уже готовые тексты. Jev оценивает полностью сформированные строки, что значительно повышает точность: top-1 утраивается, вероятность правильного символа удваивается.
poetry run jevchat -p hypothesis --window 40 ask "what colour is snow?"
poetry run jevchat -p symbol ask "what colour is snow?"
Beam search
Вместо жёткого посимвольного выбора можно держать несколько кандидатов одновременно:
poetry run jevchat -b 3 ask "what is the opposite of hot?"
При ширине >1 отключаются temperature, top_p, top_k — лучи ранжируются по вероятности.
Комбинации
Стратегии, алфавиты и параметры свободно комбинируются:
poetry run jevchat -a tokens -s bisect --bisect-cutoff 20 ask "do people need water?"
poetry run jevchat -a ascii -s choice --ensemble 12 -t 0.2 --repetition-penalty 1.0 \
ask "what colour is grass?"
Тесты
158 тестов, все оффлайн — эмуляция API-клиента и httpx.MockTransport. API-ключ не нужен.
poetry run pytest
jevchat bench — единственная команда, реально обращаемая к API.