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 -0Ignore whitespace
public/index.html+29 -0
@@ -1774,6 +1774,35 @@
17741774 <span data-i18n="Load default order">Load default order</span>
17751775 </div>
17761776 </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>
17771806 </div>
17781807 </div><!-- end of textgen settings-->
17791808 <div id="openai_settings">
public/scripts/samplerSelect.js+13 -0
@@ -129,6 +129,10 @@ function setSamplerListListeners() {
129129 relatedDOMElement = $('#sampler_priority_block_ooba');
130130 }
131131
132+ if (samplerName === 'samplers_priorities') { //this is for aphrodite's sampler priority
133+ relatedDOMElement = $('#sampler_priority_block_aphrodite');
134+ }
135+
132136 if (samplerName === 'penalty_alpha') { //contrastive search only has one sampler, does it need its own block?
133137 relatedDOMElement = $('#contrastiveSearchBlock');
134138 }
@@ -237,6 +241,11 @@ async function listSamplers(main_api, arrayOnly = false) {
237241 displayname = 'Ooba Sampler Priority Block';
238242 }
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+
240249 if (sampler === 'penalty_alpha') { //contrastive search only has one sampler, does it need its own block?
241250 targetDOMelement = $('#contrastiveSearchBlock');
242251 displayname = 'Contrast Search Block';
@@ -373,6 +382,10 @@ export async function validateDisabledSamplers(redraw = false) {
373382 relatedDOMElement = $('#sampler_priority_block_ooba');
374383 }
375384
385+ if (sampler === 'samplers_priorities') { //this is for aphrodite's sampler priority
386+ relatedDOMElement = $('#sampler_priority_block_aphrodite');
387+ }
388+
376389 if (sampler === 'dry_multiplier') {
377390 relatedDOMElement = $('#dryBlock');
378391 targetDisplayType = 'block';
public/scripts/textgen-settings.js+61 -0
@@ -82,6 +82,22 @@ const OOBA_DEFAULT_ORDER = [
8282 'encoder_repetition_penalty',
8383 'no_repeat_ngram',
8484];
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+];
85101const BIAS_KEY = '#textgenerationwebui_api-settings';
86102
87103// Maybe let it be configurable in the future?
@@ -163,6 +179,7 @@ const settings = {
163179 banned_tokens: '',
164180 sampler_priority: OOBA_DEFAULT_ORDER,
165181 samplers: LLAMACPP_DEFAULT_ORDER,
182+ samplers_priorities: APHRODITE_DEFAULT_ORDER,
166183 ignore_eos_token: false,
167184 spaces_between_special_tokens: true,
168185 speculative_ngram: false,
@@ -256,6 +273,7 @@ export const setting_names = [
256273 'sampler_order',
257274 'sampler_priority',
258275 'samplers',
276+ 'samplers_priorities',
259277 'n',
260278 'logit_bias',
261279 'custom_model',
@@ -553,6 +571,20 @@ function sortOobaItemsByOrder(orderArray) {
553571 });
554572}
555573
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+
556588jQuery(function () {
557589 $('#koboldcpp_order').sortable({
558590 delay: getSortableDelay(),
@@ -606,6 +638,19 @@ jQuery(function () {
606638 },
607639 });
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+
609654 $('#tabby_json_schema').on('input', function () {
610655 const json_schema_string = String($(this).val());
611656
@@ -624,6 +669,13 @@ jQuery(function () {
624669 saveSettingsDebounced();
625670 });
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+
627679 $('#textgen_type').on('change', function () {
628680 const type = String($(this).val());
629681 settings.type = type;
@@ -832,6 +884,14 @@ function setSettingByName(setting, value, trigger) {
832884 return;
833885 }
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+
835895 if ('samplers' === setting) {
836896 value = Array.isArray(value) ? value : LLAMACPP_DEFAULT_ORDER;
837897 insertMissingArrayItems(LLAMACPP_DEFAULT_ORDER, value);
@@ -1256,6 +1316,7 @@ export function getTextGenGenerationData(finalPrompt, maxTokens, isImpersonate,
12561316 'nsigma': settings.nsigma,
12571317 'custom_token_bans': toIntArray(banned_tokens),
12581318 'no_repeat_ngram_size': settings.no_repeat_ngram_size,
1319+ 'sampler_priority': settings.type === APHRODITE ? settings.samplers_priorities : undefined,
12591320 };
12601321
12611322 if (settings.type === OPENROUTER) {