Add Unified sampling for Novel

This commit is contained in:
Cohee 2024-09-21 00:24:52 +03:00
parent 8efe0b6437
commit e2f88e6243
22 changed files with 321 additions and 176 deletions

View File

@ -17,5 +17,8 @@
"cfg_scale": 1,
"phrase_rep_pen": "medium",
"max_context": 7800,
"min_p": 0
"min_p": 0,
"math1_temp": 1,
"math1_quad": 0,
"math1_quad_entropy_scale": 0
}

View File

@ -16,5 +16,8 @@
"phrase_rep_pen": "medium",
"cfg_scale": 1.55,
"max_context": 7800,
"min_p": 0
"min_p": 0,
"math1_temp": 1,
"math1_quad": 0,
"math1_quad_entropy_scale": 0
}

View File

@ -17,5 +17,8 @@
"phrase_rep_pen": "very_aggressive",
"cfg_scale": 1.3,
"max_context": 7800,
"min_p": 0
"min_p": 0,
"math1_temp": 1,
"math1_quad": 0,
"math1_quad_entropy_scale": 0
}

View File

@ -18,5 +18,8 @@
"cfg_scale": 1,
"phrase_rep_pen": "aggressive",
"max_context": 7800,
"min_p": 0
"min_p": 0,
"math1_temp": 1,
"math1_quad": 0,
"math1_quad_entropy_scale": 0
}

View File

@ -17,5 +17,8 @@
"phrase_rep_pen": "off",
"cfg_scale": 1.48,
"max_context": 7800,
"min_p": 0
"min_p": 0,
"math1_temp": 1,
"math1_quad": 0,
"math1_quad_entropy_scale": 0
}

View File

@ -18,5 +18,8 @@
"cfg_scale": 1,
"phrase_rep_pen": "very_light",
"max_context": 7800,
"min_p": 0
"min_p": 0,
"math1_temp": 1,
"math1_quad": 0,
"math1_quad_entropy_scale": 0
}

View File

@ -19,5 +19,8 @@
"cfg_scale": 1,
"phrase_rep_pen": "very_light",
"max_context": 7800,
"min_p": 0
"min_p": 0,
"math1_temp": 1,
"math1_quad": 0,
"math1_quad_entropy_scale": 0
}

View File

@ -17,5 +17,8 @@
"cfg_scale": 1,
"phrase_rep_pen": "off",
"max_context": 7800,
"min_p": 0
"min_p": 0,
"math1_temp": 1,
"math1_quad": 0,
"math1_quad_entropy_scale": 0
}

View File

@ -17,5 +17,8 @@
"phrase_rep_pen": "very_aggressive",
"cfg_scale": 1.4,
"max_context": 7800,
"min_p": 0
"min_p": 0,
"math1_temp": 1,
"math1_quad": 0,
"math1_quad_entropy_scale": 0
}

View File

@ -19,5 +19,8 @@
"cfg_scale": 1,
"phrase_rep_pen": "very_light",
"max_context": 7800,
"min_p": 0
"min_p": 0,
"math1_temp": 1,
"math1_quad": 0,
"math1_quad_entropy_scale": 0
}

View File

@ -19,5 +19,8 @@
"cfg_scale": 1,
"phrase_rep_pen": "very_light",
"max_context": 7800,
"min_p": 0
"min_p": 0,
"math1_temp": 1,
"math1_quad": 0,
"math1_quad_entropy_scale": 0
}

View File

@ -19,5 +19,8 @@
"phrase_rep_pen": "medium",
"cfg_scale": 1.35,
"max_context": 7800,
"min_p": 0
"min_p": 0,
"math1_temp": 1,
"math1_quad": 0,
"math1_quad_entropy_scale": 0
}

View File

@ -17,5 +17,8 @@
"phrase_rep_pen": "medium",
"cfg_scale": 1.0,
"max_context": 7800,
"min_p": 0
"min_p": 0,
"math1_temp": 1,
"math1_quad": 0,
"math1_quad_entropy_scale": 0
}

View File

@ -14,5 +14,8 @@
"prefix": "vanilla",
"phrase_rep_pen": "medium",
"max_context": 7800,
"min_p": 0
"min_p": 0,
"math1_temp": 1,
"math1_quad": 0,
"math1_quad_entropy_scale": 0
}

View File

@ -19,5 +19,8 @@
"cfg_scale": 1,
"phrase_rep_pen": "very_light",
"max_context": 7800,
"min_p": 0
"min_p": 0,
"math1_temp": 1,
"math1_quad": 0,
"math1_quad_entropy_scale": 0
}

View File

@ -16,5 +16,8 @@
"phrase_rep_pen": "aggressive",
"cfg_scale": 1.0,
"max_context": 7800,
"min_p": 0
"min_p": 0,
"math1_temp": 1,
"math1_quad": 0,
"math1_quad_entropy_scale": 0
}

View File

@ -15,5 +15,8 @@
"phrase_rep_pen": "aggressive",
"cfg_scale": 1.3,
"max_context": 7800,
"min_p": 0
"min_p": 0,
"math1_temp": 1,
"math1_quad": 0,
"math1_quad_entropy_scale": 0
}

View File

@ -19,5 +19,8 @@
"cfg_scale": 1,
"phrase_rep_pen": "very_light",
"max_context": 7800,
"min_p": 0
"min_p": 0,
"math1_temp": 1,
"math1_quad": 0,
"math1_quad_entropy_scale": 0
}

View File

@ -18,5 +18,8 @@
"prefix": "vanilla",
"phrase_rep_pen": "very_aggressive",
"max_context": 7800,
"min_p": 0
"min_p": 0,
"math1_temp": 1,
"math1_quad": 0,
"math1_quad_entropy_scale": 0
}

View File

@ -349,6 +349,136 @@
</div>
</div>
</div>
<div class="range-block">
<div class="range-block-title" data-i18n="Top P">
Top P
</div>
<div class="range-block-range-and-counter">
<div class="range-block-range">
<input type="range" id="top_p_novel" name="volume" min="0" max="1" step="0.001">
</div>
<div class="range-block-counter">
<input type="number" min="0" max="1" step="0.001" data-for="top_p_novel" id="top_p_counter_novel">
</div>
</div>
</div>
<div class="range-block">
<div class="range-block-title" data-i18n="Top A">
Top A
</div>
<div class="range-block-range-and-counter">
<div class="range-block-range">
<input type="range" id="top_a_novel" name="volume" min="0" max="1" step="0.001">
</div>
<div class="range-block-counter">
<input type="number" min="0" max="1" step="0.001" data-for="top_a_novel" id="top_a_counter_novel">
</div>
</div>
</div>
<div class="range-block">
<div class="range-block-title" data-i18n="Top K">
Top K
</div>
<div class="range-block-range-and-counter">
<div class="range-block-range">
<input type="range" id="top_k_novel" name="volume" min="0" max="300" step="1">
</div>
<div class="range-block-counter">
<input type="number" min="0" max="300" step="1" data-for="top_k_novel" id="top_k_counter_novel">
</div>
</div>
</div>
<div class="range-block">
<div class="range-block-title" data-i18n="Mirostat Tau">
Mirostat Tau
</div>
<div class="range-block-range-and-counter">
<div class="range-block-range">
<input type="range" id="mirostat_tau_novel" name="volume" min="0" max="6" step="0.01">
</div>
<div class="range-block-counter">
<input type="number" min="0" max="6" step="0.01" data-for="mirostat_tau_novel" id="mirostat_tau_counter_novel">
</div>
</div>
</div>
<div class="range-block">
<div class="range-block-title" data-i18n="Mirostat LR">
Mirostat LR
</div>
<div class="range-block-range-and-counter">
<div class="range-block-range">
<input type="range" id="mirostat_lr_novel" name="volume" min="0" max="1" step="0.01">
</div>
<div class="range-block-counter">
<input type="number" min="0" max="1" step="0.01" data-for="mirostat_lr_novel" id="mirostat_lr_counter_novel">
</div>
</div>
</div>
<div class="range-block">
<div class="range-block-title" data-i18n="Typical P">
Typical P
</div>
<div class="range-block-range-and-counter">
<div class="range-block-range">
<input type="range" id="typical_p_novel" name="volume" min="0" max="1" step="0.001">
</div>
<div class="range-block-counter">
<input type="number" min="0" max="1" step="0.001" data-for="typical_p_novel" id="typical_p_counter_novel">
</div>
</div>
</div>
<div class="range-block">
<div class="range-block-title" data-i18n="Linear">
Linear
</div>
<div class="range-block-range-and-counter">
<div class="range-block-range">
<input type="range" id="math1_temp_novel" name="volume" min="0" max="1.5" step="0.01">
</div>
<div class="range-block-counter">
<input type="number" min="0" max="1.5" step="0.01" data-for="math1_temp_novel" id="math1_temp_counter_novel">
</div>
</div>
</div>
<div class="range-block">
<div class="range-block-title" data-i18n="Quad">
Quad
</div>
<div class="range-block-range-and-counter">
<div class="range-block-range">
<input type="range" id="math1_quad_novel" name="volume" min="0" max="0.4" step="0.01">
</div>
<div class="range-block-counter">
<input type="number" min="0" max="0.4" step="0.01" data-for="math1_quad_novel" id="math1_quad_counter_novel">
</div>
</div>
</div>
<div class="range-block">
<div class="range-block-title" data-i18n="Conf">
Conf
</div>
<div class="range-block-range-and-counter">
<div class="range-block-range">
<input type="range" id="math1_quad_entropy_scale_novel" name="volume" min="-0.4" max="0.4" step="0.01">
</div>
<div class="range-block-counter">
<input type="number" min="-0.4" max="0.4" step="0.01" data-for="math1_quad_entropy_scale_novel" id="math1_quad_entropy_scale_counter_novel">
</div>
</div>
</div>
<div class="range-block">
<div class="range-block-title" data-i18n="Min Length">
Min Length
</div>
<div class="range-block-range-and-counter">
<div class="range-block-range">
<input type="range" id="min_length_novel" name="volume" min="1" max="150" step="1">
</div>
<div class="range-block-counter">
<input type="number" min="1" max="150" step="1" data-for="min_length_novel" id="min_length_counter_novel">
</div>
</div>
</div>
<div class="range-block">
<div class="range-block-title" data-i18n="Phrase Repetition Penalty">
Phrase Repetition Penalty
@ -362,6 +492,72 @@
<option value="very_aggressive" data-i18n="Very aggressive">Very aggressive</option>
</select>
</div>
<div class="range-block">
<div class="range-block-title openai_restorable">
<span data-i18n="Preamble">Preamble</span>
<div id="nai_preamble_restore" title="Restore default prompt" data-i18n="[title]Restore default prompt" class="right_menu_button">
<div class="fa-solid fa-clock-rotate-left "></div>
</div>
</div>
<div class="toggle-description justifyLeft" data-i18n="Use style tags to modify the writing style of the output.">
Use style tags to modify the writing style of the output.
</div>
<div class="wide100p">
<textarea id="nai_preamble_textarea" class="text_pole textarea_compact" name="nai_preamble" rows="2" placeholder=""></textarea>
</div>
</div>
<div class="range-block">
<div class="range-block-title justifyLeft">
<span data-i18n="Banned Tokens">Banned Tokens</span>
</div>
<div class="toggle-description justifyLeft" data-i18n="Sequences you don't want to appear in the output. One per line.">
Sequences you don't want to appear in the output. One per line. Text or [token ids].
</div>
<div class="wide100p">
<textarea id="nai_banned_tokens" class="text_pole textarea_compact" name="nai_banned_tokens" rows="3" placeholder="Example:&#10;some text&#10;[42, 69, 1337]"></textarea>
</div>
</div>
<div class="range-block">
<div id="logit_bias_novel" class="range-block-title title_restorable">
<span data-i18n="Logit Bias">Logit Bias</span>
<div id="novelai_logit_bias_new_entry" class="menu_button menu_button_icon">
<i class="fa-xs fa-solid fa-plus"></i>
<small data-i18n="Add">Add</small>
</div>
</div>
<div class="toggle-description justifyLeft" data-i18n="Helps to ban or reenforce the usage of certain words">
Helps to ban or reinforce the usage of certain tokens.
</div>
<div class="flex-container flexFlowColumn wide100p">
<div class="logit_bias_list"></div>
</div>
</div>
<div class="range-block">
<hr>
<div class="range-block-title justifyLeft" data-i18n="CFG Scale">
CFG Scale
</div>
<div class="range-block-range-and-counter">
<div class="range-block-range">
<input type="range" id="cfg_scale_novel" name="volume" min="1" max="3" step="0.05">
</div>
<div class="range-block-counter">
<input type="number" min="1" max="3" step="0.05" data-for="cfg_scale_novel" id="cfg_scale_counter_novel">
</div>
</div>
</div>
<div class="range-block">
<div class="range-block-title justifyLeft">
<span data-i18n="Negative Prompt">Negative Prompt</span>
</div>
<div class="wide100p">
<textarea id="nai_cfg_uc" class="text_pole textarea_compact" name="cfg_uc" rows="2" data-i18n="[placeholder]Add text here that would make the AI generate things you don't want in your outputs." placeholder="Add text here that would make the AI generate things you don't want in your outputs."></textarea>
</div>
<small class="margin-bot-10px" data-i18n="Used if CFG Scale is unset globally, per chat or character">
Used if CFG Scale is unset globally, per chat or character
</small>
<hr>
</div>
</div>
<div id="range_block_openai">
<div class="range-block">
@ -920,163 +1116,6 @@
</div>
</div><!-- end of kobold settings-->
<div id="novel_api-settings">
<div class="range-block">
<div class="range-block-title openai_restorable">
<span data-i18n="Preamble">Preamble</span>
<div id="nai_preamble_restore" title="Restore default prompt" data-i18n="[title]Restore default prompt" class="right_menu_button">
<div class="fa-solid fa-clock-rotate-left "></div>
</div>
</div>
<div class="toggle-description justifyLeft" data-i18n="Use style tags to modify the writing style of the output.">
Use style tags to modify the writing style of the output.
</div>
<div class="wide100p">
<textarea id="nai_preamble_textarea" class="text_pole textarea_compact" name="nai_preamble" rows="2" placeholder=""></textarea>
</div>
</div>
<div class="range-block">
<div class="range-block-title justifyLeft">
<span data-i18n="Banned Tokens">Banned Tokens</span>
</div>
<div class="toggle-description justifyLeft" data-i18n="Sequences you don't want to appear in the output. One per line.">
Sequences you don't want to appear in the output. One per line. Text or [token ids].
</div>
<div class="wide100p">
<textarea id="nai_banned_tokens" class="text_pole textarea_compact" name="nai_banned_tokens" rows="3" placeholder="Example:&#10;some text&#10;[42, 69, 1337]"></textarea>
</div>
</div>
<div class="range-block">
<div id="logit_bias_novel" class="range-block-title title_restorable">
<span data-i18n="Logit Bias">Logit Bias</span>
<div id="novelai_logit_bias_new_entry" class="menu_button menu_button_icon">
<i class="fa-xs fa-solid fa-plus"></i>
<small data-i18n="Add">Add</small>
</div>
</div>
<div class="toggle-description justifyLeft" data-i18n="Helps to ban or reenforce the usage of certain words">
Helps to ban or reinforce the usage of certain tokens.
</div>
<div class="flex-container flexFlowColumn wide100p">
<div class="logit_bias_list"></div>
</div>
</div>
<div class="range-block">
<hr>
<div class="range-block-title justifyLeft" data-i18n="CFG Scale">
CFG Scale
</div>
<div class="range-block-range-and-counter">
<div class="range-block-range">
<input type="range" id="cfg_scale_novel" name="volume" min="1" max="3" step="0.05">
</div>
<div class="range-block-counter">
<input type="number" min="1" max="3" step="0.05" data-for="cfg_scale_novel" id="cfg_scale_counter_novel">
</div>
</div>
</div>
<div class="range-block">
<div class="range-block-title justifyLeft">
<span data-i18n="Negative Prompt">Negative Prompt</span>
</div>
<div class="wide100p">
<textarea id="nai_cfg_uc" class="text_pole textarea_compact" name="cfg_uc" rows="2" data-i18n="[placeholder]Add text here that would make the AI generate things you don't want in your outputs." placeholder="Add text here that would make the AI generate things you don't want in your outputs."></textarea>
</div>
<small class="margin-bot-10px" data-i18n="Used if CFG Scale is unset globally, per chat or character">
Used if CFG Scale is unset globally, per chat or character
</small>
<hr>
</div>
<div class="range-block">
<div class="range-block-title" data-i18n="Top P">
Top P
</div>
<div class="range-block-range-and-counter">
<div class="range-block-range">
<input type="range" id="top_p_novel" name="volume" min="0" max="1" step="0.001">
</div>
<div class="range-block-counter">
<input type="number" min="0" max="1" step="0.001" data-for="top_p_novel" id="top_p_counter_novel">
</div>
</div>
</div>
<div class="range-block">
<div class="range-block-title" data-i18n="Top A">
Top A
</div>
<div class="range-block-range-and-counter">
<div class="range-block-range">
<input type="range" id="top_a_novel" name="volume" min="0" max="1" step="0.001">
</div>
<div class="range-block-counter">
<input type="number" min="0" max="1" step="0.001" data-for="top_a_novel" id="top_a_counter_novel">
</div>
</div>
</div>
<div class="range-block">
<div class="range-block-title" data-i18n="Top K">
Top K
</div>
<div class="range-block-range-and-counter">
<div class="range-block-range">
<input type="range" id="top_k_novel" name="volume" min="0" max="300" step="1">
</div>
<div class="range-block-counter">
<input type="number" min="0" max="300" step="1" data-for="top_k_novel" id="top_k_counter_novel">
</div>
</div>
</div>
<div class="range-block">
<div class="range-block-title" data-i18n="Mirostat Tau">
Mirostat Tau
</div>
<div class="range-block-range-and-counter">
<div class="range-block-range">
<input type="range" id="mirostat_tau_novel" name="volume" min="0" max="6" step="0.01">
</div>
<div class="range-block-counter">
<input type="number" min="0" max="6" step="0.01" data-for="mirostat_tau_novel" id="mirostat_tau_counter_novel">
</div>
</div>
</div>
<div class="range-block">
<div class="range-block-title" data-i18n="Mirostat LR">
Mirostat LR
</div>
<div class="range-block-range-and-counter">
<div class="range-block-range">
<input type="range" id="mirostat_lr_novel" name="volume" min="0" max="1" step="0.01">
</div>
<div class="range-block-counter">
<input type="number" min="0" max="1" step="0.01" data-for="mirostat_lr_novel" id="mirostat_lr_counter_novel">
</div>
</div>
</div>
<div class="range-block">
<div class="range-block-title" data-i18n="Typical P">
Typical P
</div>
<div class="range-block-range-and-counter">
<div class="range-block-range">
<input type="range" id="typical_p_novel" name="volume" min="0" max="1" step="0.001">
</div>
<div class="range-block-counter">
<input type="number" min="0" max="1" step="0.001" data-for="typical_p_novel" id="typical_p_counter_novel">
</div>
</div>
</div>
<div class="range-block">
<div class="range-block-title" data-i18n="Min Length">
Min Length
</div>
<div class="range-block-range-and-counter">
<div class="range-block-range">
<input type="range" id="min_length_novel" name="volume" min="1" max="150" step="1">
</div>
<div class="range-block-counter">
<input type="number" min="1" max="150" step="1" data-for="min_length_novel" id="min_length_counter_novel">
</div>
</div>
</div>
<div class="range-block flexFlowColumn">
<div class="range-block-title">
<span data-i18n="Samplers Order">Samplers Order</span>
@ -1126,6 +1165,16 @@
<small>8</small>
<div class="toggle_button right_menu_button"></div>
</div>
<div data-id="9">
<span data-i18n="Unified Sampling">Unified Sampling</span>
<small>9</small>
<div class="toggle_button right_menu_button"></div>
</div>
<div data-id="10">
<span data-i18n="Min P">Min P</span>
<small>10</small>
<div class="toggle_button right_menu_button"></div>
</div>
</div>
</div>
</div><!-- end of novel settings-->

View File

@ -39,6 +39,9 @@ export const nai_settings = {
top_a: 0.08,
typical_p: 0.975,
min_p: 0,
math1_temp: 1,
math1_quad: 0,
math1_quad_entropy_scale: 0,
min_length: 1,
model_novel: 'clio-v1',
preset_settings_novel: 'Talker-Chat-Clio',
@ -153,6 +156,9 @@ export function loadNovelPreset(preset) {
nai_settings.logit_bias = preset.logit_bias || [];
nai_settings.preamble = preset.preamble || default_preamble;
nai_settings.min_p = preset.min_p || 0;
nai_settings.math1_temp = preset.math1_temp || 1;
nai_settings.math1_quad = preset.math1_quad || 0;
nai_settings.math1_quad_entropy_scale = preset.math1_quad_entropy_scale || 0;
loadNovelSettingsUi(nai_settings);
}
@ -191,6 +197,9 @@ export function loadNovelSettings(settings) {
nai_settings.order = settings.order || default_order;
nai_settings.logit_bias = settings.logit_bias || [];
nai_settings.min_p = settings.min_p || 0;
nai_settings.math1_temp = settings.math1_temp || 1;
nai_settings.math1_quad = settings.math1_quad || 0;
nai_settings.math1_quad_entropy_scale = settings.math1_quad_entropy_scale || 0;
loadNovelSettingsUi(nai_settings);
}
@ -232,6 +241,12 @@ function loadNovelSettingsUi(ui_settings) {
$('#nai_banned_tokens').val(ui_settings.banned_tokens || '');
$('#min_p_novel').val(ui_settings.min_p);
$('#min_p_counter_novel').val(Number(ui_settings.min_p).toFixed(3));
$('#math1_temp_novel').val(ui_settings.math1_temp);
$('#math1_temp_counter_novel').val(Number(ui_settings.math1_temp).toFixed(2));
$('#math1_quad_novel').val(ui_settings.math1_quad);
$('#math1_quad_counter_novel').val(Number(ui_settings.math1_quad).toFixed(2));
$('#math1_quad_entropy_scale_novel').val(ui_settings.math1_quad_entropy_scale);
$('#math1_quad_entropy_scale_counter_novel').val(Number(ui_settings.math1_quad_entropy_scale).toFixed(2));
$('#streaming_novel').prop('checked', ui_settings.streaming_novel);
sortItemsByOrder(ui_settings.order);
@ -347,6 +362,24 @@ const sliders = [
format: (val) => Number(val).toFixed(3),
setValue: (val) => { nai_settings.min_p = Number(val); },
},
{
sliderId: '#math1_temp_novel',
counterId: '#math1_temp_counter_novel',
format: (val) => Number(val).toFixed(2),
setValue: (val) => { nai_settings.math1_temp = Number(val); },
},
{
sliderId: '#math1_quad_novel',
counterId: '#math1_quad_counter_novel',
format: (val) => Number(val).toFixed(2),
setValue: (val) => { nai_settings.math1_quad = Number(val); },
},
{
sliderId: '#math1_quad_entropy_scale_novel',
counterId: '#math1_quad_entropy_scale_counter_novel',
format: (val) => Number(val).toFixed(2),
setValue: (val) => { nai_settings.math1_quad_entropy_scale = Number(val); },
},
];
function getBadWordIds(banned_tokens, tokenizerType) {
@ -481,6 +514,9 @@ export function getNovelGenerationData(finalPrompt, settings, maxLength, isImper
'top_p': Number(nai_settings.top_p),
'top_k': Number(nai_settings.top_k),
'min_p': Number(nai_settings.min_p),
'math1_temp': Number(nai_settings.math1_temp),
'math1_quad': Number(nai_settings.math1_quad),
'math1_quad_entropy_scale': Number(nai_settings.math1_quad_entropy_scale),
'typical_p': Number(nai_settings.typical_p),
'mirostat_lr': Number(nai_settings.mirostat_lr),
'mirostat_tau': Number(nai_settings.mirostat_tau),

View File

@ -176,6 +176,9 @@ router.post('/generate', jsonParser, async function (req, res) {
'order': req.body.order,
'num_logprobs': req.body.num_logprobs,
'min_p': req.body.min_p,
'math1_temp': req.body.math1_temp,
'math1_quad': req.body.math1_quad,
'math1_quad_entropy_scale': req.body.math1_quad_entropy_scale,
},
};