sillytavern 1.14.0 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (307) hide show
  1. package/.dockerignore +56 -11
  2. package/.eslintrc.cjs +24 -1
  3. package/CONTRIBUTING.md +52 -21
  4. package/Dockerfile +16 -12
  5. package/Start.bat +1 -1
  6. package/UpdateAndStart.bat +1 -1
  7. package/UpdateForkAndStart.bat +1 -1
  8. package/config.yaml +59 -3
  9. package/default/config.yaml +59 -3
  10. package/default/content/index.json +4 -0
  11. package/default/content/presets/instruct/KoboldAI.json +1 -1
  12. package/default/content/presets/instruct/Mistral V7-Tekken.json +1 -1
  13. package/default/content/presets/openai/Default.json +4 -3
  14. package/default/content/presets/reasoning/Think XML.json +6 -0
  15. package/default/content/presets/textgen/Default.json +1 -0
  16. package/default/content/presets/textgen/Deterministic.json +1 -0
  17. package/default/content/presets/textgen/Neutral.json +1 -0
  18. package/default/content/presets/textgen/Universal-Creative.json +1 -0
  19. package/default/content/presets/textgen/Universal-Light.json +1 -0
  20. package/default/content/presets/textgen/Universal-Super-Creative.json +1 -0
  21. package/default/content/settings.json +4 -2
  22. package/docker/docker-compose.yml +7 -0
  23. package/docker/docker-entrypoint.sh +95 -8
  24. package/index.d.ts +1 -1
  25. package/package.json +17 -15
  26. package/plugins.js +4 -3
  27. package/public/css/animations.css +20 -0
  28. package/public/css/backgrounds.css +291 -24
  29. package/public/css/chat-backups.css +54 -0
  30. package/public/css/extensions-panel.css +6 -2
  31. package/public/css/file-form.css +1 -0
  32. package/public/css/loader.css +57 -0
  33. package/public/css/macros.css +603 -0
  34. package/public/css/mobile-styles.css +80 -0
  35. package/public/css/popup.css +4 -0
  36. package/public/css/rm-groups.css +8 -0
  37. package/public/css/select2-overrides.css +5 -0
  38. package/public/css/tags.css +4 -0
  39. package/public/css/toggle-dependent.css +17 -5
  40. package/public/css/welcome.css +9 -0
  41. package/public/global.d.ts +86 -5
  42. package/public/img/chutes.svg +4 -0
  43. package/public/index.html +497 -196
  44. package/public/jsconfig.json +7 -1
  45. package/public/lib.js +8 -0
  46. package/public/locales/ar-sa.json +23 -7
  47. package/public/locales/de-de.json +23 -7
  48. package/public/locales/es-es.json +23 -7
  49. package/public/locales/fr-fr.json +29 -11
  50. package/public/locales/is-is.json +23 -7
  51. package/public/locales/it-it.json +23 -7
  52. package/public/locales/ja-jp.json +23 -7
  53. package/public/locales/ko-kr.json +24 -8
  54. package/public/locales/nl-nl.json +23 -7
  55. package/public/locales/pt-pt.json +23 -7
  56. package/public/locales/ru-ru.json +25 -11
  57. package/public/locales/th-th.json +23 -7
  58. package/public/locales/uk-ua.json +23 -7
  59. package/public/locales/vi-vn.json +23 -7
  60. package/public/locales/zh-cn.json +1962 -651
  61. package/public/locales/zh-tw.json +26 -12
  62. package/public/script.js +1760 -1046
  63. package/public/scripts/BulkEditOverlay.js +10 -9
  64. package/public/scripts/PromptManager.js +6 -16
  65. package/public/scripts/RossAscends-mods.js +59 -66
  66. package/public/scripts/a11y.js +14 -0
  67. package/public/scripts/action-loader-slashcommands.js +355 -0
  68. package/public/scripts/action-loader.js +572 -0
  69. package/public/scripts/authors-note.js +39 -7
  70. package/public/scripts/autocomplete/AutoComplete.js +60 -13
  71. package/public/scripts/autocomplete/AutoCompleteFuzzyScore.js +0 -3
  72. package/public/scripts/autocomplete/AutoCompleteNameResult.js +0 -1
  73. package/public/scripts/autocomplete/AutoCompleteNameResultBase.js +4 -5
  74. package/public/scripts/autocomplete/AutoCompleteOption.js +17 -2
  75. package/public/scripts/autocomplete/EnhancedMacroAutoCompleteOption.js +1872 -0
  76. package/public/scripts/autocomplete/MacroAutoComplete.js +307 -0
  77. package/public/scripts/autocomplete/MacroAutoCompleteHelper.js +1217 -0
  78. package/public/scripts/backgrounds.js +1061 -43
  79. package/public/scripts/bookmarks.js +134 -67
  80. package/public/scripts/bulk-edit.js +1 -1
  81. package/public/scripts/cfg-scale.js +14 -15
  82. package/public/scripts/chat-backups.js +335 -0
  83. package/public/scripts/chat-templates.js +6 -6
  84. package/public/scripts/chats.js +47 -29
  85. package/public/scripts/constants.js +58 -5
  86. package/public/scripts/custom-request.js +166 -150
  87. package/public/scripts/data-maid.js +1 -2
  88. package/public/scripts/dynamic-styles.js +1 -2
  89. package/public/scripts/events.js +9 -1
  90. package/public/scripts/extensions/assets/index.js +24 -31
  91. package/public/scripts/extensions/attachments/index.js +1 -1
  92. package/public/scripts/extensions/attachments/manage-button.html +1 -1
  93. package/public/scripts/extensions/caption/index.js +22 -17
  94. package/public/scripts/extensions/caption/settings.html +31 -7
  95. package/public/scripts/extensions/expressions/index.js +39 -31
  96. package/public/scripts/extensions/gallery/index.js +67 -19
  97. package/public/scripts/extensions/gallery/style.css +4 -0
  98. package/public/scripts/extensions/memory/index.js +48 -15
  99. package/public/scripts/extensions/quick-reply/api/QuickReplyApi.js +9 -15
  100. package/public/scripts/extensions/quick-reply/index.js +14 -18
  101. package/public/scripts/extensions/quick-reply/src/AutoExecuteHandler.js +1 -5
  102. package/public/scripts/extensions/quick-reply/src/QuickReply.js +105 -116
  103. package/public/scripts/extensions/quick-reply/src/QuickReplyConfig.js +12 -20
  104. package/public/scripts/extensions/quick-reply/src/QuickReplyContextLink.js +0 -2
  105. package/public/scripts/extensions/quick-reply/src/QuickReplySet.js +25 -26
  106. package/public/scripts/extensions/quick-reply/src/QuickReplySetLink.js +6 -14
  107. package/public/scripts/extensions/quick-reply/src/QuickReplySettings.js +2 -8
  108. package/public/scripts/extensions/quick-reply/src/SlashCommandHandler.js +14 -22
  109. package/public/scripts/extensions/quick-reply/src/ui/ButtonUi.js +6 -14
  110. package/public/scripts/extensions/quick-reply/src/ui/SettingsUi.js +30 -38
  111. package/public/scripts/extensions/quick-reply/src/ui/ctx/ContextMenu.js +0 -4
  112. package/public/scripts/extensions/quick-reply/src/ui/ctx/MenuItem.js +0 -3
  113. package/public/scripts/extensions/quick-reply/src/ui/ctx/SubMenu.js +0 -4
  114. package/public/scripts/extensions/regex/engine.js +63 -8
  115. package/public/scripts/extensions/regex/index.js +3 -2
  116. package/public/scripts/extensions/shared.js +74 -4
  117. package/public/scripts/extensions/stable-diffusion/index.js +1023 -135
  118. package/public/scripts/extensions/stable-diffusion/settings.html +97 -20
  119. package/public/scripts/extensions/token-counter/index.js +0 -1
  120. package/public/scripts/extensions/translate/index.js +2 -2
  121. package/public/scripts/extensions/tts/alltalk.js +0 -1
  122. package/public/scripts/extensions/tts/chatterbox.js +0 -3
  123. package/public/scripts/extensions/tts/chutes.js +233 -0
  124. package/public/scripts/extensions/tts/coqui.js +36 -41
  125. package/public/scripts/extensions/tts/cosyvoice.js +1 -7
  126. package/public/scripts/extensions/tts/edge.js +1 -1
  127. package/public/scripts/extensions/tts/electronhub.js +1 -1
  128. package/public/scripts/extensions/tts/elevenlabs.js +133 -108
  129. package/public/scripts/extensions/tts/google-native.js +0 -2
  130. package/public/scripts/extensions/tts/gpt-sovits-adapter.js +233 -0
  131. package/public/scripts/extensions/tts/gpt-sovits-v2.js +0 -8
  132. package/public/scripts/extensions/tts/gsvi.js +0 -9
  133. package/public/scripts/extensions/tts/index.js +123 -47
  134. package/public/scripts/extensions/tts/kokoro-worker.js +1 -1
  135. package/public/scripts/extensions/tts/minimax.js +0 -2
  136. package/public/scripts/extensions/tts/openai.js +0 -1
  137. package/public/scripts/extensions/tts/settings.html +11 -0
  138. package/public/scripts/extensions/tts/silerotts.js +0 -1
  139. package/public/scripts/extensions/tts/system.js +1 -2
  140. package/public/scripts/extensions/tts/vits.js +2 -4
  141. package/public/scripts/extensions/tts/volcengine.js +316 -0
  142. package/public/scripts/extensions/tts/xtts.js +0 -1
  143. package/public/scripts/extensions/vectors/index.js +327 -11
  144. package/public/scripts/extensions/vectors/settings.html +31 -0
  145. package/public/scripts/extensions-slashcommands.js +22 -37
  146. package/public/scripts/extensions.js +241 -13
  147. package/public/scripts/f-localStorage.js +0 -1
  148. package/public/scripts/filters.js +1 -3
  149. package/public/scripts/group-chats.js +485 -221
  150. package/public/scripts/horde.js +9 -10
  151. package/public/scripts/i18n.js +8 -2
  152. package/public/scripts/input-md-formatting.js +4 -5
  153. package/public/scripts/instruct-mode.js +9 -10
  154. package/public/scripts/itemized-prompts.js +43 -1
  155. package/public/scripts/kai-settings.js +1 -2
  156. package/public/scripts/keyboard.js +7 -0
  157. package/public/scripts/loader.js +49 -66
  158. package/public/scripts/logit-bias.js +4 -10
  159. package/public/scripts/logprobs.js +1 -0
  160. package/public/scripts/macros/definitions/chat-macros.js +148 -0
  161. package/public/scripts/macros/definitions/core-macros.js +481 -0
  162. package/public/scripts/macros/definitions/env-macros.js +205 -0
  163. package/public/scripts/macros/definitions/instruct-macros.js +76 -0
  164. package/public/scripts/macros/definitions/state-macros.js +57 -0
  165. package/public/scripts/macros/definitions/time-macros.js +151 -0
  166. package/public/scripts/macros/definitions/variable-macros.js +305 -0
  167. package/public/scripts/macros/engine/MacroBrowser.js +686 -0
  168. package/public/scripts/macros/engine/MacroCstWalker.js +1364 -0
  169. package/public/scripts/macros/engine/MacroDiagnostics.js +242 -0
  170. package/public/scripts/macros/engine/MacroEngine.js +416 -0
  171. package/public/scripts/macros/engine/MacroEnv.types.js +68 -0
  172. package/public/scripts/macros/engine/MacroEnvBuilder.js +211 -0
  173. package/public/scripts/macros/engine/MacroFlags.js +228 -0
  174. package/public/scripts/macros/engine/MacroLexer.js +393 -0
  175. package/public/scripts/macros/engine/MacroParser.js +227 -0
  176. package/public/scripts/macros/engine/MacroRegistry.js +829 -0
  177. package/public/scripts/macros/macro-system.js +84 -0
  178. package/public/scripts/macros.js +149 -20
  179. package/public/scripts/nai-settings.js +6 -12
  180. package/public/scripts/openai.js +1074 -817
  181. package/public/scripts/personas.js +38 -64
  182. package/public/scripts/popup.js +146 -10
  183. package/public/scripts/power-user.js +156 -237
  184. package/public/scripts/preset-manager.js +13 -13
  185. package/public/scripts/reasoning.js +170 -16
  186. package/public/scripts/request-compression.js +131 -0
  187. package/public/scripts/samplerSelect.js +2 -5
  188. package/public/scripts/scrapers.js +2 -2
  189. package/public/scripts/secrets.js +50 -5
  190. package/public/scripts/showdown-underscore.js +1 -1
  191. package/public/scripts/slash-commands/SlashCommand.js +3 -6
  192. package/public/scripts/slash-commands/SlashCommandArgument.js +1 -2
  193. package/public/scripts/slash-commands/SlashCommandAutoCompleteNameResult.js +13 -13
  194. package/public/scripts/slash-commands/SlashCommandBrowser.js +15 -15
  195. package/public/scripts/slash-commands/SlashCommandClosure.js +119 -17
  196. package/public/scripts/slash-commands/SlashCommandCommandAutoCompleteOption.js +0 -2
  197. package/public/scripts/slash-commands/SlashCommandCommonEnumsProvider.js +13 -1
  198. package/public/scripts/slash-commands/SlashCommandDebugController.js +4 -9
  199. package/public/scripts/slash-commands/SlashCommandEnumAutoCompleteOption.js +1 -2
  200. package/public/scripts/slash-commands/SlashCommandExecutionError.js +0 -1
  201. package/public/scripts/slash-commands/SlashCommandExecutor.js +6 -6
  202. package/public/scripts/slash-commands/SlashCommandParser.js +150 -62
  203. package/public/scripts/slash-commands/SlashCommandScope.js +3 -5
  204. package/public/scripts/slash-commands.js +1753 -165
  205. package/public/scripts/sse-stream.js +76 -30
  206. package/public/scripts/st-context.js +42 -5
  207. package/public/scripts/stats.js +1 -2
  208. package/public/scripts/swipe-picker.js +403 -0
  209. package/public/scripts/system-messages.js +58 -61
  210. package/public/scripts/tags.js +587 -74
  211. package/public/scripts/templates/itemizationText.html +11 -11
  212. package/public/scripts/templates/tabbyDownloader.html +1 -1
  213. package/public/scripts/templates/wandMenu.html +1 -0
  214. package/public/scripts/templates/welcomePanel.html +9 -1
  215. package/public/scripts/textgen-models.js +146 -20
  216. package/public/scripts/textgen-settings.js +238 -141
  217. package/public/scripts/tokenizers.js +64 -68
  218. package/public/scripts/tool-calling.js +73 -55
  219. package/public/scripts/user.js +13 -12
  220. package/public/scripts/util/AccountStorage.js +6 -0
  221. package/public/scripts/util/SimpleMutex.js +1 -2
  222. package/public/scripts/util/ThemeGenerator.js +322 -0
  223. package/public/scripts/utils.js +268 -58
  224. package/public/scripts/variables.js +13 -45
  225. package/public/scripts/welcome-screen.js +177 -12
  226. package/public/scripts/world-info.js +241 -39
  227. package/public/style.css +200 -22
  228. package/src/byaf.js +5 -6
  229. package/src/charx.js +399 -0
  230. package/src/command-line.js +14 -2
  231. package/src/config-init.js +1 -1
  232. package/src/constants.js +39 -0
  233. package/src/electron/Start.bat +1 -1
  234. package/src/electron/start.sh +1 -1
  235. package/src/endpoints/assets.js +47 -48
  236. package/src/endpoints/backends/chat-completions.js +940 -572
  237. package/src/endpoints/backends/kobold.js +1 -1
  238. package/src/endpoints/backends/text-completions.js +20 -12
  239. package/src/endpoints/backgrounds.js +120 -40
  240. package/src/endpoints/backups.js +73 -0
  241. package/src/endpoints/characters.js +58 -70
  242. package/src/endpoints/chats.js +308 -231
  243. package/src/endpoints/content-manager.js +24 -15
  244. package/src/endpoints/data-maid.js +13 -0
  245. package/src/endpoints/extensions.js +9 -7
  246. package/src/endpoints/google.js +3 -1
  247. package/src/endpoints/groups.js +109 -9
  248. package/src/endpoints/horde.js +1 -4
  249. package/src/endpoints/image-metadata.js +741 -0
  250. package/src/endpoints/images.js +3 -2
  251. package/src/endpoints/minimax.js +0 -2
  252. package/src/endpoints/novelai.js +3 -6
  253. package/src/endpoints/openai.js +333 -61
  254. package/src/endpoints/openrouter.js +111 -42
  255. package/src/endpoints/search.js +49 -2
  256. package/src/endpoints/secrets.js +11 -1
  257. package/src/endpoints/settings.js +12 -2
  258. package/src/endpoints/speech.js +300 -8
  259. package/src/endpoints/sprites.js +35 -16
  260. package/src/endpoints/stable-diffusion.js +482 -25
  261. package/src/endpoints/stats.js +67 -65
  262. package/src/endpoints/thumbnails.js +181 -121
  263. package/src/endpoints/tokenizers.js +22 -13
  264. package/src/endpoints/translate.js +9 -41
  265. package/src/endpoints/users-admin.js +16 -2
  266. package/src/endpoints/users-private.js +8 -1
  267. package/src/endpoints/vectors.js +32 -0
  268. package/src/endpoints/volcengine.js +136 -0
  269. package/src/endpoints/worldinfo.js +34 -0
  270. package/src/git/client.js +138 -0
  271. package/src/healthcheck.js +40 -0
  272. package/src/middleware/basicAuth.js +2 -1
  273. package/src/middleware/webpack-serve.js +7 -5
  274. package/src/prompt-converters.js +266 -32
  275. package/src/server-main.js +65 -19
  276. package/src/server-startup.js +67 -7
  277. package/src/users.js +28 -10
  278. package/src/util.js +293 -41
  279. package/src/vectors/extras-vectors.js +1 -2
  280. package/src/vectors/llamacpp-vectors.js +3 -2
  281. package/src/vectors/ollama-vectors.js +19 -23
  282. package/src/vectors/openai-vectors.js +45 -8
  283. package/src/vectors/vllm-vectors.js +3 -2
  284. package/start.sh +2 -18
  285. package/tests/.eslintrc.cjs +10 -2
  286. package/tests/frontend/MacroEngine.e2e.js +3411 -0
  287. package/tests/frontend/MacroEnvBuilder.e2e.js +499 -0
  288. package/tests/frontend/MacroLexer.e2e.js +1348 -0
  289. package/tests/frontend/MacroParser.e2e.js +975 -0
  290. package/tests/frontend/MacroRegistry.e2e.js +719 -0
  291. package/tests/frontend/MacroSlashCommands.e2e.js +177 -0
  292. package/tests/frontend/MacroStoryString.e2e.js +82 -0
  293. package/tests/frontend/MacrosParser.e2e.js +50 -0
  294. package/tests/frontend/frontent-test-utils.js +22 -0
  295. package/tests/jsconfig.json +5 -0
  296. package/tests/mock-server.test.js +34 -0
  297. package/tests/package-lock.json +79 -1426
  298. package/tests/package.json +5 -3
  299. package/tests/playwright.config.js +12 -0
  300. package/tests/sample.e2e.js +7 -5
  301. package/tests/util/mock-server.js +101 -0
  302. package/tests/util-pure.test.js +421 -0
  303. package/tests/util.test.js +5 -5
  304. package/webpack.config.js +64 -14
  305. package/public/scripts/templates/macros.html +0 -104
  306. package/tests/jest-e2e.config.json +0 -11
  307. package/tests/jest.setup.js +0 -2
package/.dockerignore CHANGED
@@ -1,17 +1,62 @@
1
+ # --- Git & CI ---
1
2
  .git
2
3
  .github
3
- .vscode
4
- node_modules
5
- npm-debug.log
6
- readme*
7
- Start.bat
8
- /dist
4
+ .gitignore
5
+
6
+ # --- Docker ---
7
+ /Dockerfile
8
+ /.dockerignore
9
+ /docker/docker-compose.yml
10
+ /docker/config
11
+ /docker/extensions
12
+ /docker/data
13
+ /docker/plugins
14
+ /docker/dist
15
+ /public/scripts/extensions/third-party
16
+
17
+ # --- Plugins (keep only package files) ---
18
+ /plugins/*
19
+ !/plugins/package.json
20
+ !/plugins/package-lock.json
21
+
22
+ # --- The Folders ---
9
23
  /backups
10
- cloudflared.exe
11
- access.log
12
- /data
13
24
  /cache
14
- .DS_Store
15
- /public/scripts/extensions/third-party
16
25
  /colab
26
+ /data
27
+ /dist
28
+ /node_modules
29
+ /tests
30
+
31
+ # --- Sensitive Info ---
32
+ **/.env*
33
+ **/*.pem
34
+ **/certs
35
+
36
+ # --- Documentation ---
37
+ readme*
38
+ *.md
39
+ Update-Instructions.txt
40
+
41
+ # --- OS & System Junk ---
42
+ **/.DS_Store
43
+ *.bat
44
+ *.cmd
45
+ *.exe
46
+ start.sh
47
+
48
+ # --- Dev Config ---
49
+ .editorconfig
50
+ .eslintrc.cjs
51
+ .eslintrc*
52
+ .vscode
53
+ **/jsconfig.json
54
+ .npmignore
17
55
  .gemini
56
+ replit.nix
57
+ .replit
58
+ .nomedia
59
+
60
+ # -- Logs & Temp ---
61
+ *.log
62
+ **/tmp
package/.eslintrc.cjs CHANGED
@@ -98,9 +98,32 @@ module.exports = {
98
98
  'no-cond-assign': 'error',
99
99
  'no-unneeded-ternary': 'error',
100
100
  'no-irregular-whitespace': ['error', { skipStrings: true, skipTemplates: true }],
101
-
101
+ 'dot-notation': ['error', { 'allowPattern': '[A-Z]\\w*$' }],
102
102
  // These rules should eventually be enabled.
103
103
  'no-async-promise-executor': 'off',
104
104
  'no-inner-declarations': 'off',
105
+ // Additional formatting rules based on codebase conventions
106
+ 'brace-style': ['error', '1tbs', { allowSingleLine: true }],
107
+ 'array-bracket-spacing': ['error', 'never'],
108
+ 'computed-property-spacing': ['error', 'never'],
109
+ 'block-spacing': ['error', 'always'],
110
+ 'keyword-spacing': ['error', { before: true, after: true }],
111
+ 'space-before-blocks': ['error', 'always'],
112
+ 'space-before-function-paren': ['error', { anonymous: 'always', named: 'never', asyncArrow: 'always' }],
113
+ 'space-in-parens': ['error', 'never'],
114
+ 'comma-spacing': ['error', { before: false, after: true }],
115
+ 'key-spacing': ['error', { beforeColon: false, afterColon: true }],
116
+ 'func-call-spacing': ['error', 'never'],
117
+ 'no-multiple-empty-lines': ['error', { max: 2, maxEOF: 1, maxBOF: 0 }],
118
+ 'padded-blocks': ['error', 'never'],
119
+ 'no-whitespace-before-property': 'error',
120
+ 'space-unary-ops': ['error', { words: true, nonwords: false }],
121
+ 'arrow-spacing': ['error', { before: true, after: true }],
122
+ 'template-curly-spacing': ['error', 'never'],
123
+ 'rest-spread-spacing': ['error', 'never'],
124
+ 'generator-star-spacing': ['error', { before: false, after: true }],
125
+ 'yield-star-spacing': ['error', { before: false, after: true }],
126
+ 'template-tag-spacing': ['error', 'never'],
127
+ 'switch-colon-spacing': ['error', { after: true, before: false }],
105
128
  },
106
129
  };
package/CONTRIBUTING.md CHANGED
@@ -12,32 +12,63 @@
12
12
  2. Fork this repository under your account.
13
13
  3. Clone the fork onto your machine.
14
14
  4. Open the cloned repository in the code editor.
15
- 5. Create a git branch (recommended).
15
+ 5. Create a git branch (recommended), review the [git book](https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control) if you haven't.
16
16
  6. Make your changes and test them locally.
17
17
  7. Commit the changes and push the branch to the remote repo.
18
- 8. Go to GitHub, and open a pull request, targeting the upstream branch.
18
+ 8. Go to GitHub, and open a pull request, targeting the appropriate upstream branch.
19
19
 
20
20
  ## Contribution guidelines
21
21
 
22
- 1. Our standards are pretty low, but make sure the code is not too ugly:
23
- - Run VS Code's autoformat when you're done.
24
- - Check with ESLint by running `npm run lint`, then fix the errors.
25
- - Use common sense and follow existing naming conventions.
26
- 2. Create pull requests for the staging branch, 99% of contributions should go there. That way people could test your code before the next stable release.
27
- 3. You can still send a pull request for release in the following scenarios:
28
- - Updating README.
29
- - Updating GitHub Actions.
30
- - Hotfixing a critical bug.
31
- 4. Project maintainers will test and can change your code before merging. To keep our workflow smooth, please ensure the following:
32
- - The "Allow edits from maintainers" option is checked.
33
- - Avoid force-pushing your branch once the PR is out of draft state.
34
- 5. To make sure that your contribution remains testable and reviewable, try not to exceed a soft limit of **200 lines of code** (both additions and deletions) per pull request. If you have more to contribute, split it into multiple pull requests. We can also consider creating a separate feature branch for more substantial changes, but please discuss it with the maintainers first.
35
- 6. Write at least somewhat meaningful PR descriptions and commit messages. There's no "right" way to do it, but the following may help with outlining a general structure:
36
- - What is the reason for a change?
37
- - What did you do to achieve this?
38
- - How would a reviewer test the change?
39
- 7. English is the primary language of communication in this project. Please use only English when writing commit messages, PR descriptions, comments and other text. This does not apply to contributions to localization files.
40
- 8. Mind the license. Your contributions will be licensed under the GNU Affero General Public License. If you don't know what that implies, consult your lawyer.
22
+ ### Maintain code quality
23
+
24
+ Our standards are pretty low, but make sure the code is not too ugly:
25
+
26
+ - Run VS Code's autoformat when you're done.
27
+ - Check with ESLint by running `npm run lint`, then fix the errors.
28
+ - Use common sense and follow existing naming conventions.
29
+
30
+ ### Use the correct target branch
31
+
32
+ Create pull requests for the `staging` branch, 99% of contributions should go there. That way people could test your code before the next stable release.
33
+
34
+ You can still send a pull request for `release` in the following scenarios:
35
+
36
+ - Updating README.
37
+ - Updating GitHub Actions.
38
+ - Hotfixing a critical bug.
39
+
40
+ Project maintainers will test and can change your code before merging. To keep our workflow smooth, please ensure the following:
41
+
42
+ - The "Allow edits from maintainers" option is checked.
43
+ - Avoid force-pushing your branch once the PR is out of draft state.
44
+
45
+ ### Make contributions small and testable
46
+
47
+ To make sure that your contribution remains testable and reviewable, try not to exceed a soft limit of **200 lines of code** (both additions and deletions) per pull request. If you have more to contribute, split it into multiple pull requests.
48
+
49
+ We can also consider creating a separate feature branch for more substantial changes, but please discuss it with the maintainers first. For example:
50
+
51
+ - Leave the main larger PR as a draft so it can be used to discuss the implementation.
52
+ - Split each group of functions or features into a ~200 line PR so it can be properly reviewed and merged to staging or a feature branch.
53
+ - If there are large codependent changes that cannot be split, start with the most utilized dependencies and stub dependent functions.
54
+ - Each will be reviewed and tested one by one, merging into the feature branch as they're ready.
55
+ - Do not create all branches in advance, as subsequent changes made in previous commits as a result of test/review may create a lot of merge conflicts.
56
+
57
+ ### Provide clear descriptions of your changes
58
+
59
+ Write at least somewhat meaningful PR descriptions and commit messages. There's no "right" way to do it, but the following may help with outlining a general structure:
60
+
61
+ - What is the reason for a change?
62
+ - What did you do to achieve this?
63
+ - How would a reviewer test the change?
64
+
65
+ ### We (likely) don't speak your language
66
+
67
+ English is the primary language of communication in this project. Please use only English when writing commit messages, PR descriptions, comments and other text. This does not apply to contributions to localization files.
68
+
69
+ ### Legal stuff
70
+
71
+ Mind the license. Your contributions will be licensed under the GNU Affero General Public License. If you don't know what that implies, consult your lawyer.
41
72
 
42
73
  ## Use of AI coding assistance tools ("Vibe Coding")
43
74
 
package/Dockerfile CHANGED
@@ -1,44 +1,48 @@
1
- FROM node:lts-alpine3.22
1
+ FROM node:lts-alpine3.23
2
2
 
3
3
  # Arguments
4
4
  ARG APP_HOME=/home/node/app
5
5
 
6
6
  # Install system dependencies
7
- RUN apk add --no-cache gcompat tini git git-lfs
7
+ # "Don't rely on the base image for tools; if you call it, you install it." ;)
8
+ RUN apk add --no-cache gcompat tini git git-lfs su-exec shadow dos2unix
8
9
 
9
- # Create app directory
10
+ # Create app directory and set ownership
10
11
  WORKDIR ${APP_HOME}
12
+ RUN chown node:node ${APP_HOME}
11
13
 
12
14
  # Set NODE_ENV to production
13
15
  ENV NODE_ENV=production
14
16
 
15
- # Bundle app source
16
- COPY . ./
17
+ # Bundle app source and set ownership
18
+ COPY --chown=node:node . ./
17
19
 
18
20
  RUN \
19
21
  echo "*** Install npm packages ***" && \
20
- npm i --no-audit --no-fund --loglevel=error --no-progress --omit=dev && npm cache clean --force
22
+ npm ci --no-audit --no-fund --loglevel=error --no-progress --omit=dev && npm cache clean --force
21
23
 
22
- # Create config directory and link config.yaml
24
+ # Create config directory and link config.yaml. Added hardcoded dirs(constants.js?)
25
+ # that must be present for Non-Root Mode and volumeless docker runs.
23
26
  RUN \
24
27
  rm -f "config.yaml" || true && \
25
- ln -s "./config/config.yaml" "config.yaml" || true && \
26
- mkdir "config" || true
28
+ mkdir -p config data plugins public/scripts/extensions/third-party backups && \
29
+ chown -R node:node config data plugins public/scripts/extensions/third-party backups && \
30
+ ln -s "./config/config.yaml" "config.yaml"
27
31
 
28
32
  # Pre-compile public libraries
29
33
  RUN \
30
34
  echo "*** Run Webpack ***" && \
31
35
  node "./docker/build-lib.js"
32
36
 
33
- # Set the entrypoint script
37
+ # Set the entrypoint script and cleanup
34
38
  RUN \
35
39
  echo "*** Cleanup ***" && \
36
40
  mv "./docker/docker-entrypoint.sh" "./" && \
37
- rm -rf "./docker" && \
38
41
  echo "*** Make docker-entrypoint.sh executable ***" && \
39
42
  chmod +x "./docker-entrypoint.sh" && \
40
43
  echo "*** Convert line endings to Unix format ***" && \
41
- dos2unix "./docker-entrypoint.sh"
44
+ dos2unix "./docker-entrypoint.sh" && \
45
+ rm -rf "./docker"
42
46
 
43
47
  # Fix extension repos permissions
44
48
  RUN git config --global --add safe.directory "*"
package/Start.bat CHANGED
@@ -1,7 +1,7 @@
1
1
  @echo off
2
2
  pushd %~dp0
3
3
  set NODE_ENV=production
4
- call npm install --no-audit --no-fund --loglevel=error --no-progress --omit=dev
4
+ call npm install --no-save --no-audit --no-fund --loglevel=error --no-progress --omit=dev
5
5
  node server.js %*
6
6
  pause
7
7
  popd
@@ -20,7 +20,7 @@ if %errorlevel% neq 0 (
20
20
  )
21
21
  )
22
22
  set NODE_ENV=production
23
- call npm install --no-audit --no-fund --loglevel=error --no-progress --omit=dev
23
+ call npm install --no-save --no-audit --no-fund --loglevel=error --no-progress --omit=dev
24
24
  node server.js %*
25
25
  :end
26
26
  pause
@@ -102,7 +102,7 @@ if %errorlevel% neq 0 (
102
102
 
103
103
  echo Installing npm packages and starting server
104
104
  set NODE_ENV=production
105
- call npm install --no-audit --no-fund --loglevel=error --no-progress --omit=dev
105
+ call npm install --no-save --no-audit --no-fund --loglevel=error --no-progress --omit=dev
106
106
  node server.js %*
107
107
 
108
108
  :end
package/config.yaml CHANGED
@@ -38,6 +38,9 @@ browserLaunch:
38
38
  avoidLocalhost: false
39
39
  # Server port
40
40
  port: 8000
41
+ # Interval in seconds to write a heartbeat file. Set to 0 to disable.
42
+ # This is used primarily for Docker healthchecks.
43
+ heartbeatInterval: 0
41
44
  # -- SSL options --
42
45
  ssl:
43
46
  # Enable SSL/TLS encryption
@@ -68,6 +71,25 @@ basicAuthUser:
68
71
  password: "password"
69
72
  # Enables CORS proxy middleware
70
73
  enableCorsProxy: false
74
+ # CORS settings (applied to all routes)
75
+ cors:
76
+ # Enable or disable CORS middleware
77
+ enabled: true
78
+ # Allowed origins. Use "null" to match the default browser file origin.
79
+ # You can set "*" to allow any origin, or a list of allowed origins.
80
+ origin:
81
+ - "null"
82
+ # Allowed methods
83
+ methods:
84
+ - "OPTIONS"
85
+ # Allowed request headers (optional)
86
+ allowedHeaders: []
87
+ # Exposed response headers (optional)
88
+ exposedHeaders: []
89
+ # Allow credentials (cookies, authorization headers)
90
+ credentials: false
91
+ # Preflight cache max age in seconds (optional)
92
+ maxAge: null
71
93
  # -- REQUEST PROXY CONFIGURATION --
72
94
  requestProxy:
73
95
  # If a proxy is enabled, all outgoing HTTP/HTTPS requests will be routed through it.
@@ -143,6 +165,8 @@ rateLimiting:
143
165
 
144
166
  ## BACKUP CONFIGURATION
145
167
  backups:
168
+ # Allow users to create a full backup archive of their data
169
+ allowFullDataBackup: true
146
170
  # Common settings for all backup types
147
171
  common:
148
172
  # Number of backups to keep for each chat and settings file
@@ -180,6 +204,16 @@ performance:
180
204
  memoryCacheCapacity: '100mb'
181
205
  # Enables disk caching for character cards. Improves performances with large card libraries.
182
206
  useDiskCache: true
207
+ # Configures gzip compression for client requests with large payloads (e.g. settings or chat saves).
208
+ requestCompression:
209
+ # Enable request compression.
210
+ enabled: false
211
+ # Minimum payload size to trigger compression. Set to 0 to compress all requests regardless of size.
212
+ minPayloadSize: '256kb'
213
+ # Hard upper payload size limit for compression. Set to 0 to allow compression of any size.
214
+ maxPayloadSize: '8mb'
215
+ # Timeout for request compression in milliseconds.
216
+ timeout: 4000
183
217
 
184
218
  # CACHE BUSTER CONFIGURATION
185
219
  # IMPORTANT: Requires localhost or a domain with HTTPS, otherwise will not work!
@@ -200,7 +234,6 @@ whitelistImportDomains:
200
234
  - cdn.discordapp.com
201
235
  - files.catbox.moe
202
236
  - raw.githubusercontent.com
203
- - char-archive.evulid.cc
204
237
  # API request overrides (for KoboldAI and Text Completion APIs)
205
238
  ## Note: host includes the port number if it's not the default (80 or 443)
206
239
  ## Format is an array of objects:
@@ -229,6 +262,13 @@ extensions:
229
262
  speechToText: Xenova/whisper-small
230
263
  textToSpeech: Xenova/speecht5_tts
231
264
 
265
+ # Git backend for plugin/extension repository operations.
266
+ # - Use "auto" to prefer system git, falling back to the integrated backend
267
+ # - Use "system" to force system backend
268
+ # - Use "builtin" to force integrated backend
269
+ git:
270
+ backend: auto
271
+
232
272
  # Additional model tokenizers can be downloaded on demand.
233
273
  # Disabling will fallback to another locally available tokenizer.
234
274
  enableDownloadableTokenizers: true
@@ -265,14 +305,14 @@ ollama:
265
305
  # -- ANTHROPIC CLAUDE API CONFIGURATION --
266
306
  claude:
267
307
  # Enables caching of the system prompt (if supported).
268
- # https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching
308
+ # https://platform.claude.com/docs/en/build-with-claude/prompt-caching
269
309
  # -- IMPORTANT! --
270
310
  # Use only when the prompt before the chat history is static and doesn't change between requests
271
311
  # (e.g {{random}} macro or lorebooks not as in-chat injections).
272
312
  # Otherwise, you'll just waste money on cache misses.
273
313
  enableSystemPromptCache: false
274
314
  # Enables caching of the message history at depth (if supported).
275
- # https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching
315
+ # https://platform.claude.com/docs/en/build-with-claude/prompt-caching
276
316
  # -- IMPORTANT! --
277
317
  # Use with caution. Behavior may be unpredictable and no guarantees can or will be made.
278
318
  # Set to an integer to specify the desired depth. 0 (which does NOT include the prefill)
@@ -283,10 +323,26 @@ claude:
283
323
  ## 5m: base price x 1.25
284
324
  ## 1h: base price x 2
285
325
  extendedTTL: false
326
+ # Enables adaptive thinking for supported models (Opus 4.6+).
327
+ # Disable to enforce legacy thinking mode (with thinking budget).
328
+ # https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking
329
+ enableAdaptiveThinking: false
286
330
  # -- GOOGLE GEMINI API CONFIGURATION --
287
331
  gemini:
288
332
  # API endpoint version ("v1beta" or "v1alpha")
289
333
  apiVersion: 'v1beta'
334
+ # Adds thought signatures to requests (if available). Only for Gemini 3 and above.
335
+ thoughtSignatures: true
336
+ # Enables caching of the system prompt (if supported). Only for OpenRouter.
337
+ # -- IMPORTANT! --
338
+ # Use only when the prompt before the chat history is static and doesn't change between requests
339
+ # (e.g {{random}} macro or lorebooks not as in-chat injections).
340
+ # Otherwise, you'll just waste money on cache misses.
341
+ enableSystemPromptCache: false
342
+ # https://ai.google.dev/gemini-api/docs/imagen#imagen-configuration
343
+ image:
344
+ # Leave empty to use the API-default value.
345
+ personGeneration: 'allow_adult'
290
346
  # -- SERVER PLUGIN CONFIGURATION --
291
347
  enableServerPlugins: false
292
348
  # Attempt to automatically update server plugins on startup
@@ -38,6 +38,9 @@ browserLaunch:
38
38
  avoidLocalhost: false
39
39
  # Server port
40
40
  port: 8000
41
+ # Interval in seconds to write a heartbeat file. Set to 0 to disable.
42
+ # This is used primarily for Docker healthchecks.
43
+ heartbeatInterval: 0
41
44
  # -- SSL options --
42
45
  ssl:
43
46
  # Enable SSL/TLS encryption
@@ -68,6 +71,25 @@ basicAuthUser:
68
71
  password: "password"
69
72
  # Enables CORS proxy middleware
70
73
  enableCorsProxy: false
74
+ # CORS settings (applied to all routes)
75
+ cors:
76
+ # Enable or disable CORS middleware
77
+ enabled: true
78
+ # Allowed origins. Use "null" to match the default browser file origin.
79
+ # You can set "*" to allow any origin, or a list of allowed origins.
80
+ origin:
81
+ - "null"
82
+ # Allowed methods
83
+ methods:
84
+ - "OPTIONS"
85
+ # Allowed request headers (optional)
86
+ allowedHeaders: []
87
+ # Exposed response headers (optional)
88
+ exposedHeaders: []
89
+ # Allow credentials (cookies, authorization headers)
90
+ credentials: false
91
+ # Preflight cache max age in seconds (optional)
92
+ maxAge: null
71
93
  # -- REQUEST PROXY CONFIGURATION --
72
94
  requestProxy:
73
95
  # If a proxy is enabled, all outgoing HTTP/HTTPS requests will be routed through it.
@@ -143,6 +165,8 @@ rateLimiting:
143
165
 
144
166
  ## BACKUP CONFIGURATION
145
167
  backups:
168
+ # Allow users to create a full backup archive of their data
169
+ allowFullDataBackup: true
146
170
  # Common settings for all backup types
147
171
  common:
148
172
  # Number of backups to keep for each chat and settings file
@@ -180,6 +204,16 @@ performance:
180
204
  memoryCacheCapacity: '100mb'
181
205
  # Enables disk caching for character cards. Improves performances with large card libraries.
182
206
  useDiskCache: true
207
+ # Configures gzip compression for client requests with large payloads (e.g. settings or chat saves).
208
+ requestCompression:
209
+ # Enable request compression.
210
+ enabled: false
211
+ # Minimum payload size to trigger compression. Set to 0 to compress all requests regardless of size.
212
+ minPayloadSize: '256kb'
213
+ # Hard upper payload size limit for compression. Set to 0 to allow compression of any size.
214
+ maxPayloadSize: '8mb'
215
+ # Timeout for request compression in milliseconds.
216
+ timeout: 4000
183
217
 
184
218
  # CACHE BUSTER CONFIGURATION
185
219
  # IMPORTANT: Requires localhost or a domain with HTTPS, otherwise will not work!
@@ -200,7 +234,6 @@ whitelistImportDomains:
200
234
  - cdn.discordapp.com
201
235
  - files.catbox.moe
202
236
  - raw.githubusercontent.com
203
- - char-archive.evulid.cc
204
237
  # API request overrides (for KoboldAI and Text Completion APIs)
205
238
  ## Note: host includes the port number if it's not the default (80 or 443)
206
239
  ## Format is an array of objects:
@@ -229,6 +262,13 @@ extensions:
229
262
  speechToText: Xenova/whisper-small
230
263
  textToSpeech: Xenova/speecht5_tts
231
264
 
265
+ # Git backend for plugin/extension repository operations.
266
+ # - Use "auto" to prefer system git, falling back to the integrated backend
267
+ # - Use "system" to force system backend
268
+ # - Use "builtin" to force integrated backend
269
+ git:
270
+ backend: auto
271
+
232
272
  # Additional model tokenizers can be downloaded on demand.
233
273
  # Disabling will fallback to another locally available tokenizer.
234
274
  enableDownloadableTokenizers: true
@@ -265,14 +305,14 @@ ollama:
265
305
  # -- ANTHROPIC CLAUDE API CONFIGURATION --
266
306
  claude:
267
307
  # Enables caching of the system prompt (if supported).
268
- # https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching
308
+ # https://platform.claude.com/docs/en/build-with-claude/prompt-caching
269
309
  # -- IMPORTANT! --
270
310
  # Use only when the prompt before the chat history is static and doesn't change between requests
271
311
  # (e.g {{random}} macro or lorebooks not as in-chat injections).
272
312
  # Otherwise, you'll just waste money on cache misses.
273
313
  enableSystemPromptCache: false
274
314
  # Enables caching of the message history at depth (if supported).
275
- # https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching
315
+ # https://platform.claude.com/docs/en/build-with-claude/prompt-caching
276
316
  # -- IMPORTANT! --
277
317
  # Use with caution. Behavior may be unpredictable and no guarantees can or will be made.
278
318
  # Set to an integer to specify the desired depth. 0 (which does NOT include the prefill)
@@ -283,10 +323,26 @@ claude:
283
323
  ## 5m: base price x 1.25
284
324
  ## 1h: base price x 2
285
325
  extendedTTL: false
326
+ # Enables adaptive thinking for supported models (Opus 4.6+).
327
+ # Disable to enforce legacy thinking mode (with thinking budget).
328
+ # https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking
329
+ enableAdaptiveThinking: false
286
330
  # -- GOOGLE GEMINI API CONFIGURATION --
287
331
  gemini:
288
332
  # API endpoint version ("v1beta" or "v1alpha")
289
333
  apiVersion: 'v1beta'
334
+ # Adds thought signatures to requests (if available). Only for Gemini 3 and above.
335
+ thoughtSignatures: true
336
+ # Enables caching of the system prompt (if supported). Only for OpenRouter.
337
+ # -- IMPORTANT! --
338
+ # Use only when the prompt before the chat history is static and doesn't change between requests
339
+ # (e.g {{random}} macro or lorebooks not as in-chat injections).
340
+ # Otherwise, you'll just waste money on cache misses.
341
+ enableSystemPromptCache: false
342
+ # https://ai.google.dev/gemini-api/docs/imagen#imagen-configuration
343
+ image:
344
+ # Leave empty to use the API-default value.
345
+ personGeneration: 'allow_adult'
290
346
  # -- SERVER PLUGIN CONFIGURATION --
291
347
  enableServerPlugins: false
292
348
  # Attempt to automatically update server plugins on startup
@@ -638,5 +638,9 @@
638
638
  {
639
639
  "filename": "presets/reasoning/OpenAI Harmony.json",
640
640
  "type": "reasoning"
641
+ },
642
+ {
643
+ "filename": "presets/reasoning/Think XML.json",
644
+ "type": "reasoning"
641
645
  }
642
646
  ]
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "input_sequence": "{{[INPUT]}}",
3
- "output_sequence": "{{[OUPUT]}}",
3
+ "output_sequence": "{{[OUTPUT]}}",
4
4
  "last_output_sequence": "",
5
5
  "system_sequence": "{{[SYSTEM]}}",
6
6
  "stop_sequence": "",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "input_sequence": "[INST]",
3
- "output_sequence": " ",
3
+ "output_sequence": "",
4
4
  "last_output_sequence": "",
5
5
  "system_sequence": "[SYSTEM_PROMPT]",
6
6
  "stop_sequence": "</s>",
@@ -8,6 +8,8 @@
8
8
  "openrouter_sort_models": "alphabetically",
9
9
  "ai21_model": "jamba-large",
10
10
  "mistralai_model": "mistral-large-latest",
11
+ "chutes_model": "deepseek-ai/DeepSeek-V3-0324",
12
+ "chutes_sort_models": "alphabetically",
11
13
  "electronhub_model": "gpt-4o-mini",
12
14
  "electronhub_sort_models": "alphabetically",
13
15
  "electronhub_group_models": false,
@@ -28,7 +30,6 @@
28
30
  "repetition_penalty": 1,
29
31
  "openai_max_context": 4095,
30
32
  "openai_max_tokens": 300,
31
- "wrap_in_quotes": false,
32
33
  "names_behavior": 0,
33
34
  "send_if_empty": "",
34
35
  "impersonation_prompt": "[Write your next reply from the point of view of {{user}}, using the chat history so far as a guideline for the writing style of {{user}}. Don't write as {{char}} or system. Don't describe actions of {{char}}.]",
@@ -231,9 +232,9 @@
231
232
  "show_external_models": false,
232
233
  "assistant_prefill": "",
233
234
  "assistant_impersonation": "",
234
- "claude_use_sysprompt": false,
235
+ "use_sysprompt": false,
235
236
  "squash_system_messages": false,
236
- "image_inlining": false,
237
+ "media_inlining": true,
237
238
  "bypass_status_check": false,
238
239
  "continue_prefill": false,
239
240
  "continue_postfix": " ",
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "Think XML",
3
+ "prefix": "<think>",
4
+ "suffix": "</think>",
5
+ "separator": "\n"
6
+ }
@@ -45,6 +45,7 @@
45
45
  "negative_prompt": "",
46
46
  "grammar_string": "",
47
47
  "json_schema": null,
48
+ "json_schema_allow_empty": false,
48
49
  "banned_tokens": "",
49
50
  "sampler_priority": [
50
51
  "repetition_penalty",
@@ -45,6 +45,7 @@
45
45
  "negative_prompt": "",
46
46
  "grammar_string": "",
47
47
  "json_schema": null,
48
+ "json_schema_allow_empty": false,
48
49
  "banned_tokens": "",
49
50
  "sampler_priority": [
50
51
  "repetition_penalty",
@@ -45,6 +45,7 @@
45
45
  "negative_prompt": "",
46
46
  "grammar_string": "",
47
47
  "json_schema": null,
48
+ "json_schema_allow_empty": false,
48
49
  "banned_tokens": "",
49
50
  "sampler_priority": [
50
51
  "repetition_penalty",
@@ -45,6 +45,7 @@
45
45
  "negative_prompt": "",
46
46
  "grammar_string": "",
47
47
  "json_schema": null,
48
+ "json_schema_allow_empty": false,
48
49
  "banned_tokens": "",
49
50
  "sampler_priority": [
50
51
  "repetition_penalty",
@@ -45,6 +45,7 @@
45
45
  "negative_prompt": "",
46
46
  "grammar_string": "",
47
47
  "json_schema": null,
48
+ "json_schema_allow_empty": false,
48
49
  "banned_tokens": "",
49
50
  "sampler_priority": [
50
51
  "repetition_penalty",
@@ -45,6 +45,7 @@
45
45
  "negative_prompt": "",
46
46
  "grammar_string": "",
47
47
  "json_schema": null,
48
+ "json_schema_allow_empty": false,
48
49
  "banned_tokens": "",
49
50
  "sampler_priority": [
50
51
  "repetition_penalty",