NoassTavern

Ссылка на актуальную версию

https://tavernikof.github.io/NoAssTavern/
Github: https://github.com/Tavernikof/NoAssTavern

Что это?

Это новый фронтенд, вдохновленный глупой таверной, но заточенный чисто под безжоп. Основная мотивация - исправить то что плохо сделано в таверне и добавить новый функционал. Для работы не нужен бекенд, поэтому запускается чисто через браузер (есть некоторые ограничения, об этом ниже).
На данный момент это очень сырая версия и подходит для тех, кто умеет в редактирование пресетов или хотя бы на базовом уровне понимает, как работает лоботомит. Хотя покумить уже можно и сейчас, базовые настройки в наличии

Основные отличия:

  • НОДЫ. Да-да, ты не ослышался, влажная мечта уже здесь
  • Жирные чаты. Ближайший аналог FatPresets, но без ограничений таверны. Внутри чата хранится история сообщений, информация о всех персонажах и настройки пресета. (настройки прокси остаются глобальными и не хранятся вместе с чатом).
  • Редактор промптов. Позволяет более очевидно контролировать, что уйдет в запросе

Что умеет на данный момент:

  • Базовые вещи: карточки персонажей, персоны, чаты, пресеты, прокси
  • Бекенды: Клод, Гемини, OpenAI (в теории должно поддерживаться все совместимые)
  • Внешние блоки

Что НЕ умеет на данный момент:

  • Мобильная версия
  • Саммари (силлипидор не украдет твой саммари, если его нет)
  • Лорбуки уже умеет
  • Регексовская магия
  • Плагины и темы

Как начать

Окей, для начала потребуется некоторые базовые настройки:

  1. Добавить настройки подключения.

Не бойся, твой токен никто не украдет, все хранится в браузере

  1. Добавить карточки персонажей и персоны
    Персоны больше не нужны. Вместо этого создавай свою карточку прямо тут.

Для карточек, которые будут использоваться как персоны, в описании все равно надо указывать {{char}}

  1. Создать чат

  1. Готово, вы восхитительны!

В любой момент можно добавить/удалить участников, изменить настройки промптов.
!Внимание! если стереть сохраненную в чате карточку (которая отмечена пометкой current), то она удалится без возможности восстановления

(1) В блоке настройки персон отображаются все добавленные в данный момент карточки. Галочки отвечают за активность карточек. Иконкой отмечена карточка текущего юзера.

Confusing moment

Для карточки юзера действуют особые правила в отношении переменных. При ее обработке автоматически заменяются {{char}} > {{user}} и {{description}} > {{persona}}.
Если в карточке персонажа написано что-то вроде {{char}} hates {{user}}, то{{char}} всегда будет указывать на имя карточки, а {{user}} на другую карточку.

(2) Impersonate - маленький хелпер, который позволяет быстро сменить префксс юзера и стоп-стринги. Удобно если хочется быстро написать какое-то сообщение за другого персонажа, не пердолясь с настройками карточки
(3) Рычаги - прямо как в таверне. (Одна из немногих вещей, которая была сразу хорошо сделана)

Настройки генерации

В основе генерации лежит нодовый интерфейс. По умолчанию существуют 3 процесса, каждый из них запускается, при определенных действиях:

  1. Main. Нажатие кнопки "отправить" на последнем сообщение юзера
  2. Generate. Создание нового свайпа
  3. Translate. После редактирования сообщения
  4. Дополнительно можно создать любое количество процессов, все они будут работать как внешние блоки

Ноды


На данный момент существует всего 4 вида нод. Вот они слева направо:

  1. Create message. Создает пустое сообщение с указанной ролью
  2. Generate. Запускает генерацию с выбранным промптом на последней выбранной ноде. По умолчанию генерация происходит для выбранного сообщения, но если в процессе создаются новые сообщения через Create message, то все последующие манипуляции будут происзодиться с последним созданным сообщением.
  3. Translate. Переводит сообщение на нужный язык через я.переводчик. Чекбокс "Overwrite original message" нужен для обработки флоу: пишешь сообщение на русском - нажимаешь отправить - русское сообщение переводится на английский и подставляется вместо русского. Короче поведение аналогично таверне.
  4. Run scheme. Запускает другой процесс из текущего. Берегись лупов, защиты от дурака нет

Промпты

За основу взят пресет соляночника и адаптирован под нужный формат https://rentry.co/noass4anon2

Низкий поклон и поцелуй в пузико

Можно попробовать импортировать пресет из таверны, но функционал работает криво и подходит только как отправная точка, чтобы не копировать тексты руками

Промпты представляют из себя совокупность 3 сущностей из таверны: пресет + апи + прокси.
Редактор промптов максимально приближен к тому, как формируется запрос в апи:

  • Редактор разбит на сообщения. Каждое сообщение будет преобразовано в сообщение в апи, если оно не пустое.
  • Внутри редактора можно выделять текст в отдельные блоки, которые используются как "рычаги" в чате. Если текст не выделен в блок, то он всегда будет добавлен
  • Для динамического контента работают переменные, их поведение аналогично таверне

Лорбуки

Это набор записей, которые добавляются в контекст, если в N последних сообщениях есть указанные ключевые слова. Поддерживаются как внешние лорбуки (можно импортировать из таверны), так и встроенные в карточку.

Описание параметров
  • Position - При срабатывании нескольких записей, они будут включены в том же порядке, в котором перечислены в лорбуке
  • Name - просто название, ни на что не влияет
  • Strategy
    • 🔵 Constant - запись будет включена всегда, keywods игнорируются
    • 🟢 Normal - стандартное поведение, запись будет включена, если в истории найдены ключевые слова
    • 🔗 Vectorized - запись будет включена, только если ключевые слова найдены в других записях лорбука
  • Position group - Группа, к которой относится запись.
    • По умолчанию все записи имею дефлотную группу. Группе можно задать любое название
    • При импорте из таверны, записи, которые имели позицию с глубиной будут отнесены в группе "in_chat"
    • Чтобы группа попала в контекст, ее надо добавить в промпт через переменную
    • {{lorebook}} - выведет все записи из стандартной группы
    • {{lorebook:in_chat}} - выведет все записи из группы in_chat, например так:
      1
      2
      3
      4
      {{history:8}}
      {{external:current_info}}
      {{lorebook:in_chat}}
      {{history:1:7}}
      
  • Scan depth - Сколько последних сообщений надо просканировать в поиске ключевых слов.
    • Если не задано берется глобальное значение
  • Keywords - список ключевых слов для поиска. Поиск:
    • Регистронезависимый
    • Ищет по целым словам. Например, если добавить слово "king", то сматчится слово "King", но не сматчится "kingdom"
    • Рекурсивный. То есть ищется не только по истории, но также по самим записям. Работает только в пределах своего лорбука. Если в чате используется несколько лорбуков, вхождения из других матчиться не будут
    • Поддерживаются регулярные выражения (включая флаги), для этого надо обернуть запись в слеши. Например: /king.*?/i
  • Content - Контент, который будет добавлен в контекст при совпадении
Работа в чате
  • По аналогии с карточками и пресетами, лорбуки можно в любой момент подключать/отключать.
  • При добавлении лорбука внутри чата создается его локальная копия.
  • При наличии нескольких лорбуков, они будут применяться в том же порядке, в каком указаны в меню.
  • Если у карточек есть собственные лорбуки, они всегда будут использоваться

Переменные

Переменная Описание
{{user}} Имя юзера
{{persona}} Описание юзера
{{char}} Имя персонажа
{{description}} Описание персонажа
{{scenario}} Сценарий
{{personality}} Персона (хз кому оно вообще надо)
{{history}} История сообщений<br/>asd
{{external}} Внешний блок
{{lastUserMessage}} Последнее сообщение юзера
{{random}} Случайное значение из списка
{{lorebook}} {{lorebook:in_chat}} Вхождения лорбуков

Confusing moment #2

Если в чате несколько карточек персонажей, то {{char}} и {{description}} можно использовать с аргументами, чтобы обратиться к конкретной карточке, например {{char:1}}, индексы начинаются от 1 и карточка юзера учитывается в нумерации.

Использование history отличается от таверны. Задавая аргументы, можно брать диапазон сообщений, таким образом можно делать аналог in-chat блоков с глубиной. Пара примеров:
{{history}} - все сообщения
{{history:1:10}} {{history::10}} - последние 10 сообщений
{{history:11}} - все сообщения начиная с 11
{{history:7:10}} - последние 4 сообщения начиная с 7

Полный пример. Делаем аналог current_info на глубине 7:

1
2
3
{{history:8}} // Все остальные сообщения
{{external:current_info}} // Внешний блок
{{history:1:7}} // Последние 7 сообщений

Локальный запуск

Простой путь

Скачать готовый релиз

  1. Заходишь на https://github.com/Tavernikof/NoAssTavern/releases
  2. Скачиваешь последний NoAssTavern.html
  3. PROFIT

Альтернативный способ:

  1. Заходишь на https://tavernikof.github.io/NoAssTavern/
  2. Сохраняешь страницу на компьютер
Непростой путь

Собрать все из иcходников
Убедиться что установлена nodejs 20+ и yarn

1
2
3
4
git clone git@github.com:Tavernikof/NoAssTavern.git
cd ./NoAssTavern
yarn
yarn build

Собранное приложение появится в dist/index.html

Ограничения

  • Нет бекенда и хранение всей инфы происходит в браузере. Из-за этого что-то может пропадать, если на девайсе мало свободного места. В планах добавить импорт/экспорт и синхронизацию с облачными хранилищами (все лежит в IndexedDB со всеми вытекающими последствиями)
  • Запросы к прокси идут напрямую из браузера и из-за этого могут не работать некоторые прокси и не работает google translate, вместо него для переводов используется яндекс (чертовы CORS, можно решить через прокси типо CORS Anywhere, но гонять прокси через прокси другой прокси - отдельный вид извращений)

Контакты

Не стесняйся заводить ишью и слать ПР если ты КОДЕР
Github: https://github.com/Tavernikof/NoAssTavern
Почта: sick_kind@proton.me

Edit

Pub: 13 Jul 2025 22:11 UTC

Edit: 07 Aug 2025 20:54 UTC

Views: 358