Merge pull request #3132 from AlpinDale/sampler_order aphrodite: sampler order block

66f02f59c06b528143fe49c738905b85fec42a93

Cohee <18619528+Cohee1207@users.noreply.github.com>

Signed
3 files changed, +103 -0Showing whitespace changes
public/index.html+29 -0
@@ -1774,6 +1774,35 @@
1774 <span data-i18n="Load default order">Load default order</span>1774 <span data-i18n="Load default order">Load default order</span>
1775 </div>1775 </div>
1776 </div>1776 </div>
1777 <div id="sampler_priority_block_aphrodite" data-tg-type="aphrodite" class="range-block flexFlowColumn wide100p">
1778 <hr class="wide100p">
1779 <h4 class="range-block-title justifyCenter">
1780 <span data-i18n="Sampler Order">Sampler Order</span>
1781 <div class="margin5 fa-solid fa-circle-info opacity50p" title="Aphrodite only. Determines the order of samplers. Skew is always applied post-softmax, so it's not included here." data-i18n="[title]Aphrodite only. Determines the order of samplers. Skew is always applied post-softmax, so it's not included here."></div>
1782 </h4>
1783 <div class="toggle-description widthUnset" data-i18n="Aphrodite only. Determines the order of samplers.">
1784 Aphrodite only. Determines the order of samplers.
1785 </div>
1786 <div id="sampler_priority_container_aphrodite" class="prompt_order">
1787 <div data-name="dry" draggable="true"><span>DRY</span><small></small></div>
1788 <div data-name="penalties" draggable="true"><span>Penalties</span><small></small></div>
1789 <div data-name="no_repeat_ngram" draggable="true"><span>No Repeat Ngram</span><small></small></div>
1790 <div data-name="temperature" draggable="true"><span>Dynatemp & Temperature</span><small></small></div>
1791 <div data-name="top_nsigma" draggable="true"><span>Top Nsigma</span><small></small></div>
1792 <div data-name="top_p_top_k" draggable="true"><span>Top P & Top K</span><small></small></div>
1793 <div data-name="top_a" draggable="true"><span>Top A</span><small></small></div>
1794 <div data-name="min_p" draggable="true"><span>Min P</span><small></small></div>
1795 <div data-name="tfs" draggable="true"><span>Tail-Free Sampling</span><small></small></div>
1796 <div data-name="eta_cutoff" draggable="true"><span>Eta Cutoff</span><small></small></div>
1797 <div data-name="epsilon_cutoff" draggable="true"><span>Epsilon Cutoff</span><small></small></div>
1798 <div data-name="typical_p" draggable="true"><span>Typical P</span><small></small></div>
1799 <div data-name="quadratic" draggable="true"><span>Cubic and Quadratic Sampling</span><small></small></div>
1800 <div data-name="xtc" draggable="true"><span>XTC</span><small></small></div>
1801 </div>
1802 <div id="aphrodite_default_order" class="menu_button menu_button_icon">
1803 <span data-i18n="Load default order">Load default order</span>
1804 </div>
1805 </div>
1777 </div>1806 </div>
1778 </div><!-- end of textgen settings-->1807 </div><!-- end of textgen settings-->
1779 <div id="openai_settings">1808 <div id="openai_settings">
public/scripts/samplerSelect.js+13 -0
@@ -129,6 +129,10 @@ function setSamplerListListeners() {
129 relatedDOMElement = $('#sampler_priority_block_ooba');129 relatedDOMElement = $('#sampler_priority_block_ooba');
130 }130 }
131131
132 if (samplerName === 'samplers_priorities') { //this is for aphrodite's sampler priority
133 relatedDOMElement = $('#sampler_priority_block_aphrodite');
134 }
135
132 if (samplerName === 'penalty_alpha') { //contrastive search only has one sampler, does it need its own block?136 if (samplerName === 'penalty_alpha') { //contrastive search only has one sampler, does it need its own block?
133 relatedDOMElement = $('#contrastiveSearchBlock');137 relatedDOMElement = $('#contrastiveSearchBlock');
134 }138 }
@@ -237,6 +241,11 @@ async function listSamplers(main_api, arrayOnly = false) {
237 displayname = 'Ooba Sampler Priority Block';241 displayname = 'Ooba Sampler Priority Block';
238 }242 }
239243
244 if (sampler === 'samplers_priorities') { //this is for aphrodite's sampler priority
245 targetDOMelement = $('#sampler_priority_block_aphrodite');
246 displayname = 'Aphrodite Sampler Priority Block';
247 }
248
240 if (sampler === 'penalty_alpha') { //contrastive search only has one sampler, does it need its own block?249 if (sampler === 'penalty_alpha') { //contrastive search only has one sampler, does it need its own block?
241 targetDOMelement = $('#contrastiveSearchBlock');250 targetDOMelement = $('#contrastiveSearchBlock');
242 displayname = 'Contrast Search Block';251 displayname = 'Contrast Search Block';
@@ -373,6 +382,10 @@ export async function validateDisabledSamplers(redraw = false) {
373 relatedDOMElement = $('#sampler_priority_block_ooba');382 relatedDOMElement = $('#sampler_priority_block_ooba');
374 }383 }
375384
385 if (sampler === 'samplers_priorities') { //this is for aphrodite's sampler priority
386 relatedDOMElement = $('#sampler_priority_block_aphrodite');
387 }
388
376 if (sampler === 'dry_multiplier') {389 if (sampler === 'dry_multiplier') {
377 relatedDOMElement = $('#dryBlock');390 relatedDOMElement = $('#dryBlock');
378 targetDisplayType = 'block';391 targetDisplayType = 'block';
public/scripts/textgen-settings.js+61 -0
@@ -82,6 +82,22 @@ const OOBA_DEFAULT_ORDER = [
82 'encoder_repetition_penalty',82 'encoder_repetition_penalty',
83 'no_repeat_ngram',83 'no_repeat_ngram',
84];84];
85const APHRODITE_DEFAULT_ORDER = [
86 'dry',
87 'penalties',
88 'no_repeat_ngram',
89 'temperature',
90 'top_nsigma',
91 'top_p_top_k',
92 'top_a',
93 'min_p',
94 'tfs',
95 'eta_cutoff',
96 'epsilon_cutoff',
97 'typical_p',
98 'quadratic',
99 'xtc',
100];
85const BIAS_KEY = '#textgenerationwebui_api-settings';101const BIAS_KEY = '#textgenerationwebui_api-settings';
86102
87// Maybe let it be configurable in the future?103// Maybe let it be configurable in the future?
@@ -163,6 +179,7 @@ const settings = {
163 banned_tokens: '',179 banned_tokens: '',
164 sampler_priority: OOBA_DEFAULT_ORDER,180 sampler_priority: OOBA_DEFAULT_ORDER,
165 samplers: LLAMACPP_DEFAULT_ORDER,181 samplers: LLAMACPP_DEFAULT_ORDER,
182 samplers_priorities: APHRODITE_DEFAULT_ORDER,
166 ignore_eos_token: false,183 ignore_eos_token: false,
167 spaces_between_special_tokens: true,184 spaces_between_special_tokens: true,
168 speculative_ngram: false,185 speculative_ngram: false,
@@ -256,6 +273,7 @@ export const setting_names = [
256 'sampler_order',273 'sampler_order',
257 'sampler_priority',274 'sampler_priority',
258 'samplers',275 'samplers',
276 'samplers_priorities',
259 'n',277 'n',
260 'logit_bias',278 'logit_bias',
261 'custom_model',279 'custom_model',
@@ -553,6 +571,20 @@ function sortOobaItemsByOrder(orderArray) {
553 });571 });
554}572}
555573
574/**
575 * Sorts the Aphrodite sampler items by the given order.
576 * @param {string[]} orderArray Sampler order array.
577 */
578function sortAphroditeItemsByOrder(orderArray) {
579 console.debug('Preset samplers order: ', orderArray);
580 const $container = $('#sampler_priority_container_aphrodite');
581
582 orderArray.forEach((name) => {
583 const $item = $container.find(`[data-name="${name}"]`).detach();
584 $container.append($item);
585 });
586}
587
556jQuery(function () {588jQuery(function () {
557 $('#koboldcpp_order').sortable({589 $('#koboldcpp_order').sortable({
558 delay: getSortableDelay(),590 delay: getSortableDelay(),
@@ -606,6 +638,19 @@ jQuery(function () {
606 },638 },
607 });639 });
608640
641 $('#sampler_priority_container_aphrodite').sortable({
642 delay: getSortableDelay(),
643 stop: function () {
644 const order = [];
645 $('#sampler_priority_container_aphrodite').children().each(function () {
646 order.push($(this).data('name'));
647 });
648 settings.samplers_priorities = order;
649 console.log('Samplers reordered:', settings.samplers_priorities);
650 saveSettingsDebounced();
651 },
652 });
653
609 $('#tabby_json_schema').on('input', function () {654 $('#tabby_json_schema').on('input', function () {
610 const json_schema_string = String($(this).val());655 const json_schema_string = String($(this).val());
611656
@@ -624,6 +669,13 @@ jQuery(function () {
624 saveSettingsDebounced();669 saveSettingsDebounced();
625 });670 });
626671
672 $('#aphrodite_default_order').on('click', function () {
673 sortAphroditeItemsByOrder(APHRODITE_DEFAULT_ORDER);
674 settings.samplers_priorities = APHRODITE_DEFAULT_ORDER;
675 console.log('Default samplers order loaded:', settings.samplers_priorities);
676 saveSettingsDebounced();
677 });
678
627 $('#textgen_type').on('change', function () {679 $('#textgen_type').on('change', function () {
628 const type = String($(this).val());680 const type = String($(this).val());
629 settings.type = type;681 settings.type = type;
@@ -832,6 +884,14 @@ function setSettingByName(setting, value, trigger) {
832 return;884 return;
833 }885 }
834886
887 if ('samplers_priorities' === setting) {
888 value = Array.isArray(value) ? value : APHRODITE_DEFAULT_ORDER;
889 insertMissingArrayItems(APHRODITE_DEFAULT_ORDER, value);
890 sortAphroditeItemsByOrder(value);
891 settings.samplers_priorities = value;
892 return;
893 }
894
835 if ('samplers' === setting) {895 if ('samplers' === setting) {
836 value = Array.isArray(value) ? value : LLAMACPP_DEFAULT_ORDER;896 value = Array.isArray(value) ? value : LLAMACPP_DEFAULT_ORDER;
837 insertMissingArrayItems(LLAMACPP_DEFAULT_ORDER, value);897 insertMissingArrayItems(LLAMACPP_DEFAULT_ORDER, value);
@@ -1256,6 +1316,7 @@ export function getTextGenGenerationData(finalPrompt, maxTokens, isImpersonate,
1256 'nsigma': settings.nsigma,1316 'nsigma': settings.nsigma,
1257 'custom_token_bans': toIntArray(banned_tokens),1317 'custom_token_bans': toIntArray(banned_tokens),
1258 'no_repeat_ngram_size': settings.no_repeat_ngram_size,1318 'no_repeat_ngram_size': settings.no_repeat_ngram_size,
1319 'sampler_priority': settings.type === APHRODITE ? settings.samplers_priorities : undefined,
1259 };1320 };
12601321
1261 if (settings.type === OPENROUTER) {1322 if (settings.type === OPENROUTER) {