Small update to enum display + consistency

b68969ee3b9ae3fdac13b39f5492c811ee28f95d

Wolfsblvt <wolfsblvt@gmail.com>

2 files changed, +30 -14Ignore whitespace
public/script.js+8 -6
@@ -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 getFriendlyTokenizerName(main_api).tokenizerName;8456 return getAvailableTokenizers().find(tokenizer => tokenizer.tokenizerId === power_user.tokenizer)?.tokenizerKey ?? '';
8457 }8457 }
84588458
8459 const tokenizers = getAvailableTokenizers();8459 const tokenizers = getAvailableTokenizers();
8460 const fuse = new Fuse(tokenizers, { keys: ['tokenizerName'] });8460 const fuse = new Fuse(tokenizers, { keys: ['tokenizerKey', '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,11 @@ async function selectTokenizerCallback(_, name) {
8465 return '';8465 return '';
8466 }8466 }
84678467
8468 /** @type {import('./scripts/tokenizers.js').Tokenizer} */
8468 const foundTokenizer = result[0].item;8469 const foundTokenizer = result[0].item;
8469 selectTokenizer(foundTokenizer.tokenizerName, foundTokenizer.tokenizerId);8470 selectTokenizer(foundTokenizer.tokenizerId);
8470 return foundTokenizer.tokenizerName;8471
8472 return foundTokenizer.tokenizerKey;
8471}8473}
84728474
8473async function enableInstructCallback() {8475async function enableInstructCallback() {
@@ -9123,7 +9125,7 @@ jQuery(async function () {
9123 description: 'tokenizer name',9125 description: 'tokenizer name',
9124 typeList: [ARGUMENT_TYPE.STRING],9126 typeList: [ARGUMENT_TYPE.STRING],
9125 enumList: getAvailableTokenizers().map(tokenizer =>9127 enumList: getAvailableTokenizers().map(tokenizer =>
9126 new SlashCommandEnumValue(tokenizer.tokenizerName, null, enumTypes.enum, enumIcons.default)),9128 new SlashCommandEnumValue(tokenizer.tokenizerKey, tokenizer.tokenizerName, enumTypes.enum, enumIcons.default)),
9127 }),9129 }),
9128 ],9130 ],
9129 helpString: `9131 helpString: `
@@ -9132,7 +9134,7 @@ jQuery(async function () {
9132 </div>9134 </div>
9133 <div>9135 <div>
9134 <strong>Available tokenizers:</strong>9136 <strong>Available tokenizers:</strong>
9135 <pre><code>${getAvailableTokenizers().map(t => t.tokenizerName).join(', ')}</code></pre>9137 <pre><code>${getAvailableTokenizers().map(t => t.tokenizerKey).join(', ')}</code></pre>
9136 </div>9138 </div>
9137 `9139 `
9138 }));9140 }));
public/scripts/tokenizers.js+22 -8
@@ -148,33 +148,45 @@ async function resetTokenCache() {
148}148}
149149
150/**150/**
151 * @typedef {object} Tokenizer
152 * @property {number} tokenizerId - The id of the tokenizer option
153 * @property {string} tokenizerKey - Internal name/key of the tokenizer
154 * @property {string} tokenizerName - Human-readable detailed name of the tokenizer (as displayed in the UI)
155 */
156
157/**
151 * Gets all tokenizers available to the user.158 * Gets all tokenizers available to the user.
152 * @returns { { tokenizerName: string, tokenizerId: number }[] } Tokenizer info.159 * @returns {Tokenizer[]} Tokenizer info.
153 */160 */
154export function getAvailableTokenizers() {161export function getAvailableTokenizers() {
155 const tokenizerOptions = $('#tokenizer').find('option').toArray();162 const tokenizerOptions = $('#tokenizer').find('option').toArray();
156 return tokenizerOptions.map(tokenizerOption => ({163 return tokenizerOptions.map(tokenizerOption => ({
157 tokenizerName: tokenizerOption.text,
158 tokenizerId: Number(tokenizerOption.value),164 tokenizerId: Number(tokenizerOption.value),
165 tokenizerKey: Object.entries(tokenizers).find(([_, value]) => value === Number(tokenizerOption.value))[0].toLocaleLowerCase(),
166 tokenizerName: tokenizerOption.text,
159 }))167 }))
160}168}
161169
162/**170/**
163 * Selects tokenizer if not already selected.171 * Selects tokenizer if not already selected.
164 * @param {string} tokenizerName Tokenizer name.
165 * @param {number} tokenizerId Tokenizer ID.172 * @param {number} tokenizerId Tokenizer ID.
166 */173 */
167export function selectTokenizer(tokenizerName, tokenizerId) {174export function selectTokenizer(tokenizerId) {
168 if (tokenizerId !== power_user.tokenizer) {175 if (tokenizerId !== power_user.tokenizer) {
169 $('#tokenizer').val(tokenizerId).trigger('change');176 const tokenizer = getAvailableTokenizers().find(tokenizer => tokenizer.tokenizerId === tokenizerId);
170 toastr.info(`Tokenizer: "${tokenizerName}" selected`);177 if (!tokenizer) {
178 console.warn('Failed to find tokenizer with id', tokenizerId);
179 return;
180 }
181 $('#tokenizer').val(tokenizer.tokenizerId).trigger('change');
182 toastr.info(`Tokenizer: "${tokenizer.tokenizerName}" selected`);
171 }183 }
172}184}
173185
174/**186/**
175 * Gets the friendly name of the current tokenizer.187 * Gets the friendly name of the current tokenizer.
176 * @param {string} forApi API to get the tokenizer for. Defaults to the main API.188 * @param {string} forApi API to get the tokenizer for. Defaults to the main API.
177 * @returns { { tokenizerName: string, tokenizerId: number } } Tokenizer info189 * @returns {Tokenizer} Tokenizer info
178 */190 */
179export function getFriendlyTokenizerName(forApi) {191export function getFriendlyTokenizerName(forApi) {
180 if (!forApi) {192 if (!forApi) {
@@ -209,7 +221,9 @@ export function getFriendlyTokenizerName(forApi) {
209 ? tokenizers.OPENAI221 ? tokenizers.OPENAI
210 : tokenizerId;222 : tokenizerId;
211223
212 return { tokenizerName, tokenizerId };224 const tokenizerKey = Object.entries(tokenizers).find(([_, value]) => value === tokenizerId)[0].toLocaleLowerCase();
225
226 return { tokenizerName, tokenizerKey, tokenizerId };
213}227}
214228
215/**229/**