Get available tokenizers from UI

62818055af881170e0ebce3c90c4af8c12ff79ad

Eugén Cowie <eugencowie@users.noreply.github.com>

2 files changed, +22 -16Showing whitespace changes
public/script.js+10 -10
@@ -212,7 +212,7 @@ import {
212 selectContextPreset,212 selectContextPreset,
213} from './scripts/instruct-mode.js';213} from './scripts/instruct-mode.js';
214import { initLocales, t, translate } from './scripts/i18n.js';214import { initLocales, t, translate } from './scripts/i18n.js';
215import { getFriendlyTokenizerName, getTokenCount, getTokenCountAsync, getTokenizerModel, initTokenizers, saveTokenCache, selectTokenizer, TOKENIZER_NAME_MAP, tokenizers } from './scripts/tokenizers.js';215import { getAvailableTokenizers, getFriendlyTokenizerName, getTokenCount, getTokenCountAsync, getTokenizerModel, initTokenizers, saveTokenCache, selectTokenizer } from './scripts/tokenizers.js';
216import {216import {
217 user_avatar,217 user_avatar,
218 getUserAvatars,218 getUserAvatars,
@@ -8453,11 +8453,11 @@ async function selectInstructCallback(_, name) {
84538453
8454async function selectTokenizerCallback(_, name) {8454async function selectTokenizerCallback(_, name) {
8455 if (!name) {8455 if (!name) {
8456 return TOKENIZER_NAME_MAP[power_user.tokenizer];8456 return getFriendlyTokenizerName(main_api).tokenizerName;
8457 }8457 }
84588458
8459 const tokenizerNames = Object.values(TOKENIZER_NAME_MAP);8459 const tokenizers = getAvailableTokenizers();
8460 const fuse = new Fuse(tokenizerNames);8460 const fuse = new Fuse(tokenizers, { keys: ['tokenizerName'] });
8461 const result = fuse.search(name);8461 const result = fuse.search(name);
84628462
8463 if (result.length === 0) {8463 if (result.length === 0) {
@@ -8465,9 +8465,9 @@ async function selectTokenizerCallback(_, name) {
8465 return '';8465 return '';
8466 }8466 }
84678467
8468 const foundName = result[0].item;8468 const foundTokenizer = result[0].item;
8469 selectTokenizer(tokenizers[foundName.toUpperCase()]);8469 selectTokenizer(foundTokenizer.tokenizerName, foundTokenizer.tokenizerId);
8470 return foundName;8470 return foundTokenizer;
8471}8471}
84728472
8473async function enableInstructCallback() {8473async function enableInstructCallback() {
@@ -9122,8 +9122,8 @@ jQuery(async function () {
9122 SlashCommandArgument.fromProps({9122 SlashCommandArgument.fromProps({
9123 description: 'tokenizer name',9123 description: 'tokenizer name',
9124 typeList: [ARGUMENT_TYPE.STRING],9124 typeList: [ARGUMENT_TYPE.STRING],
9125 enumList: Object.values(TOKENIZER_NAME_MAP).map(tokenizer =>9125 enumList: getAvailableTokenizers().map(tokenizer =>
9126 new SlashCommandEnumValue(tokenizer, null, enumTypes.enum, enumIcons.default)),9126 new SlashCommandEnumValue(tokenizer.tokenizerName, null, enumTypes.enum, enumIcons.default)),
9127 }),9127 }),
9128 ],9128 ],
9129 helpString: `9129 helpString: `
@@ -9132,7 +9132,7 @@ jQuery(async function () {
9132 </div>9132 </div>
9133 <div>9133 <div>
9134 <strong>Available tokenizers:</strong>9134 <strong>Available tokenizers:</strong>
9135 <pre><code>${Object.values(TOKENIZER_NAME_MAP).join(', ')}</code></pre>9135 <pre><code>${getAvailableTokenizers().map(t => t.tokenizerName).join(', ')}</code></pre>
9136 </div>9136 </div>
9137 `9137 `
9138 }));9138 }));
public/scripts/tokenizers.js+12 -6
@@ -148,20 +148,26 @@ async function resetTokenCache() {
148}148}
149149
150/**150/**
151 * Maps tokenizer IDs to their names.151 * Gets all tokenizers available to the user.
152 * @example { 0: 'none', 1: 'gpt2', ... }152 * @returns { { tokenizerName: string, tokenizerId: number }[] } Tokenizer info.
153 */153 */
154export const TOKENIZER_NAME_MAP = Object.fromEntries(154export function getAvailableTokenizers() {
155 Object.entries(tokenizers).map(([name, id]) => [id, name.toLowerCase()]));155 const tokenizerOptions = $('#tokenizer').find('option').toArray();
156 return tokenizerOptions.map(tokenizerOption => ({
157 tokenizerName: tokenizerOption.text,
158 tokenizerId: Number(tokenizerOption.value),
159 }))
160}
156161
157/**162/**
158 * Selects tokenizer if not already selected.163 * Selects tokenizer if not already selected.
164 * @param {string} tokenizerName Tokenizer name.
159 * @param {number} tokenizerId Tokenizer ID.165 * @param {number} tokenizerId Tokenizer ID.
160 */166 */
161export function selectTokenizer(tokenizerId) {167export function selectTokenizer(tokenizerName, tokenizerId) {
162 if (tokenizerId !== power_user.tokenizer) {168 if (tokenizerId !== power_user.tokenizer) {
163 $('#tokenizer').val(tokenizerId).trigger('change');169 $('#tokenizer').val(tokenizerId).trigger('change');
164 toastr.info(`Tokenizer: "${TOKENIZER_NAME_MAP[tokenizerId]}" selected`);170 toastr.info(`Tokenizer: "${tokenizerName}" selected`);
165 }171 }
166}172}
167173