sillytavern 1.4.1

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 (259) hide show
  1. package/.dockerignore +4 -0
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +35 -0
  3. package/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  4. package/.github/workflows/npm-publish.yml +32 -0
  5. package/Dockerfile +49 -0
  6. package/Start.bat +3 -0
  7. package/colab/GPU.ipynb +339 -0
  8. package/colab/extras_server.py +40 -0
  9. package/colab/globals.py +2 -0
  10. package/colab/models.py +77 -0
  11. package/docker/docker-compose.yml +12 -0
  12. package/docker/docker-entrypoint.sh +28 -0
  13. package/faq.md +208 -0
  14. package/package.json +49 -0
  15. package/poe-client.js +638 -0
  16. package/poe-test.js +21 -0
  17. package/poe_graphql/AddHumanMessageMutation.graphql +52 -0
  18. package/poe_graphql/AddMessageBreakMutation.graphql +17 -0
  19. package/poe_graphql/AutoSubscriptionMutation.graphql +7 -0
  20. package/poe_graphql/BioFragment.graphql +8 -0
  21. package/poe_graphql/ChatAddedSubscription.graphql +5 -0
  22. package/poe_graphql/ChatFragment.graphql +6 -0
  23. package/poe_graphql/ChatListPaginationQuery.graphql +316 -0
  24. package/poe_graphql/ChatPaginationQuery.graphql +26 -0
  25. package/poe_graphql/ChatViewQuery.graphql +8 -0
  26. package/poe_graphql/DeleteHumanMessagesMutation.graphql +7 -0
  27. package/poe_graphql/DeleteMessageMutation.graphql +7 -0
  28. package/poe_graphql/HandleFragment.graphql +8 -0
  29. package/poe_graphql/LoginWithVerificationCodeMutation.graphql +13 -0
  30. package/poe_graphql/MessageAddedSubscription.graphql +115 -0
  31. package/poe_graphql/MessageDeletedSubscription.graphql +8 -0
  32. package/poe_graphql/MessageFragment.graphql +13 -0
  33. package/poe_graphql/MessageRemoveVoteMutation.graphql +7 -0
  34. package/poe_graphql/MessageSetVoteMutation.graphql +7 -0
  35. package/poe_graphql/SendVerificationCodeForLoginMutation.graphql +12 -0
  36. package/poe_graphql/ShareMessagesMutation.graphql +9 -0
  37. package/poe_graphql/SignupWithVerificationCodeMutation.graphql +13 -0
  38. package/poe_graphql/StaleChatUpdateMutation.graphql +7 -0
  39. package/poe_graphql/SubscriptionsMutation.graphql +9 -0
  40. package/poe_graphql/SummarizePlainPostQuery.graphql +3 -0
  41. package/poe_graphql/SummarizeQuotePostQuery.graphql +3 -0
  42. package/poe_graphql/SummarizeSharePostQuery.graphql +3 -0
  43. package/poe_graphql/UserSnippetFragment.graphql +14 -0
  44. package/poe_graphql/ViewerInfoQuery.graphql +21 -0
  45. package/poe_graphql/ViewerMessageLimitUpdatedSubscription.graphql +81 -0
  46. package/poe_graphql/ViewerStateFragment.graphql +30 -0
  47. package/poe_graphql/ViewerStateUpdatedSubscription.graphql +63 -0
  48. package/public/KoboldAI Settings/Ace of Spades 13B.settings +22 -0
  49. package/public/KoboldAI Settings/Adventurer-NeoX-20B-Erebus.settings +54 -0
  50. package/public/KoboldAI Settings/Basic Coherence 13B.settings +22 -0
  51. package/public/KoboldAI Settings/Best Guess 6B.settings +22 -0
  52. package/public/KoboldAI Settings/Calibrated-Pygmalion-6b.settings +47 -0
  53. package/public/KoboldAI Settings/Classic-Pygmalion-2.7b.settings +46 -0
  54. package/public/KoboldAI Settings/Classic-Pygmalion-6b.settings +47 -0
  55. package/public/KoboldAI Settings/Coherent Creativity 6B.settings +22 -0
  56. package/public/KoboldAI Settings/Default-TavernAI.settings +22 -0
  57. package/public/KoboldAI Settings/DragonSlayer-Pygmalion-6b.settings +47 -0
  58. package/public/KoboldAI Settings/GPU-Pygmalion-6b.settings +47 -0
  59. package/public/KoboldAI Settings/Genesis 13B.settings +22 -0
  60. package/public/KoboldAI Settings/Godlike.settings +22 -0
  61. package/public/KoboldAI Settings/Good Winds.settings +22 -0
  62. package/public/KoboldAI Settings/Lancer-OPT-2.7B-Erebus.settings +54 -0
  63. package/public/KoboldAI Settings/Liminal Drift.settings +22 -0
  64. package/public/KoboldAI Settings/Low Rider 13B.settings +22 -0
  65. package/public/KoboldAI Settings/Luna Moth 6B.settings +22 -0
  66. package/public/KoboldAI Settings/Mayday.settings +22 -0
  67. package/public/KoboldAI Settings/Ouroboros.settings +22 -0
  68. package/public/KoboldAI Settings/Pleasing Results 6B.settings +22 -0
  69. package/public/KoboldAI Settings/Pro Writer 13B.settings +22 -0
  70. package/public/KoboldAI Settings/RA - Pygmalion-1.3b.settings +46 -0
  71. package/public/KoboldAI Settings/Storywriter 6B.settings +22 -0
  72. package/public/NovelAI Settings/Classic-Euterpe.settings +14 -0
  73. package/public/NovelAI Settings/Classic-Krake.settings +14 -0
  74. package/public/OpenAI Settings/Default.settings +15 -0
  75. package/public/TextGen Settings/Beam Search.settings +15 -0
  76. package/public/TextGen Settings/Contrastive Search.settings +15 -0
  77. package/public/TextGen Settings/Default.settings +15 -0
  78. package/public/TextGen Settings/Deterministic.settings +15 -0
  79. package/public/TextGen Settings/Kobold (Godlike).settings +15 -0
  80. package/public/TextGen Settings/Kobold (Liminal Drift).settings +15 -0
  81. package/public/TextGen Settings/Naive.settings +15 -0
  82. package/public/TextGen Settings/NovelAI (Best Guess).settings +15 -0
  83. package/public/TextGen Settings/NovelAI (Decadence).settings +15 -0
  84. package/public/TextGen Settings/NovelAI (Genesis).settings +15 -0
  85. package/public/TextGen Settings/NovelAI (Lycaenidae).settings +15 -0
  86. package/public/TextGen Settings/NovelAI (Ouroboros).settings +15 -0
  87. package/public/TextGen Settings/NovelAI (Pleasing Results).settings +15 -0
  88. package/public/TextGen Settings/NovelAI (Sphinx Moth).settings +15 -0
  89. package/public/TextGen Settings/NovelAI (Storywriter).settings +15 -0
  90. package/public/TextGen Settings/Pygmalion.settings +15 -0
  91. package/public/css/fontawesome.css +8488 -0
  92. package/public/css/notes.css +46 -0
  93. package/public/css/solid.css +24 -0
  94. package/public/favicon.ico +0 -0
  95. package/public/img/No-Image-Placeholder.svg +309 -0
  96. package/public/img/addbg3.png +0 -0
  97. package/public/img/ai4.png +0 -0
  98. package/public/img/apple-icon-114x114.png +0 -0
  99. package/public/img/apple-icon-144x144.png +0 -0
  100. package/public/img/apple-icon-57x57.png +0 -0
  101. package/public/img/apple-icon-72x72.png +0 -0
  102. package/public/img/book2.png +0 -0
  103. package/public/img/default-expressions/admiration.png +0 -0
  104. package/public/img/default-expressions/amusement.png +0 -0
  105. package/public/img/default-expressions/anger.png +0 -0
  106. package/public/img/default-expressions/annoyance.png +0 -0
  107. package/public/img/default-expressions/approval.png +0 -0
  108. package/public/img/default-expressions/caring.png +0 -0
  109. package/public/img/default-expressions/confusion.png +0 -0
  110. package/public/img/default-expressions/curiosity.png +0 -0
  111. package/public/img/default-expressions/desire.png +0 -0
  112. package/public/img/default-expressions/desire1.png +0 -0
  113. package/public/img/default-expressions/desire2.png +0 -0
  114. package/public/img/default-expressions/disappointment.png +0 -0
  115. package/public/img/default-expressions/disapproval.png +0 -0
  116. package/public/img/default-expressions/disgust.png +0 -0
  117. package/public/img/default-expressions/embarrassment.png +0 -0
  118. package/public/img/default-expressions/excitement.png +0 -0
  119. package/public/img/default-expressions/fear.png +0 -0
  120. package/public/img/default-expressions/gratitude.png +0 -0
  121. package/public/img/default-expressions/grief.png +0 -0
  122. package/public/img/default-expressions/joy.png +0 -0
  123. package/public/img/default-expressions/love.png +0 -0
  124. package/public/img/default-expressions/nervousness.png +0 -0
  125. package/public/img/default-expressions/neutral.png +0 -0
  126. package/public/img/default-expressions/optimism.png +0 -0
  127. package/public/img/default-expressions/pride.png +0 -0
  128. package/public/img/default-expressions/realization.png +0 -0
  129. package/public/img/default-expressions/relief.png +0 -0
  130. package/public/img/default-expressions/remorse.png +0 -0
  131. package/public/img/default-expressions/sadness.png +0 -0
  132. package/public/img/default-expressions/surprise.png +0 -0
  133. package/public/img/five.png +0 -0
  134. package/public/img/times-circle.svg +1 -0
  135. package/public/img/you.png +0 -0
  136. package/public/index.html +1899 -0
  137. package/public/notes/1.html +44 -0
  138. package/public/notes/1.png +0 -0
  139. package/public/notes/10.html +20 -0
  140. package/public/notes/11.html +33 -0
  141. package/public/notes/12.html +27 -0
  142. package/public/notes/13.html +29 -0
  143. package/public/notes/13_1.html +24 -0
  144. package/public/notes/13_2.html +25 -0
  145. package/public/notes/13_3.html +89 -0
  146. package/public/notes/14.html +30 -0
  147. package/public/notes/2.html +37 -0
  148. package/public/notes/2.png +0 -0
  149. package/public/notes/3.html +37 -0
  150. package/public/notes/4.html +105 -0
  151. package/public/notes/6.html +33 -0
  152. package/public/notes/7.html +40 -0
  153. package/public/notes/8.html +19 -0
  154. package/public/notes/9.html +46 -0
  155. package/public/notes/advanced_formatting.html +91 -0
  156. package/public/notes/group_reply_strategy.html +63 -0
  157. package/public/notes/message_sound.html +33 -0
  158. package/public/notes/multigen.html +36 -0
  159. package/public/notes/oai_api_key.html +37 -0
  160. package/public/notes/textgen_streaming.html +29 -0
  161. package/public/notes/token-limits.html +68 -0
  162. package/public/script.js +5131 -0
  163. package/public/scripts/RossAscends-mods.js +750 -0
  164. package/public/scripts/bookmarks.js +130 -0
  165. package/public/scripts/extensions/backgrounds/index.js +129 -0
  166. package/public/scripts/extensions/backgrounds/manifest.json +11 -0
  167. package/public/scripts/extensions/backgrounds/style.css +45 -0
  168. package/public/scripts/extensions/caption/index.js +117 -0
  169. package/public/scripts/extensions/caption/manifest.json +13 -0
  170. package/public/scripts/extensions/caption/style.css +23 -0
  171. package/public/scripts/extensions/dice/droll.js +108 -0
  172. package/public/scripts/extensions/dice/index.js +96 -0
  173. package/public/scripts/extensions/dice/manifest.json +11 -0
  174. package/public/scripts/extensions/dice/style.css +26 -0
  175. package/public/scripts/extensions/expressions/index.js +387 -0
  176. package/public/scripts/extensions/expressions/manifest.json +13 -0
  177. package/public/scripts/extensions/expressions/style.css +115 -0
  178. package/public/scripts/extensions/floating-prompt/index.js +151 -0
  179. package/public/scripts/extensions/floating-prompt/manifest.json +11 -0
  180. package/public/scripts/extensions/floating-prompt/style.css +19 -0
  181. package/public/scripts/extensions/memory/index.js +358 -0
  182. package/public/scripts/extensions/memory/manifest.json +13 -0
  183. package/public/scripts/extensions/memory/style.css +34 -0
  184. package/public/scripts/extensions.js +288 -0
  185. package/public/scripts/f-localStorage.js +27 -0
  186. package/public/scripts/gpt-2-3-tokenizer/README.md +28 -0
  187. package/public/scripts/gpt-2-3-tokenizer/encoder.js +1 -0
  188. package/public/scripts/gpt-2-3-tokenizer/mod.js +169 -0
  189. package/public/scripts/gpt-2-3-tokenizer/vocab.bpe.js +1 -0
  190. package/public/scripts/gpt-3-tokenizer/array-keyed-map.js +210 -0
  191. package/public/scripts/gpt-3-tokenizer/gpt3-tokenizer.js +271 -0
  192. package/public/scripts/gpt-3-tokenizer/gpt3-tokenizer.js.map +1 -0
  193. package/public/scripts/group-chats.js +899 -0
  194. package/public/scripts/horde.js +214 -0
  195. package/public/scripts/jquery-3.5.1.min.js +2 -0
  196. package/public/scripts/jquery-cookie-1.4.1.min.js +2 -0
  197. package/public/scripts/jquery.transit.min.js +1 -0
  198. package/public/scripts/kai-settings.js +179 -0
  199. package/public/scripts/nai-settings.js +108 -0
  200. package/public/scripts/openai.js +973 -0
  201. package/public/scripts/poe.js +360 -0
  202. package/public/scripts/popper.js +2008 -0
  203. package/public/scripts/popper.js.map +1 -0
  204. package/public/scripts/power-user.js +571 -0
  205. package/public/scripts/purify.min.js +3 -0
  206. package/public/scripts/purify.min.js.map +1 -0
  207. package/public/scripts/showdown.min.js +3 -0
  208. package/public/scripts/showdown.min.js.map +1 -0
  209. package/public/scripts/swiped-events.js +165 -0
  210. package/public/scripts/textgen-settings.js +194 -0
  211. package/public/scripts/toolcool-color-picker.js +87 -0
  212. package/public/scripts/utils.js +109 -0
  213. package/public/scripts/world-info.js +661 -0
  214. package/public/sounds/message.mp3 +0 -0
  215. package/public/style.css +3633 -0
  216. package/public/webfonts/NotoSans/NotoSans-Black.woff +0 -0
  217. package/public/webfonts/NotoSans/NotoSans-Black.woff2 +0 -0
  218. package/public/webfonts/NotoSans/NotoSans-BlackItalic.woff +0 -0
  219. package/public/webfonts/NotoSans/NotoSans-BlackItalic.woff2 +0 -0
  220. package/public/webfonts/NotoSans/NotoSans-Bold.woff +0 -0
  221. package/public/webfonts/NotoSans/NotoSans-Bold.woff2 +0 -0
  222. package/public/webfonts/NotoSans/NotoSans-BoldItalic.woff +0 -0
  223. package/public/webfonts/NotoSans/NotoSans-BoldItalic.woff2 +0 -0
  224. package/public/webfonts/NotoSans/NotoSans-ExtraBold.woff +0 -0
  225. package/public/webfonts/NotoSans/NotoSans-ExtraBold.woff2 +0 -0
  226. package/public/webfonts/NotoSans/NotoSans-ExtraBoldItalic.woff +0 -0
  227. package/public/webfonts/NotoSans/NotoSans-ExtraBoldItalic.woff2 +0 -0
  228. package/public/webfonts/NotoSans/NotoSans-ExtraLight.woff +0 -0
  229. package/public/webfonts/NotoSans/NotoSans-ExtraLight.woff2 +0 -0
  230. package/public/webfonts/NotoSans/NotoSans-ExtraLightItalic.woff +0 -0
  231. package/public/webfonts/NotoSans/NotoSans-ExtraLightItalic.woff2 +0 -0
  232. package/public/webfonts/NotoSans/NotoSans-Italic.woff +0 -0
  233. package/public/webfonts/NotoSans/NotoSans-Italic.woff2 +0 -0
  234. package/public/webfonts/NotoSans/NotoSans-Light.woff +0 -0
  235. package/public/webfonts/NotoSans/NotoSans-Light.woff2 +0 -0
  236. package/public/webfonts/NotoSans/NotoSans-LightItalic.woff +0 -0
  237. package/public/webfonts/NotoSans/NotoSans-LightItalic.woff2 +0 -0
  238. package/public/webfonts/NotoSans/NotoSans-Medium.woff +0 -0
  239. package/public/webfonts/NotoSans/NotoSans-Medium.woff2 +0 -0
  240. package/public/webfonts/NotoSans/NotoSans-MediumItalic.woff +0 -0
  241. package/public/webfonts/NotoSans/NotoSans-MediumItalic.woff2 +0 -0
  242. package/public/webfonts/NotoSans/NotoSans-Regular.woff +0 -0
  243. package/public/webfonts/NotoSans/NotoSans-Regular.woff2 +0 -0
  244. package/public/webfonts/NotoSans/NotoSans-SemiBold.woff +0 -0
  245. package/public/webfonts/NotoSans/NotoSans-SemiBold.woff2 +0 -0
  246. package/public/webfonts/NotoSans/NotoSans-SemiBoldItalic.woff +0 -0
  247. package/public/webfonts/NotoSans/NotoSans-SemiBoldItalic.woff2 +0 -0
  248. package/public/webfonts/NotoSans/NotoSans-Thin.woff +0 -0
  249. package/public/webfonts/NotoSans/NotoSans-Thin.woff2 +0 -0
  250. package/public/webfonts/NotoSans/NotoSans-ThinItalic.woff +0 -0
  251. package/public/webfonts/NotoSans/NotoSans-ThinItalic.woff2 +0 -0
  252. package/public/webfonts/NotoSans/stylesheet.css +162 -0
  253. package/public/webfonts/fa-solid-900.ttf +0 -0
  254. package/public/webfonts/fa-solid-900.woff2 +0 -0
  255. package/readme.md +187 -0
  256. package/server.js +2593 -0
  257. package/start.sh +24 -0
  258. package/tools/charaverter/main.mjs +110 -0
  259. package/tools/charaverter/package.json +10 -0
@@ -0,0 +1,288 @@
1
+ import { callPopup, saveSettings, saveSettingsDebounced, token } from "../script.js";
2
+ import { isSubsetOf } from "./utils.js";
3
+ export {
4
+ getContext,
5
+ getApiUrl,
6
+ loadExtensionSettings,
7
+ defaultRequestArgs,
8
+ modules,
9
+ extension_settings,
10
+ };
11
+
12
+ let extensionNames = [];
13
+ let manifests = [];
14
+ const defaultUrl = "http://localhost:5100";
15
+
16
+ const extension_settings = {
17
+ apiUrl: defaultUrl,
18
+ autoConnect: false,
19
+ disabledExtensions: [],
20
+ memory: {},
21
+ note: {
22
+ default: '',
23
+ },
24
+ caption: {},
25
+ expressions: {},
26
+ dice: {},
27
+ };
28
+
29
+ let modules = [];
30
+ let activeExtensions = new Set();
31
+
32
+ const getContext = () => window['SillyTavern'].getContext();
33
+ const getApiUrl = () => extension_settings.apiUrl;
34
+ const defaultRequestArgs = { method: 'GET', headers: { 'Bypass-Tunnel-Reminder': 'bypass' } };
35
+ let connectedToApi = false;
36
+
37
+ async function discoverExtensions() {
38
+ try {
39
+ const response = await fetch('/discover_extensions', { headers: { 'X-CSRF-Token': token } });
40
+
41
+ if (response.ok) {
42
+ const extensions = await response.json();
43
+ return extensions;
44
+ }
45
+ else {
46
+ return [];
47
+ }
48
+ }
49
+ catch (err) {
50
+ console.error(err);
51
+ return [];
52
+ }
53
+ }
54
+
55
+ function onDisableExtensionClick() {
56
+ const name = $(this).data('name');
57
+ disableExtension(name);
58
+ }
59
+
60
+ function onEnableExtensionClick() {
61
+ const name = $(this).data('name');
62
+ enableExtension(name);
63
+ }
64
+
65
+ async function enableExtension(name) {
66
+ extension_settings.disabledExtensions = extension_settings.disabledExtensions.filter(x => x !== name);
67
+ await saveSettings();
68
+ location.reload();
69
+ }
70
+
71
+ async function disableExtension(name) {
72
+ extension_settings.disabledExtensions.push(name);
73
+ await saveSettings();
74
+ location.reload();
75
+ }
76
+
77
+ async function getManifests(names) {
78
+ const obj = {};
79
+ for (const name of names) {
80
+ const response = await fetch(`/scripts/extensions/${name}/manifest.json`);
81
+
82
+ if (response.ok) {
83
+ const json = await response.json();
84
+ obj[name] = json;
85
+ }
86
+ }
87
+ return obj;
88
+ }
89
+
90
+ async function activateExtensions() {
91
+ const extensions = Object.entries(manifests).sort((a, b) => a[1].loading_order - b[1].loading_order);
92
+
93
+ for (let entry of extensions) {
94
+ const name = entry[0];
95
+ const manifest = entry[1];
96
+
97
+ if (activeExtensions.has(name)) {
98
+ continue;
99
+ }
100
+
101
+ // all required modules are active (offline extensions require none)
102
+ if (isSubsetOf(modules, manifest.requires)) {
103
+ try {
104
+ const isDisabled = extension_settings.disabledExtensions.includes(name);
105
+ const li = document.createElement('li');
106
+
107
+ if (!isDisabled) {
108
+ await addExtensionScript(name, manifest);
109
+ await addExtensionStyle(name, manifest);
110
+ activeExtensions.add(name);
111
+ }
112
+ else {
113
+ li.classList.add('disabled');
114
+ }
115
+
116
+ li.id = name;
117
+ li.innerText = manifest.display_name;
118
+
119
+ $('#extensions_list').append(li);
120
+ }
121
+ catch (error) {
122
+ console.error(`Could not activate extension: ${name}`);
123
+ console.error(error);
124
+ }
125
+ }
126
+ }
127
+ }
128
+
129
+ async function connectClickHandler() {
130
+ const baseUrl = $("#extensions_url").val();
131
+ extension_settings.apiUrl = baseUrl;
132
+ saveSettingsDebounced();
133
+ await connectToApi(baseUrl);
134
+ }
135
+
136
+ function autoConnectInputHandler() {
137
+ const value = $(this).prop('checked');
138
+ extension_settings.autoConnect = !!value;
139
+
140
+ if (value && !connectedToApi) {
141
+ $("#extensions_connect").trigger('click');
142
+ }
143
+
144
+ saveSettingsDebounced();
145
+ }
146
+
147
+ async function connectToApi(baseUrl) {
148
+ if (!baseUrl) {
149
+ return;
150
+ }
151
+
152
+ const url = new URL(baseUrl);
153
+ url.pathname = '/api/modules';
154
+
155
+ try {
156
+ const getExtensionsResult = await fetch(url, defaultRequestArgs);
157
+
158
+ if (getExtensionsResult.ok) {
159
+ const data = await getExtensionsResult.json();
160
+ modules = data.modules;
161
+ activateExtensions();
162
+ }
163
+
164
+ updateStatus(getExtensionsResult.ok);
165
+ }
166
+ catch {
167
+ updateStatus(false);
168
+ }
169
+ }
170
+
171
+ function updateStatus(success) {
172
+ connectedToApi = success;
173
+ const _text = success ? 'Connected to API' : 'Could not connect to API';
174
+ const _class = success ? 'success' : 'failure';
175
+ $('#extensions_status').text(_text);
176
+ $('#extensions_status').attr('class', _class);
177
+ }
178
+
179
+ function addExtensionStyle(name, manifest) {
180
+ if (manifest.css) {
181
+ return new Promise((resolve, reject) => {
182
+ const url = `/scripts/extensions/${name}/${manifest.css}`;
183
+
184
+ if ($(`link[id="${name}"]`).length === 0) {
185
+ const link = document.createElement('link');
186
+ link.id = name;
187
+ link.rel = "stylesheet";
188
+ link.type = "text/css";
189
+ link.href = url;
190
+ link.onload = function () {
191
+ resolve();
192
+ }
193
+ link.onerror = function (e) {
194
+ reject(e);
195
+ }
196
+ document.head.appendChild(link);
197
+ }
198
+ });
199
+ }
200
+
201
+ return Promise.resolve();
202
+ }
203
+
204
+ function addExtensionScript(name, manifest) {
205
+ if (manifest.js) {
206
+ return new Promise((resolve, reject) => {
207
+ const url = `/scripts/extensions/${name}/${manifest.js}`;
208
+ let ready = false;
209
+
210
+ if ($(`script[id="${name}"]`).length === 0) {
211
+ const script = document.createElement('script');
212
+ script.id = name;
213
+ script.type = 'module';
214
+ script.src = url;
215
+ script.async = true;
216
+ script.onerror = function (err) {
217
+ reject(err, script);
218
+ };
219
+ script.onload = script.onreadystatechange = function () {
220
+ // console.log(this.readyState); // uncomment this line to see which ready states are called.
221
+ if (!ready && (!this.readyState || this.readyState == 'complete')) {
222
+ ready = true;
223
+ resolve();
224
+ }
225
+ };
226
+ document.body.appendChild(script);
227
+ }
228
+ });
229
+ }
230
+
231
+ return Promise.resolve();
232
+ }
233
+
234
+ function showExtensionsDetails() {
235
+ let html = '<h3>Modules provided by your Extensions API:</h3>';
236
+ html += modules.length ? DOMPurify.sanitize(modules.join(', ')) : '<p class="failure">Not connected to the API!</p>';
237
+ html += '<h3>Available extensions:</h3>';
238
+
239
+ Object.entries(manifests).sort((a, b) => a[1].loading_order - b[1].loading_order).forEach(extension => {
240
+ const name = extension[0];
241
+ const manifest = extension[1];
242
+ html += `<h4>${DOMPurify.sanitize(manifest.display_name)}</h4>`;
243
+ if (activeExtensions.has(name)) {
244
+ html += `<p class="success">Extension is active. <a href="javascript:void" data-name="${name}" class="disable_extension">Disable</a></p>`;
245
+ if (Array.isArray(manifest.optional)) {
246
+ const optional = new Set(manifest.optional);
247
+ modules.forEach(x => optional.delete(x));
248
+ if (optional.size > 0) {
249
+ const optionalString = DOMPurify.sanitize([...optional].join(', '));
250
+ html += `<p>Optional modules: <span class="optional">${optionalString}</span></p>`;
251
+ }
252
+ }
253
+ }
254
+ else if (extension_settings.disabledExtensions.includes(name)) {
255
+ html += `<p class="disabled">Extension is disabled. <a href="javascript:void" data-name=${name} class="enable_extension">Enable</a></p>`;
256
+ }
257
+ else {
258
+ const requirements = new Set(manifest.requires);
259
+ modules.forEach(x => requirements.delete(x));
260
+ const requirementsString = DOMPurify.sanitize([...requirements].join(', '));
261
+ html += `<p>Missing modules: <span class="failure">${requirementsString}</span></p>`
262
+ }
263
+ });
264
+
265
+ callPopup(`<div class="extensions_info">${html}</div>`, 'text');
266
+ }
267
+
268
+ async function loadExtensionSettings(settings) {
269
+ if (settings.extension_settings) {
270
+ Object.assign(extension_settings, settings.extension_settings);
271
+ }
272
+
273
+ $("#extensions_url").val(extension_settings.apiUrl);
274
+ $("#extensions_autoconnect").prop('checked', extension_settings.autoConnect).trigger('input');
275
+
276
+ // Activate offline extensions
277
+ extensionNames = await discoverExtensions();
278
+ manifests = await getManifests(extensionNames)
279
+ activateExtensions();
280
+ }
281
+
282
+ $(document).ready(async function () {
283
+ $("#extensions_connect").on('click', connectClickHandler);
284
+ $("#extensions_autoconnect").on('input', autoConnectInputHandler);
285
+ $("#extensions_details").on('click', showExtensionsDetails);
286
+ $(document).on('click', '.disable_extension', onDisableExtensionClick);
287
+ $(document).on('click', '.enable_extension', onEnableExtensionClick);
288
+ });
@@ -0,0 +1,27 @@
1
+ ////////////////// LOCAL STORAGE HANDLING /////////////////////
2
+
3
+ export function SaveLocal(target, val) {
4
+ localStorage.setItem(target, val);
5
+ console.log('SaveLocal -- ' + target + ' : ' + val);
6
+ }
7
+ export function LoadLocal(target) {
8
+ console.log('LoadLocal -- ' + target);
9
+ return localStorage.getItem(target);
10
+
11
+ }
12
+ export function LoadLocalBool(target) {
13
+ let result = localStorage.getItem(target) === 'true';
14
+ return result;
15
+ }
16
+ export function CheckLocal() {
17
+ console.log("----------local storage---------");
18
+ var i;
19
+ for (i = 0; i < localStorage.length; i++) {
20
+ console.log(localStorage.key(i) + " : " + localStorage.getItem(localStorage.key(i)));
21
+ }
22
+ console.log("------------------------------");
23
+ }
24
+
25
+ export function ClearLocal() { localStorage.clear(); console.log('Removed All Local Storage'); }
26
+
27
+ /////////////////////////////////////////////////////////////////////////
@@ -0,0 +1,28 @@
1
+ # GPT-2/3 Tokenizer
2
+
3
+ GPT-2/3 byte pair encoder/decoder/tokenizer based on [@latitudegames/GPT-3-Encoder](https://github.com/latitudegames/GPT-3-Encoder) that works in the browser and Deno.
4
+
5
+ See also: [JS byte pair encoder for OpenAI's CLIP model](https://github.com/josephrocca/clip-bpe-js).
6
+
7
+ ```js
8
+ import {encode, decode} from "https://deno.land/x/gpt_2_3_tokenizer@v0.0.2/mod.js";
9
+ let text = "hello world";
10
+ console.log(encode(text)); // [258, 18798, 995]
11
+ console.log(decode(encode(text))); // "hello world"
12
+ ```
13
+ or:
14
+ ```js
15
+ let mod = await import("https://deno.land/x/gpt_2_3_tokenizer@v0.0.2/mod.js");
16
+ mod.encode("hello world"); // [258, 18798, 995]
17
+ ```
18
+ or to include it as a global variable in the browser:
19
+ ```html
20
+ <script type=module>
21
+ import tokenizer from "https://deno.land/x/gpt_2_3_tokenizer@v0.0.2/mod.js";
22
+ window.tokenizer = tokenizer;
23
+ </script>
24
+ ```
25
+
26
+ # License
27
+
28
+ The [original code is MIT Licensed](https://github.com/latitudegames/GPT-3-Encoder/blob/master/LICENSE) and so are any changes made by this repo.