diff --git a/public/index.html b/public/index.html index 928061b0c..5d93ef362 100644 --- a/public/index.html +++ b/public/index.html @@ -1516,6 +1516,17 @@ +
+
+

JSON Schema + + + + + +

+ +

diff --git a/public/scripts/textgen-settings.js b/public/scripts/textgen-settings.js index fdd2380f7..d7cee2625 100644 --- a/public/scripts/textgen-settings.js +++ b/public/scripts/textgen-settings.js @@ -128,6 +128,7 @@ const settings = { guidance_scale: 1, negative_prompt: '', grammar_string: '', + json_schema: {}, banned_tokens: '', sampler_priority: OOBA_DEFAULT_ORDER, samplers: LLAMACPP_DEFAULT_ORDER, @@ -201,6 +202,7 @@ const setting_names = [ 'guidance_scale', 'negative_prompt', 'grammar_string', + 'json_schema', 'banned_tokens', 'legacy_api', //'n_aphrodite', @@ -562,6 +564,17 @@ jQuery(function () { }, }); + $('#tabby_json_schema').on('input', function () { + const json_schema_string = String($(this).val()); + + try { + settings.json_schema = JSON.parse(json_schema_string ?? '{}'); + } catch { + // Ignore errors from here + } + saveSettingsDebounced(); + }); + $('#textgenerationwebui_default_order').on('click', function () { sortOobaItemsByOrder(OOBA_DEFAULT_ORDER); settings.sampler_priority = OOBA_DEFAULT_ORDER; @@ -757,6 +770,12 @@ function setSettingByName(setting, value, trigger) { return; } + if ('json_schema' === setting) { + settings.json_schema = value ?? {}; + $('#tabby_json_schema').val(JSON.stringify(settings.json_schema, null, 2)); + return; + } + const isCheckbox = $(`#${setting}_textgenerationwebui`).attr('type') == 'checkbox'; const isText = $(`#${setting}_textgenerationwebui`).attr('type') == 'text' || $(`#${setting}_textgenerationwebui`).is('textarea'); if (isCheckbox) { @@ -1027,6 +1046,7 @@ export function getTextGenGenerationData(finalPrompt, maxTokens, isImpersonate, 'guidance_scale': cfgValues?.guidanceScale?.value ?? settings.guidance_scale ?? 1, 'negative_prompt': cfgValues?.negativePrompt ?? substituteParams(settings.negative_prompt) ?? '', 'grammar_string': settings.grammar_string, + 'json_schema': settings.type === TABBY ? settings.json_schema : undefined, // llama.cpp aliases. In case someone wants to use LM Studio as Text Completion API 'repeat_penalty': settings.rep_pen, 'tfs_z': settings.tfs,