Merge pull request #3132 from AlpinDale/sampler_order aphrodite: sampler order block
Signed| @@ -1774,6 +1774,35 @@ | ||
| 1774 | 1774 | <span data-i18n="Load default order">Load default order</span> |
| 1775 | 1775 | </div> |
| 1776 | 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 | 1806 | </div> |
| 1778 | 1807 | </div><!-- end of textgen settings--> |
| 1779 | 1808 | <div id="openai_settings"> |
| @@ -129,6 +129,10 @@ function setSamplerListListeners() { | ||
| 129 | 129 | relatedDOMElement = $('#sampler_priority_block_ooba'); |
| 130 | 130 | } |
| 131 | 131 | |
| 132 | + if (samplerName === 'samplers_priorities') { //this is for aphrodite's sampler priority | |
| 133 | + relatedDOMElement = $('#sampler_priority_block_aphrodite'); | |
| 134 | + } | |
| 135 | + | |
| 132 | 136 | if (samplerName === 'penalty_alpha') { //contrastive search only has one sampler, does it need its own block? |
| 133 | 137 | relatedDOMElement = $('#contrastiveSearchBlock'); |
| 134 | 138 | } |
| @@ -237,6 +241,11 @@ async function listSamplers(main_api, arrayOnly = false) { | ||
| 237 | 241 | displayname = 'Ooba Sampler Priority Block'; |
| 238 | 242 | } |
| 239 | 243 | |
| 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 | 249 | if (sampler === 'penalty_alpha') { //contrastive search only has one sampler, does it need its own block? |
| 241 | 250 | targetDOMelement = $('#contrastiveSearchBlock'); |
| 242 | 251 | displayname = 'Contrast Search Block'; |
| @@ -373,6 +382,10 @@ export async function validateDisabledSamplers(redraw = false) { | ||
| 373 | 382 | relatedDOMElement = $('#sampler_priority_block_ooba'); |
| 374 | 383 | } |
| 375 | 384 | |
| 385 | + if (sampler === 'samplers_priorities') { //this is for aphrodite's sampler priority | |
| 386 | + relatedDOMElement = $('#sampler_priority_block_aphrodite'); | |
| 387 | + } | |
| 388 | + | |
| 376 | 389 | if (sampler === 'dry_multiplier') { |
| 377 | 390 | relatedDOMElement = $('#dryBlock'); |
| 378 | 391 | targetDisplayType = 'block'; |
| @@ -82,6 +82,22 @@ const OOBA_DEFAULT_ORDER = [ | ||
| 82 | 82 | 'encoder_repetition_penalty', |
| 83 | 83 | 'no_repeat_ngram', |
| 84 | 84 | ]; |
| 85 | +const 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 | +]; | |
| 85 | 101 | const BIAS_KEY = '#textgenerationwebui_api-settings'; |
| 86 | 102 | |
| 87 | 103 | // Maybe let it be configurable in the future? |
| @@ -163,6 +179,7 @@ const settings = { | ||
| 163 | 179 | banned_tokens: '', |
| 164 | 180 | sampler_priority: OOBA_DEFAULT_ORDER, |
| 165 | 181 | samplers: LLAMACPP_DEFAULT_ORDER, |
| 182 | + samplers_priorities: APHRODITE_DEFAULT_ORDER, | |
| 166 | 183 | ignore_eos_token: false, |
| 167 | 184 | spaces_between_special_tokens: true, |
| 168 | 185 | speculative_ngram: false, |
| @@ -256,6 +273,7 @@ export const setting_names = [ | ||
| 256 | 273 | 'sampler_order', |
| 257 | 274 | 'sampler_priority', |
| 258 | 275 | 'samplers', |
| 276 | + 'samplers_priorities', | |
| 259 | 277 | 'n', |
| 260 | 278 | 'logit_bias', |
| 261 | 279 | 'custom_model', |
| @@ -553,6 +571,20 @@ function sortOobaItemsByOrder(orderArray) { | ||
| 553 | 571 | }); |
| 554 | 572 | } |
| 555 | 573 | |
| 574 | +/** | |
| 575 | + * Sorts the Aphrodite sampler items by the given order. | |
| 576 | + * @param {string[]} orderArray Sampler order array. | |
| 577 | + */ | |
| 578 | +function 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 | + | |
| 556 | 588 | jQuery(function () { |
| 557 | 589 | $('#koboldcpp_order').sortable({ |
| 558 | 590 | delay: getSortableDelay(), |
| @@ -606,6 +638,19 @@ jQuery(function () { | ||
| 606 | 638 | }, |
| 607 | 639 | }); |
| 608 | 640 | |
| 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 | 654 | $('#tabby_json_schema').on('input', function () { |
| 610 | 655 | const json_schema_string = String($(this).val()); |
| 611 | 656 | |
| @@ -624,6 +669,13 @@ jQuery(function () { | ||
| 624 | 669 | saveSettingsDebounced(); |
| 625 | 670 | }); |
| 626 | 671 | |
| 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 | 679 | $('#textgen_type').on('change', function () { |
| 628 | 680 | const type = String($(this).val()); |
| 629 | 681 | settings.type = type; |
| @@ -832,6 +884,14 @@ function setSettingByName(setting, value, trigger) { | ||
| 832 | 884 | return; |
| 833 | 885 | } |
| 834 | 886 | |
| 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 | 895 | if ('samplers' === setting) { |
| 836 | 896 | value = Array.isArray(value) ? value : LLAMACPP_DEFAULT_ORDER; |
| 837 | 897 | insertMissingArrayItems(LLAMACPP_DEFAULT_ORDER, value); |
| @@ -1256,6 +1316,7 @@ export function getTextGenGenerationData(finalPrompt, maxTokens, isImpersonate, | ||
| 1256 | 1316 | 'nsigma': settings.nsigma, |
| 1257 | 1317 | 'custom_token_bans': toIntArray(banned_tokens), |
| 1258 | 1318 | 'no_repeat_ngram_size': settings.no_repeat_ngram_size, |
| 1319 | + 'sampler_priority': settings.type === APHRODITE ? settings.samplers_priorities : undefined, | |
| 1259 | 1320 | }; |
| 1260 | 1321 | |
| 1261 | 1322 | if (settings.type === OPENROUTER) { |