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 @@
+
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,