TC: Add a toggle for empty json schemas (#4807)

91d26c4b1dc3679029edbaa1f7026348eabaa7a4

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

Signed
8 files changed, +20 -3Showing whitespace changes
default/content/presets/textgen/Default.json+1 -0
@@ -45,6 +45,7 @@
4545 "negative_prompt": "",
4646 "grammar_string": "",
4747 "json_schema": null,
48+ "json_schema_allow_empty": false,
4849 "banned_tokens": "",
4950 "sampler_priority": [
5051 "repetition_penalty",
default/content/presets/textgen/Deterministic.json+1 -0
@@ -45,6 +45,7 @@
4545 "negative_prompt": "",
4646 "grammar_string": "",
4747 "json_schema": null,
48+ "json_schema_allow_empty": false,
4849 "banned_tokens": "",
4950 "sampler_priority": [
5051 "repetition_penalty",
default/content/presets/textgen/Neutral.json+1 -0
@@ -45,6 +45,7 @@
4545 "negative_prompt": "",
4646 "grammar_string": "",
4747 "json_schema": null,
48+ "json_schema_allow_empty": false,
4849 "banned_tokens": "",
4950 "sampler_priority": [
5051 "repetition_penalty",
default/content/presets/textgen/Universal-Creative.json+1 -0
@@ -45,6 +45,7 @@
4545 "negative_prompt": "",
4646 "grammar_string": "",
4747 "json_schema": null,
48+ "json_schema_allow_empty": false,
4849 "banned_tokens": "",
4950 "sampler_priority": [
5051 "repetition_penalty",
default/content/presets/textgen/Universal-Light.json+1 -0
@@ -45,6 +45,7 @@
4545 "negative_prompt": "",
4646 "grammar_string": "",
4747 "json_schema": null,
48+ "json_schema_allow_empty": false,
4849 "banned_tokens": "",
4950 "sampler_priority": [
5051 "repetition_penalty",
default/content/presets/textgen/Universal-Super-Creative.json+1 -0
@@ -45,6 +45,7 @@
4545 "negative_prompt": "",
4646 "grammar_string": "",
4747 "json_schema": null,
48+ "json_schema_allow_empty": false,
4849 "banned_tokens": "",
4950 "sampler_priority": [
5051 "repetition_penalty",
public/index.html+4 -0
@@ -1707,6 +1707,10 @@
17071707 </a>
17081708 </h4>
17091709 <textarea id="tabby_json_schema" rows="4" class="text_pole textarea_compact monospace" data-i18n="[placeholder]Type in the desired JSON schema" placeholder="Type in the desired JSON schema"></textarea>
1710+ <label for="json_schema_allow_empty_textgenerationwebui" class="checkbox_label" title="Treat empty JSON object as a valid JSON schema." data-tg-type="all">
1711+ <input type="checkbox" id="json_schema_allow_empty_textgenerationwebui" />
1712+ <small data-i18n="Allow empty schema objects">Allow empty schema objects</small>
1713+ </label>
17101714 </div>
17111715 <div id="sampler_order_block_kcpp" data-tg-type="koboldcpp" data-tg-samplers="sampler_order" class="range-block flexFlowColumn wide100p">
17121716 <hr class="wide100p">
public/scripts/textgen-settings.js+10 -3
@@ -193,6 +193,7 @@ const settings = {
193193 negative_prompt: '',
194194 grammar_string: '',
195195 json_schema: null,
196+ json_schema_allow_empty: false,
196197 banned_tokens: '',
197198 global_banned_tokens: '',
198199 send_banned_tokens: true,
@@ -311,6 +312,7 @@ export const setting_names = [
311312 'min_keep',
312313 'generic_model',
313314 'extensions',
315+ 'json_schema_allow_empty',
314316];
315317
316318const DYNATEMP_BLOCK = document.getElementById('dynatemp_block_ooba');
@@ -1506,6 +1508,11 @@ export async function getTextGenGenerationData(finalPrompt, maxTokens, isImperso
15061508 const canMultiSwipe = !isContinue && !isImpersonate && type !== 'quiet';
15071509 const dynatemp = isDynamicTemperatureSupported();
15081510 const { banned_tokens, banned_strings } = getCustomTokenBans();
1511+ const jsonSchema = isObject(settings.json_schema)
1512+ ? settings.json_schema_allow_empty
1513+ ? settings.json_schema
1514+ : Object.keys(settings.json_schema).length > 0 ? settings.json_schema : undefined
1515+ : undefined;
15091516
15101517 let params = {
15111518 'prompt': finalPrompt,
@@ -1597,7 +1604,7 @@ export async function getTextGenGenerationData(finalPrompt, maxTokens, isImperso
15971604 'guidance_scale': cfgValues?.guidanceScale?.value ?? settings.guidance_scale ?? 1,
15981605 'negative_prompt': cfgValues?.negativePrompt ?? substituteParams(settings.negative_prompt) ?? '',
15991606 'grammar_string': settings.grammar_string || undefined,
16001607 'json_schema': [TABBY, LLAMACPP].includes(settings.type) && settings.json_schema ? settings.json_schemajsonSchema : undefined,
16011608 // llama.cpp aliases. In case someone wants to use LM Studio as Text Completion API
16021609 'repeat_penalty': settings.rep_pen,
16031610 'repeat_last_n': settings.rep_pen_range,
@@ -1639,7 +1646,7 @@ export async function getTextGenGenerationData(finalPrompt, maxTokens, isImperso
16391646 'skip_special_tokens': settings.skip_special_tokens,
16401647 'spaces_between_special_tokens': settings.spaces_between_special_tokens,
16411648 'guided_grammar': settings.grammar_string || undefined,
16421649 'guided_json': settings.json_schemajsonSchema || undefined,
16431650 'early_stopping': false, // hacks
16441651 'include_stop_str_in_output': false,
16451652 'dynatemp_min': dynatemp ? settings.min_temp : undefined,
@@ -1734,7 +1741,7 @@ export async function getTextGenGenerationData(finalPrompt, maxTokens, isImperso
17341741
17351742 // Grammar conflicts with with json_schema
17361743 if ([LLAMACPP, APHRODITE].includes(settings.type)) {
17371744 if (settings.json_schema && isObject(settings.json_schema)jsonSchema) {
17381745 delete params.grammar_string;
17391746 delete params.grammar;
17401747 delete params.guided_grammar;