mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-06-05 21:59:27 +02:00
Compare commits
760 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
f12c523fcd | ||
|
ba74e4f126 | ||
|
8eb56355df | ||
|
1211493404 | ||
|
303c1dcf14 | ||
|
71de864a5e | ||
|
2c7f2e2014 | ||
|
51c5783eb3 | ||
|
90eb74545c | ||
|
c528940a45 | ||
|
939e5003e8 | ||
|
08ad507637 | ||
|
b6762d256d | ||
|
4b12eea00f | ||
|
30ddb34d38 | ||
|
64edcfae22 | ||
|
34c25300e5 | ||
|
8d67874215 | ||
|
7a6c930adc | ||
|
955692424a | ||
|
b4d6b8e405 | ||
|
e8b54cc8f0 | ||
|
e4217dbeba | ||
|
2a7a8cab11 | ||
|
5359c76923 | ||
|
d0d358f56f | ||
|
36dfbd4cbe | ||
|
d0bc58acf2 | ||
|
8d84871134 | ||
|
1f7c65b45a | ||
|
6a67e54ff8 | ||
|
560c6e8ff1 | ||
|
ed2e6fff6e | ||
|
58832d1a75 | ||
|
22afd570fc | ||
|
449522c3aa | ||
|
e6d5830f33 | ||
|
26fd06335e | ||
|
341fa17ba3 | ||
|
7fc97a3b9a | ||
|
640d9020f9 | ||
|
be54ef3dac | ||
|
57b81be9ce | ||
|
fd0e0945b3 | ||
|
5ac472fbac | ||
|
62c2c88a79 | ||
|
edf307aa9c | ||
|
ade45b6cd1 | ||
|
157315cd68 | ||
|
6dc59b9fd3 | ||
|
d336ea7a13 | ||
|
fdc9a2a93b | ||
|
b0f82b0348 | ||
|
c184374753 | ||
|
1a6e136010 | ||
|
a815461d5a | ||
|
0b260fe835 | ||
|
ae1017edcb | ||
|
6eeb2dcd75 | ||
|
84745034e7 | ||
|
94c30837a2 | ||
|
3486303d7c | ||
|
8b6e2a0fe1 | ||
|
acfc9059e7 | ||
|
8f7946d6ad | ||
|
f8b734d607 | ||
|
34490c9614 | ||
|
c42cf748b3 | ||
|
81e6697e34 | ||
|
1aa7d1d5a5 | ||
|
356dafd954 | ||
|
8dff355d5d | ||
|
35ac8bd0fb | ||
|
da16c551f0 | ||
|
fe0db6ec78 | ||
|
b3e317393b | ||
|
713f30ba03 | ||
|
c98ba48561 | ||
|
f145dfcb2d | ||
|
87f547cd87 | ||
|
074ca4a55b | ||
|
77f5ef3424 | ||
|
f181b46cfc | ||
|
be7407b23b | ||
|
8d7648ccf7 | ||
|
c3376da393 | ||
|
e5de348b2e | ||
|
92e80d3bad | ||
|
d06789b8dc | ||
|
99d473654f | ||
|
864a733663 | ||
|
213a619b33 | ||
|
b093f71ae0 | ||
|
9438b5c4aa | ||
|
e5677b620d | ||
|
b571723f94 | ||
|
e52b3afea9 | ||
|
484f7e894a | ||
|
ca4f007009 | ||
|
f6ab33d835 | ||
|
e9bc2d8af0 | ||
|
817474c60d | ||
|
c218c1baea | ||
|
1651fa1ed7 | ||
|
5ed6d1cd9b | ||
|
7a23fe794e | ||
|
587cecb12c | ||
|
155172a2b4 | ||
|
dfbc5ec4ac | ||
|
cb380863e2 | ||
|
49c1ee1373 | ||
|
9744e6ab2f | ||
|
21252cf2dd | ||
|
5a799042b1 | ||
|
241f718df7 | ||
|
2b93fd37e3 | ||
|
6a394c0c3e | ||
|
249cb7777c | ||
|
cf28df381c | ||
|
6e35afa6ec | ||
|
b261354280 | ||
|
0c411398f0 | ||
|
7659dfb85c | ||
|
ae0aa42e7a | ||
|
5434efd6c0 | ||
|
28c09deb0d | ||
|
cd0a4959ad | ||
|
ad15e4f172 | ||
|
8100a542e2 | ||
|
294dc3b3b1 | ||
|
d6054e1555 | ||
|
474b2537b5 | ||
|
ed388553cc | ||
|
6609c941a9 | ||
|
e2c44161ed | ||
|
637e9d5469 | ||
|
f656fba213 | ||
|
c45f1ceaff | ||
|
d5c56fa405 | ||
|
7b9f5b3fb8 | ||
|
e25a033caa | ||
|
644b988b74 | ||
|
31e2cf714a | ||
|
61f69aa674 | ||
|
e80c36c242 | ||
|
9be173e34e | ||
|
2e6a02a576 | ||
|
8d2c8fd675 | ||
|
415bb5f9b8 | ||
|
e975d37436 | ||
|
420d568cd3 | ||
|
99e3c22311 | ||
|
09f2b2f731 | ||
|
fc1020a8e4 | ||
|
9305c29780 | ||
|
2aa5addb1d | ||
|
e6530cb22d | ||
|
44b7a09cb6 | ||
|
4c56f3068a | ||
|
cc75768668 | ||
|
c7963d683f | ||
|
b2ed69aac2 | ||
|
aef005007f | ||
|
8a4da487dd | ||
|
c6a64d8526 | ||
|
104d4ccebc | ||
|
596353389b | ||
|
c1c77a6a60 | ||
|
da7f97b663 | ||
|
b71b94d410 | ||
|
fa8ea7c60d | ||
|
7a4d6ecfde | ||
|
5c027634ff | ||
|
3be991591f | ||
|
5e31a21d8d | ||
|
0f1bb766f6 | ||
|
4a5d0df92f | ||
|
edb9702055 | ||
|
bf8b3b5013 | ||
|
bf66a39579 | ||
|
6625e4036e | ||
|
c626700226 | ||
|
835c731bcd | ||
|
78b42905f4 | ||
|
7b777fb803 | ||
|
fc43ae3891 | ||
|
df07fa8c94 | ||
|
573ada296e | ||
|
636ecef28a | ||
|
3db2db1c65 | ||
|
f0fbd7e3d4 | ||
|
99f47de88b | ||
|
ca29de4704 | ||
|
bb9fe64652 | ||
|
4e0685f998 | ||
|
bf9ef8fa0f | ||
|
3165537ce8 | ||
|
5f79c0c262 | ||
|
27f2fac916 | ||
|
1e57342639 | ||
|
b25322b844 | ||
|
a122109e0c | ||
|
b9383ace1e | ||
|
e27fca6628 | ||
|
1822c4f91b | ||
|
ec2876aefe | ||
|
5fa64361c2 | ||
|
07a6017443 | ||
|
b8f7675d8c | ||
|
becaee8f35 | ||
|
c677f0324a | ||
|
a089727591 | ||
|
62b02bec3f | ||
|
60232c73cc | ||
|
2301b5324a | ||
|
db2971c82d | ||
|
d3bb625efe | ||
|
7431b0e8aa | ||
|
2c0dcdc449 | ||
|
63b48b9211 | ||
|
ef59afcec1 | ||
|
9cff3861b4 | ||
|
757b7d5371 | ||
|
b3a3b9d347 | ||
|
999a43b2e5 | ||
|
048ea943bc | ||
|
511ae39b0b | ||
|
63e7139a81 | ||
|
8dc7aa0c20 | ||
|
8c42de7565 | ||
|
7deef1aa12 | ||
|
98e96b8c07 | ||
|
a5d63b064a | ||
|
6aeced98a6 | ||
|
6cb1eb3fe6 | ||
|
e4d389a5b6 | ||
|
7eb23a2fcc | ||
|
db67633af6 | ||
|
0cd0ce2374 | ||
|
5ddc8f17a0 | ||
|
1c40ea10f4 | ||
|
729830c2fc | ||
|
71e92af09d | ||
|
3340009a29 | ||
|
310b0f30cd | ||
|
0ca4cc08bb | ||
|
666d5712c7 | ||
|
c453e94486 | ||
|
f0d01d35a6 | ||
|
11908f7363 | ||
|
d5002863e0 | ||
|
775ae0f557 | ||
|
97e1f482c1 | ||
|
05daddb60c | ||
|
ed895b7c3e | ||
|
6fb664fe24 | ||
|
0f8b610454 | ||
|
d8bc38c0b0 | ||
|
54e880ef32 | ||
|
28ca8176f8 | ||
|
0aad86c0b6 | ||
|
12badb3d67 | ||
|
31cc05ae46 | ||
|
3e0697b7c7 | ||
|
7c54a74ffa | ||
|
15daf19a08 | ||
|
61c7f53d22 | ||
|
10f51b703b | ||
|
dd1c506694 | ||
|
9c9ed1593a | ||
|
acc05e633d | ||
|
4599797baf | ||
|
340be02777 | ||
|
3e11a90b3c | ||
|
fc09be75a6 | ||
|
af64ac001a | ||
|
c6a047651b | ||
|
023976444f | ||
|
05e60ff00b | ||
|
a764e5ce54 | ||
|
01d52f140a | ||
|
28d42e5200 | ||
|
37c97db969 | ||
|
84f339cdd6 | ||
|
a927ab557a | ||
|
6848b38bb7 | ||
|
e621f0d967 | ||
|
76aa17e08f | ||
|
321efa354a | ||
|
82c86c9ce6 | ||
|
dafc4e8098 | ||
|
005a495e96 | ||
|
6eb89bd21c | ||
|
05c010223b | ||
|
a667e14c8b | ||
|
cb32fb354c | ||
|
470a0964f7 | ||
|
776d220374 | ||
|
93ea8b6a22 | ||
|
ea7ff5b1c2 | ||
|
bd1d393e5d | ||
|
421c924c22 | ||
|
5c4794812f | ||
|
b3e51c8b1c | ||
|
74f441d0ba | ||
|
cf7edd99a7 | ||
|
2151ae7aaa | ||
|
81fec97f54 | ||
|
4ce7e97ab3 | ||
|
abb6706601 | ||
|
2d366117dd | ||
|
b233cc2480 | ||
|
bb9f765ce3 | ||
|
a3d7b540c7 | ||
|
a4442899f6 | ||
|
b5280bbfc7 | ||
|
9248bf1f63 | ||
|
6ddd395211 | ||
|
178391e450 | ||
|
f8b9c1f9f5 | ||
|
994f51c18e | ||
|
5504021374 | ||
|
4d483e7814 | ||
|
7b1baed0d7 | ||
|
d7780ee4bb | ||
|
be591b2494 | ||
|
3fd12b28dc | ||
|
903839c9c5 | ||
|
c16be2ec0e | ||
|
5b031ed5b4 | ||
|
5241b22a73 | ||
|
01c6544e22 | ||
|
d97aa0a270 | ||
|
cfc41163e2 | ||
|
50cdaadba0 | ||
|
cf44ac8c1f | ||
|
3e8f9e2680 | ||
|
5509b088e2 | ||
|
24f6b11cb9 | ||
|
bdf4241d18 | ||
|
d6c4b6f419 | ||
|
44c5ce9a30 | ||
|
65aec223a3 | ||
|
6878c79fc8 | ||
|
26a520af10 | ||
|
f81bbbea08 | ||
|
f61d600c05 | ||
|
e43023fde7 | ||
|
266fa5cbf8 | ||
|
5c8b8f4b98 | ||
|
bee3cee740 | ||
|
0520f3ccf4 | ||
|
fe4f0c2ea6 | ||
|
870abe0776 | ||
|
b39b7998ce | ||
|
59ebf2e5b8 | ||
|
ee11f021eb | ||
|
ceeaeea123 | ||
|
6d0318eb36 | ||
|
485d07b91f | ||
|
4bcfe6c2be | ||
|
b9a6361662 | ||
|
a95056db40 | ||
|
361b557509 | ||
|
6ace6a07d7 | ||
|
689637b36c | ||
|
d726aa5563 | ||
|
98b12e2bba | ||
|
320b188d47 | ||
|
2fa1c69f3e | ||
|
4db07402c4 | ||
|
b38673a5cd | ||
|
14582e67a0 | ||
|
2683549be8 | ||
|
b3e012bea3 | ||
|
dd3d3226eb | ||
|
c63ef20919 | ||
|
f1b6a329c9 | ||
|
a261e87d4c | ||
|
50379f6b6e | ||
|
d2ffefd24c | ||
|
aa75fe2877 | ||
|
b685c4f5bf | ||
|
7748c315d7 | ||
|
349d46d74a | ||
|
8deaefc3a6 | ||
|
297cfe3098 | ||
|
750e8c89a7 | ||
|
5bed367a32 | ||
|
7be1b039ac | ||
|
fc892b4514 | ||
|
afe29c61cc | ||
|
c28d0dec79 | ||
|
7f22def794 | ||
|
13099c43a9 | ||
|
1a1464800f | ||
|
21f98f11e5 | ||
|
dc6407ee8f | ||
|
586ce36167 | ||
|
3ba7291c35 | ||
|
75d0cf828a | ||
|
9d8283e4c7 | ||
|
352a8c3c97 | ||
|
e3f5949cc1 | ||
|
41e6161b1d | ||
|
7ef9ba4f03 | ||
|
e0b7c9ef4c | ||
|
53dd3aed4e | ||
|
c89c1beffd | ||
|
41c2dd16f2 | ||
|
d7cc70256a | ||
|
8f63edfd30 | ||
|
dfd78077ec | ||
|
d511875db9 | ||
|
7b2f1f7c7a | ||
|
ead05934a0 | ||
|
722b0698e9 | ||
|
8aa6350c31 | ||
|
c3717ff06a | ||
|
3be02b7217 | ||
|
8e829c900b | ||
|
07fb92b37d | ||
|
f8bccb472f | ||
|
bfe50403af | ||
|
5cf3198da1 | ||
|
bf97686dfc | ||
|
5510e6da31 | ||
|
36e3627705 | ||
|
0895bc6c1d | ||
|
78bda9954d | ||
|
57d30dae59 | ||
|
897632b583 | ||
|
6f05c087b9 | ||
|
fc9b2173c0 | ||
|
61ca7775d2 | ||
|
f95077ac9f | ||
|
22f1aee70b | ||
|
35395fcb39 | ||
|
4dfc33b2a0 | ||
|
5eeba8894e | ||
|
91fc50b82d | ||
|
2982d7af52 | ||
|
93acbcaa76 | ||
|
1f27a39f29 | ||
|
70d65f2d05 | ||
|
173207ec54 | ||
|
0c4c86ef06 | ||
|
c1544fb60c | ||
|
6adce75933 | ||
|
30a9fa2b9d | ||
|
fc5e0563ba | ||
|
17cdc78a91 | ||
|
4736f533a5 | ||
|
1d2122b867 | ||
|
2040c43371 | ||
|
2d77fb3e30 | ||
|
0c4b0cfb03 | ||
|
c0228861e5 | ||
|
797de862cf | ||
|
e062a33f56 | ||
|
f238e58731 | ||
|
c5ebe4b4b1 | ||
|
43caa0c6d4 | ||
|
1c52099ed6 | ||
|
c3b1573c91 | ||
|
820f4439ad | ||
|
491752599c | ||
|
471004b828 | ||
|
e9178e52eb | ||
|
2fa6a11650 | ||
|
f302c67b95 | ||
|
c522baf4f7 | ||
|
ceceb8f3f0 | ||
|
b5f430de6f | ||
|
47652d7fe9 | ||
|
55ed5b325c | ||
|
6895892d5a | ||
|
d3ab02df5a | ||
|
ba397fa70a | ||
|
5929d5c0e4 | ||
|
965c2ee29a | ||
|
6c8714c016 | ||
|
3d79885ddd | ||
|
b8057b3c4f | ||
|
44f27a1cb7 | ||
|
d2f2fee989 | ||
|
df7c2226f6 | ||
|
ec02547b0e | ||
|
18cc17142f | ||
|
e753e432be | ||
|
571356ffd9 | ||
|
6f543e860f | ||
|
7987f02dee | ||
|
c7ce0fe66a | ||
|
d05373cdd2 | ||
|
d50698861a | ||
|
b26369ca86 | ||
|
76c59cbc52 | ||
|
ee26581df1 | ||
|
0a521d7a35 | ||
|
943e14f797 | ||
|
b31a53ab99 | ||
|
058fef1146 | ||
|
70fe5b6e01 | ||
|
80e821d12d | ||
|
9c4404cae9 | ||
|
3458f58c63 | ||
|
f0338cc325 | ||
|
864859dd6b | ||
|
50b2eeb61f | ||
|
fef36bfc39 | ||
|
26d0f01d69 | ||
|
469c731ff4 | ||
|
65a6e428d1 | ||
|
60603a008c | ||
|
2271d7a220 | ||
|
819ce198a8 | ||
|
c673ebcc22 | ||
|
572b60d0c1 | ||
|
c85e55bcca | ||
|
1323ac1d13 | ||
|
157046ff46 | ||
|
bdcf9b088e | ||
|
deb13e9c97 | ||
|
c05b6b0ae8 | ||
|
97040a98a0 | ||
|
d95524032e | ||
|
6dc33e9637 | ||
|
533aeffa36 | ||
|
0a85178846 | ||
|
d93aba5706 | ||
|
68c572f2eb | ||
|
74efb598f1 | ||
|
62395f409f | ||
|
561bed9cc2 | ||
|
5f00f2beb0 | ||
|
496f86e16e | ||
|
3ce715c52f | ||
|
f4d467048b | ||
|
280608f061 | ||
|
e9c8b8c24e | ||
|
ae050be2d1 | ||
|
02df7d78e2 | ||
|
216c698610 | ||
|
01c793eae2 | ||
|
a8558ba6fb | ||
|
a2e3519218 | ||
|
1639289b18 | ||
|
e5d5f953ec | ||
|
de091daa40 | ||
|
f1479de5bd | ||
|
0d111652b5 | ||
|
2a31f6af2d | ||
|
dac5f6910c | ||
|
1dcd837eb1 | ||
|
f1a053c3b8 | ||
|
976d4f39e6 | ||
|
f33b31dc19 | ||
|
8970c8274c | ||
|
bc08d42d0e | ||
|
f14c73bfcc | ||
|
4e207c2cf0 | ||
|
972b1e5fa7 | ||
|
a7d48b1aed | ||
|
c5f251c6e3 | ||
|
8d06582b58 | ||
|
251d242a0d | ||
|
72f91a4994 | ||
|
f4eb32c71c | ||
|
abb908e62c | ||
|
9d88c1578b | ||
|
ebf3920f9f | ||
|
b96bed7240 | ||
|
cbfc1f7a0e | ||
|
2588646b0f | ||
|
75be96e1f7 | ||
|
b6e5df1983 | ||
|
264d77414a | ||
|
d70c346b12 | ||
|
4ced7abaa3 | ||
|
c2e6593343 | ||
|
be7750d6fd | ||
|
c69623278f | ||
|
d4b8983d47 | ||
|
921850a62b | ||
|
4048a0a09a | ||
|
b9c5703568 | ||
|
a070d13723 | ||
|
6d7943d2a0 | ||
|
2af33a9e18 | ||
|
9717259776 | ||
|
66832fc98a | ||
|
e44b123330 | ||
|
235a1372e8 | ||
|
0e76530f43 | ||
|
a8f1bf7a17 | ||
|
6bb91dd0df | ||
|
80e1226d28 | ||
|
36adb6992e | ||
|
900575ee1a | ||
|
9a3e3433c7 | ||
|
841f814137 | ||
|
ce2fd8800d | ||
|
74addf1241 | ||
|
5969bf3992 | ||
|
834c9751f8 | ||
|
50334890a6 | ||
|
0b937237c3 | ||
|
a20c8978f9 | ||
|
4f52c369fa | ||
|
5472ddc8e6 | ||
|
50340103de | ||
|
b625319f0c | ||
|
8e66ab4d51 | ||
|
1f9472e7b2 | ||
|
82b885e5ef | ||
|
7df6a78f33 | ||
|
17e0058763 | ||
|
7619396053 | ||
|
f713948a1b | ||
|
c4175697ef | ||
|
ec474f5571 | ||
|
3ca6e0e8fc | ||
|
ff21ee24d1 | ||
|
39ebffa282 | ||
|
ef56eda2c2 | ||
|
e3c465258e | ||
|
4490c3edd5 | ||
|
3355c682ca | ||
|
40f2eae3f3 | ||
|
df4700914c | ||
|
60e4993a89 | ||
|
587c528f6d | ||
|
9c7d3d7400 | ||
|
0e2290dacf | ||
|
1a2c54ce39 | ||
|
694df8ca55 | ||
|
c5d4bdcd0b | ||
|
fb2f8dce10 | ||
|
8eee1d09a8 | ||
|
297a767746 | ||
|
c047e1acd9 | ||
|
ec98746ac6 | ||
|
af0939038b | ||
|
df5b79a1a4 | ||
|
a183c8f69a | ||
|
d7dbe736f8 | ||
|
0af4a3ebd7 | ||
|
73520b923f | ||
|
b88f9fb1ff | ||
|
39a385ab04 | ||
|
6872ad9489 | ||
|
5a2311b806 | ||
|
cc54158f09 | ||
|
20cdcc37fc | ||
|
8a4a338455 | ||
|
a7a3badb8e | ||
|
9b76b6dd3c | ||
|
190f2f9085 | ||
|
d3e62fe56c | ||
|
a3c57fb05f | ||
|
0e746f0368 | ||
|
6bfa54e9b4 | ||
|
f5ecd1fa5f | ||
|
bbdd98a155 | ||
|
0607ac98db | ||
|
d48ebdb0d4 | ||
|
2e936e804a | ||
|
42730bbe92 | ||
|
d5d3516e18 | ||
|
7784b71c55 | ||
|
35fa634f1d | ||
|
a8899f7d81 | ||
|
5a6058d319 | ||
|
8366b7de60 | ||
|
0be952b9a0 | ||
|
33a72d10a0 | ||
|
ab2ff7ee34 | ||
|
fcaea46a54 | ||
|
7d034cba11 | ||
|
c1697dc3b3 | ||
|
46d5f79fd9 | ||
|
6a4b8c3870 | ||
|
283edd94b9 | ||
|
909c7f1037 | ||
|
5bda6eac13 | ||
|
8d37f9f38c | ||
|
68965d0791 | ||
|
8309c30a3e | ||
|
4df98b0341 | ||
|
490aa991d2 | ||
|
819d698938 | ||
|
b6c1c9a40d | ||
|
c716494622 | ||
|
6e4bd00ef8 | ||
|
1122c675e5 | ||
|
e2eec77a19 | ||
|
3c61074d78 | ||
|
1943325653 | ||
|
8d279dd94d | ||
|
e2f9489684 | ||
|
eb52872b13 | ||
|
3412d1ce1f | ||
|
c92ca8dbfb | ||
|
03d590415b | ||
|
4965ada785 | ||
|
785cacbcb6 | ||
|
cbb69adf53 | ||
|
b3406f8abf | ||
|
594a3720ad | ||
|
b1346910a4 | ||
|
271c93a504 | ||
|
6ff06ff04b | ||
|
5585220d0a | ||
|
49949f2f8e | ||
|
058bddfe81 | ||
|
ca53323a08 | ||
|
e7c9960a45 | ||
|
3f95f30a2b | ||
|
1dade2970b | ||
|
86de927ab9 | ||
|
fba2d809d0 | ||
|
b01e2824be | ||
|
40c3674da1 | ||
|
df48428d1d | ||
|
f245c48b17 | ||
|
c022858e5b | ||
|
0bdb131c22 | ||
|
8dc66bd21b | ||
|
111fa0dee5 | ||
|
d887eb2258 | ||
|
1593951281 | ||
|
cf2671c6d7 | ||
|
a8716d7c69 | ||
|
ecfad12b59 | ||
|
aacbc5b6db | ||
|
0e41db615e | ||
|
d314752547 | ||
|
fa641e9946 | ||
|
8bd17de2f3 | ||
|
5145e30be3 | ||
|
5fca39fae7 | ||
|
5ab284f1f5 | ||
|
8ec83fd5d9 | ||
|
d42a81f97c | ||
|
62342b35e2 | ||
|
46b9bb7854 | ||
|
fff1dd59c3 | ||
|
f88e95d9be | ||
|
248132dd89 | ||
|
400d29e97e | ||
|
ead37defeb | ||
|
f18cb91ef9 | ||
|
892fe7bd34 | ||
|
0126e5e5a3 | ||
|
b8afa96de5 | ||
|
9c42391706 | ||
|
684ee98168 | ||
|
b8f8be8cf9 | ||
|
3c65b2dcf3 |
@@ -13,3 +13,4 @@ access.log
|
|||||||
/cache
|
/cache
|
||||||
.DS_Store
|
.DS_Store
|
||||||
/public/scripts/extensions/third-party
|
/public/scripts/extensions/third-party
|
||||||
|
/colab
|
||||||
|
@@ -3,6 +3,9 @@ module.exports = {
|
|||||||
extends: [
|
extends: [
|
||||||
'eslint:recommended',
|
'eslint:recommended',
|
||||||
],
|
],
|
||||||
|
plugins: [
|
||||||
|
'jsdoc',
|
||||||
|
],
|
||||||
env: {
|
env: {
|
||||||
es6: true,
|
es6: true,
|
||||||
},
|
},
|
||||||
@@ -78,6 +81,7 @@ module.exports = {
|
|||||||
'public/scripts/extensions/tts/lib/**',
|
'public/scripts/extensions/tts/lib/**',
|
||||||
],
|
],
|
||||||
rules: {
|
rules: {
|
||||||
|
'jsdoc/no-undefined-types': ['warn', { disableReporting: true, markVariablesAsUsed: true }],
|
||||||
'no-unused-vars': ['error', { args: 'none' }],
|
'no-unused-vars': ['error', { args: 'none' }],
|
||||||
'no-control-regex': 'off',
|
'no-control-regex': 'off',
|
||||||
'no-constant-condition': ['error', { checkLoops: false }],
|
'no-constant-condition': ['error', { checkLoops: false }],
|
||||||
|
4
.github/issues-auto-labels.yml
vendored
4
.github/issues-auto-labels.yml
vendored
@@ -14,7 +14,7 @@
|
|||||||
- '(🐧 Linux)'
|
- '(🐧 Linux)'
|
||||||
|
|
||||||
🦊 Firefox:
|
🦊 Firefox:
|
||||||
- '(firefox|mozilla)'
|
- '\b(firefox|mozilla)\b'
|
||||||
|
|
||||||
📱 Mobile:
|
📱 Mobile:
|
||||||
- '(iphone|ios|android|📱 Termux)'
|
- '\b(iphone|ios|android|📱 Termux)\b'
|
||||||
|
6
.github/pr-auto-labels-by-branch.yml
vendored
6
.github/pr-auto-labels-by-branch.yml
vendored
@@ -34,6 +34,9 @@
|
|||||||
🦊 Firefox:
|
🦊 Firefox:
|
||||||
- head-branch: ['\bfirefox\b']
|
- head-branch: ['\bfirefox\b']
|
||||||
|
|
||||||
|
🧑🤝🧑 Group Chat:
|
||||||
|
- head-branch: ['\bgroups?\b']
|
||||||
|
|
||||||
🖼️ Image Gen:
|
🖼️ Image Gen:
|
||||||
- head-branch: ['\bimage-gen\b']
|
- head-branch: ['\bimage-gen\b']
|
||||||
|
|
||||||
@@ -58,6 +61,9 @@
|
|||||||
📜 Prompt:
|
📜 Prompt:
|
||||||
- head-branch: ['\bprompt\b']
|
- head-branch: ['\bprompt\b']
|
||||||
|
|
||||||
|
🧠 Reasoning:
|
||||||
|
- head-branch: ['\breasoning\b', '\breason\b', '\bthinking\b']
|
||||||
|
|
||||||
🚚 Refactor:
|
🚚 Refactor:
|
||||||
- head-branch: ['\brefactor(s|ed)?\b']
|
- head-branch: ['\brefactor(s|ed)?\b']
|
||||||
|
|
||||||
|
85
.github/readme.md
vendored
85
.github/readme.md
vendored
@@ -7,7 +7,7 @@
|
|||||||
English | [German](readme-de_de.md) | [中文](readme-zh_cn.md) | [繁體中文](readme-zh_tw.md) | [日本語](readme-ja_jp.md) | [Русский](readme-ru_ru.md) | [한국어](readme-ko_kr.md)
|
English | [German](readme-de_de.md) | [中文](readme-zh_cn.md) | [繁體中文](readme-zh_tw.md) | [日本語](readme-ja_jp.md) | [Русский](readme-ru_ru.md) | [한국어](readme-ko_kr.md)
|
||||||
|
|
||||||
[](https://github.com/SillyTavern/SillyTavern/stargazers)
|
[](https://github.com/SillyTavern/SillyTavern/stargazers)
|
||||||
[](https://github.com/SillyTavern/SillyTavern/network)
|
[](https://github.com/SillyTavern/SillyTavern/forks)
|
||||||
[](https://github.com/SillyTavern/SillyTavern/issues)
|
[](https://github.com/SillyTavern/SillyTavern/issues)
|
||||||
[](https://github.com/SillyTavern/SillyTavern/pulls)
|
[](https://github.com/SillyTavern/SillyTavern/pulls)
|
||||||
|
|
||||||
@@ -42,7 +42,7 @@ If you're not familiar with using the git CLI or don't understand what a branch
|
|||||||
|
|
||||||
## What do I need other than SillyTavern?
|
## What do I need other than SillyTavern?
|
||||||
|
|
||||||
Since SillyTavern is only an interface, you will need access to an LLM backend to provide inference. You can use AI Horde for instant out-of-the-box chatting. Aside from that, we support many other local and cloud-based LLM backends: OpenAI-compatible API, KoboldAI, Tabby, and many more. You can read more about our supported APIs in [the FAQ](https://docs.sillytavern.app/usage/api-connections/).
|
Since SillyTavern is only an interface, you will need access to an LLM backend to provide inference. You can use AI Horde for instant out-of-the-box chatting. Aside from that, we support many other local and cloud-based LLM backends: OpenAI-compatible API, KoboldAI, Tabby, and many more. You can read more about our supported APIs in [the Docs](https://docs.sillytavern.app/usage/api-connections/).
|
||||||
|
|
||||||
### Do I need a powerful PC to run SillyTavern?
|
### Do I need a powerful PC to run SillyTavern?
|
||||||
|
|
||||||
@@ -83,9 +83,7 @@ Or get in touch with the developers directly:
|
|||||||
|
|
||||||
SillyTavern is built around the concept of "character cards". A character card is a collection of prompts that set the behavior of the LLM and is required to have persistent conversations in SillyTavern. They function similarly to ChatGPT's GPTs or Poe's bots. The content of a character card can be anything: an abstract scenario, an assistant tailored for a specific task, a famous personality or a fictional character.
|
SillyTavern is built around the concept of "character cards". A character card is a collection of prompts that set the behavior of the LLM and is required to have persistent conversations in SillyTavern. They function similarly to ChatGPT's GPTs or Poe's bots. The content of a character card can be anything: an abstract scenario, an assistant tailored for a specific task, a famous personality or a fictional character.
|
||||||
|
|
||||||
The name field is the only required character card input. To start a neutral conversation with the language model, create a new card simply called "Assistant" and leave the rest of the boxes blank. For a more themed chat, you can provide the language model with various background details, behavior and writing patterns, and a scenario to jump start the chat.
|
To have a quick conversation without selecting a character card or to just test the LLM connection, simply type your prompt input into the input bar on the Welcome Screen after opening SillyTavern. This will create an empty "Assistant" character card that you can customize later.
|
||||||
|
|
||||||
To have a quick conversation without selecting a character card or to just test the LLM connection, simply type your prompt input into the input bar on the Welcome Screen after opening SillyTavern. Please note that such chats are temporary and will not be saved.
|
|
||||||
|
|
||||||
To get a general idea on how to define character cards, see the default character (Seraphina) or download selected community-made cards from the "Download Extensions & Assets" menu.
|
To get a general idea on how to define character cards, see the default character (Seraphina) or download selected community-made cards from the "Download Extensions & Assets" menu.
|
||||||
|
|
||||||
@@ -192,28 +190,43 @@ You will need two mandatory directory mappings and a port mapping to allow Silly
|
|||||||
|
|
||||||
##### Volume Mappings
|
##### Volume Mappings
|
||||||
|
|
||||||
* [config] - The directory where SillyTavern configuration files will be stored on your host machine
|
* `CONFIG_PATH` - The directory where SillyTavern configuration files will be stored on your host machine
|
||||||
* [data] - The directory where SillyTavern user data (including characters) will be stored on your host machine
|
* `DATA_PATH` - The directory where SillyTavern user data (including characters) will be stored on your host machine
|
||||||
* [plugins] - (optional) The directory where SillyTavern server plugins will be stored on your host machine
|
* `PLUGINS_PATH` - (optional) The directory where SillyTavern server plugins will be stored on your host machine
|
||||||
* [extensions] - (optional) The directory where global UI extensions will be stored on your host machine
|
* `EXTENSIONS_PATH` - (optional) The directory where global UI extensions will be stored on your host machine
|
||||||
|
|
||||||
##### Port Mappings
|
##### Port Mappings
|
||||||
|
|
||||||
* [PublicPort] - The port to expose the traffic on. This is mandatory, as you will be accessing the instance from outside of its virtual machine container. DO NOT expose this to the internet without implementing a separate service for security.
|
* `PUBLIC_PORT` - The port to expose the traffic on. This is mandatory, as you will be accessing the instance from outside of its virtual machine container. DO NOT expose this to the internet without implementing a separate service for security.
|
||||||
|
|
||||||
##### Additional Settings
|
##### Additional Settings
|
||||||
|
|
||||||
* [DockerNet] - The docker network that the container should be created with a connection to. If you don't know what it is, see the [official Docker documentation](https://docs.docker.com/reference/cli/docker/network/).
|
* `SILLYTAVERN_VERSION` - On the right-hand side of this GitHub page, you'll see "Packages". Select the "sillytavern" package and you'll see the image versions. The image tag "latest" will keep you up-to-date with the current release. You can also utilize "staging" that points to the nightly image of the respective branch.
|
||||||
* [version] - On the right-hand side of this GitHub page, you'll see "Packages". Select the "sillytavern" package and you'll see the image versions. The image tag "latest" will keep you up-to-date with the current release. You can also utilize "staging" and "release" tags that point to the nightly images of the respective branches, but this may not be appropriate, if you are utilizing extensions that could be broken, and may need time to update.
|
|
||||||
|
|
||||||
#### Install command
|
#### Running the container
|
||||||
|
|
||||||
1. Open your Command Line
|
1. Open your Command Line
|
||||||
2. Run the following command
|
2. Run the following command in a folder where you want to store the configuration and data files:
|
||||||
|
|
||||||
`docker run --name='sillytavern' --net='[DockerNet]' -p '8000:8000/tcp' -v '[plugins]':'/home/node/app/plugins':'rw' -v '[config]':'/home/node/app/config':'rw' -v '[data]':'/home/node/app/data':'rw' -v '[extensions]':'/home/node/app/public/scripts/extensions/third-party':'rw' 'ghcr.io/sillytavern/sillytavern:[version]'`
|
```bash
|
||||||
|
SILLYTAVERN_VERSION="latest"
|
||||||
|
PUBLIC_PORT="8000"
|
||||||
|
CONFIG_PATH="./config"
|
||||||
|
DATA_PATH="./data"
|
||||||
|
PLUGINS_PATH="./plugins"
|
||||||
|
EXTENSIONS_PATH="./extensions"
|
||||||
|
|
||||||
> Note that 8000 is a default listening port. Don't forget to use an appropriate port if you change it in the config.
|
docker run \
|
||||||
|
--name="sillytavern" \
|
||||||
|
-p "$PUBLIC_PORT:8000/tcp" \
|
||||||
|
-v "$CONFIG_PATH:/home/node/app/config:rw" \
|
||||||
|
-v "$DATA_PATH:/home/node/app/data:rw" \
|
||||||
|
-v "$EXTENSIONS_PATH:/home/node/app/public/scripts/extensions/third-party:rw" \
|
||||||
|
-v "$PLUGINS_PATH:/home/node/app/plugins:rw" \
|
||||||
|
ghcr.io/sillytavern/sillytavern:"$SILLYTAVERN_VERSION"
|
||||||
|
```
|
||||||
|
|
||||||
|
> By default the container will run in the foreground. If you want to run it in the background, add the `-d` flag to the `docker run` command.
|
||||||
|
|
||||||
### Building the image yourself
|
### Building the image yourself
|
||||||
|
|
||||||
@@ -301,18 +314,6 @@ chmod +x launcher.sh && ./launcher.sh
|
|||||||
|
|
||||||
**Unsupported platform: android arm LEtime-web.** 32-bit Android requires an external dependency that can't be installed with npm. Use the following command to install it: `pkg install esbuild`. Then run the usual installation steps.
|
**Unsupported platform: android arm LEtime-web.** 32-bit Android requires an external dependency that can't be installed with npm. Use the following command to install it: `pkg install esbuild`. Then run the usual installation steps.
|
||||||
|
|
||||||
## API keys management
|
|
||||||
|
|
||||||
SillyTavern saves your API keys to a `secrets.json` file in the user data directory (`/data/default-user/secrets.json` is the default path).
|
|
||||||
|
|
||||||
By default, API keys will not be visible from the interface after you have saved them and refreshed the page.
|
|
||||||
|
|
||||||
In order to enable viewing your keys:
|
|
||||||
|
|
||||||
1. Set the value of `allowKeysExposure` to `true` in `config.yaml` file.
|
|
||||||
2. Restart the SillyTavern server.
|
|
||||||
3. Click the 'View hidden API keys' link at the bottom right of the API Connection Panel.
|
|
||||||
|
|
||||||
## Command-line arguments
|
## Command-line arguments
|
||||||
|
|
||||||
You can pass command-line arguments to SillyTavern server startup to override some settings in `config.yaml`.
|
You can pass command-line arguments to SillyTavern server startup to override some settings in `config.yaml`.
|
||||||
@@ -335,6 +336,7 @@ Start.bat --port 8000 --listen false
|
|||||||
| Option | Description | Type |
|
| Option | Description | Type |
|
||||||
|-------------------------|----------------------------------------------------------------------|----------|
|
|-------------------------|----------------------------------------------------------------------|----------|
|
||||||
| `--version` | Show version number | boolean |
|
| `--version` | Show version number | boolean |
|
||||||
|
| `--configPath` | Override the path to the config.yaml file | string |
|
||||||
| `--dataRoot` | Root directory for data storage | string |
|
| `--dataRoot` | Root directory for data storage | string |
|
||||||
| `--port` | Sets the port under which SillyTavern will run | number |
|
| `--port` | Sets the port under which SillyTavern will run | number |
|
||||||
| `--listen` | SillyTavern will listen on all network interfaces | boolean |
|
| `--listen` | SillyTavern will listen on all network interfaces | boolean |
|
||||||
@@ -364,32 +366,7 @@ Most often this is for people who want to use SillyTavern on their mobile phones
|
|||||||
|
|
||||||
Read the detailed guide on how to set up remote connections in the [Docs](https://docs.sillytavern.app/usage/remoteconnections/).
|
Read the detailed guide on how to set up remote connections in the [Docs](https://docs.sillytavern.app/usage/remoteconnections/).
|
||||||
|
|
||||||
You may also want to configure SillyTavern user profiles with (optional) password protection: [Users](https://docs.sillytavern.app/installation/st-1.12.0-migration-guide/#users).
|
You may also want to configure SillyTavern user profiles with (optional) password protection: [Users](https://docs.sillytavern.app/administration/multi-user/).
|
||||||
|
|
||||||
## Performance issues?
|
|
||||||
|
|
||||||
### General tips
|
|
||||||
|
|
||||||
1. Disable the Blur Effect and enable Reduced Motion on the User Settings panel (UI Theme toggles category).
|
|
||||||
2. If using response streaming, set the streaming FPS to a lower value (10-15 FPS is recommended).
|
|
||||||
3. Make sure the browser is enabled to use GPU acceleration for rendering.
|
|
||||||
|
|
||||||
### Input lag
|
|
||||||
|
|
||||||
Performance degradation, particularly input lag, is most commonly attributed to browser extensions. Known problematic extensions include:
|
|
||||||
|
|
||||||
* iCloud Password Manager
|
|
||||||
* DeepL Translation
|
|
||||||
* AI-based grammar correction tools
|
|
||||||
* Various ad-blocking extensions
|
|
||||||
|
|
||||||
If you experience performance issues and cannot identify the cause, or suspect an issue with SillyTavern itself, please:
|
|
||||||
|
|
||||||
1. [Record a performance profile](https://developer.chrome.com/docs/devtools/performance/reference)
|
|
||||||
2. Export the profile as a JSON file
|
|
||||||
3. Submit it to the development team for analysis
|
|
||||||
|
|
||||||
We recommend first testing with all browser extensions and third-party SillyTavern extensions disabled to isolate the source of the performance degradation.
|
|
||||||
|
|
||||||
## License and credits
|
## License and credits
|
||||||
|
|
||||||
|
36
.github/workflows/issues-auto-manager.yml
vendored
36
.github/workflows/issues-auto-manager.yml
vendored
@@ -7,6 +7,10 @@ on:
|
|||||||
issue_comment:
|
issue_comment:
|
||||||
types: [created]
|
types: [created]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
issues: write
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
label-on-content:
|
label-on-content:
|
||||||
name: 🏷️ Label Issues by Content
|
name: 🏷️ Label Issues by Content
|
||||||
@@ -16,7 +20,7 @@ jobs:
|
|||||||
- name: Checkout Repository
|
- name: Checkout Repository
|
||||||
# Checkout
|
# Checkout
|
||||||
# https://github.com/marketplace/actions/checkout
|
# https://github.com/marketplace/actions/checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4.2.2
|
||||||
|
|
||||||
- name: Auto-Label Issues (Based on Issue Content)
|
- name: Auto-Label Issues (Based on Issue Content)
|
||||||
# only auto label based on issue content once, on open (to prevent re-labeling removed labels)
|
# only auto label based on issue content once, on open (to prevent re-labeling removed labels)
|
||||||
@@ -24,11 +28,11 @@ jobs:
|
|||||||
|
|
||||||
# Issue Labeler
|
# Issue Labeler
|
||||||
# https://github.com/marketplace/actions/regex-issue-labeler
|
# https://github.com/marketplace/actions/regex-issue-labeler
|
||||||
uses: github/issue-labeler@v3
|
uses: github/issue-labeler@v3.4
|
||||||
with:
|
with:
|
||||||
configuration-path: .github/issues-auto-labels.yml
|
configuration-path: .github/issues-auto-labels.yml
|
||||||
enable-versioned-regex: 0
|
enable-versioned-regex: 0
|
||||||
repo-token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
label-on-labels:
|
label-on-labels:
|
||||||
name: 🏷️ Label Issues by Labels
|
name: 🏷️ Label Issues by Labels
|
||||||
@@ -39,40 +43,40 @@ jobs:
|
|||||||
if: contains(fromJSON('["👩💻 Good First Issue", "🙏 Help Wanted", "🪲 Confirmed", "⚠️ High Priority", "❕ Medium Priority", "💤 Low Priority"]'), github.event.label.name)
|
if: contains(fromJSON('["👩💻 Good First Issue", "🙏 Help Wanted", "🪲 Confirmed", "⚠️ High Priority", "❕ Medium Priority", "💤 Low Priority"]'), github.event.label.name)
|
||||||
# 🤖 Issues Helper
|
# 🤖 Issues Helper
|
||||||
# https://github.com/marketplace/actions/issues-helper
|
# https://github.com/marketplace/actions/issues-helper
|
||||||
uses: actions-cool/issues-helper@v3
|
uses: actions-cool/issues-helper@v3.6.0
|
||||||
with:
|
with:
|
||||||
actions: 'add-labels'
|
actions: 'add-labels'
|
||||||
token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
labels: '👍 Approved'
|
labels: '👍 Approved'
|
||||||
|
|
||||||
- name: ❌ Remove progress labels when issue is marked done or stale
|
- name: ❌ Remove progress labels when issue is marked done or stale
|
||||||
if: contains(fromJSON('["✅ Done", "✅ Done (staging)", "⚰️ Stale", "❌ wontfix"]'), github.event.label.name)
|
if: contains(fromJSON('["✅ Done", "✅ Done (staging)", "⚰️ Stale", "❌ wontfix"]'), github.event.label.name)
|
||||||
# 🤖 Issues Helper
|
# 🤖 Issues Helper
|
||||||
# https://github.com/marketplace/actions/issues-helper
|
# https://github.com/marketplace/actions/issues-helper
|
||||||
uses: actions-cool/issues-helper@v3
|
uses: actions-cool/issues-helper@v3.6.0
|
||||||
with:
|
with:
|
||||||
actions: 'remove-labels'
|
actions: 'remove-labels'
|
||||||
token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
labels: '🧑💻 In Progress,🤔 Unsure,🤔 Under Consideration'
|
labels: '🧑💻 In Progress,🤔 Unsure,🤔 Under Consideration'
|
||||||
|
|
||||||
- name: ❌ Remove temporary labels when confirmed labels are added
|
- name: ❌ Remove temporary labels when confirmed labels are added
|
||||||
if: contains(fromJSON('["❌ wontfix","👍 Approved","👩💻 Good First Issue"]'), github.event.label.name)
|
if: contains(fromJSON('["❌ wontfix","👍 Approved","👩💻 Good First Issue"]'), github.event.label.name)
|
||||||
# 🤖 Issues Helper
|
# 🤖 Issues Helper
|
||||||
# https://github.com/marketplace/actions/issues-helper
|
# https://github.com/marketplace/actions/issues-helper
|
||||||
uses: actions-cool/issues-helper@v3
|
uses: actions-cool/issues-helper@v3.6.0
|
||||||
with:
|
with:
|
||||||
actions: 'remove-labels'
|
actions: 'remove-labels'
|
||||||
token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
labels: '🤔 Unsure,🤔 Under Consideration'
|
labels: '🤔 Unsure,🤔 Under Consideration'
|
||||||
|
|
||||||
- name: ❌ Remove no bug labels when "🪲 Confirmed" is added
|
- name: ❌ Remove no bug labels when "🪲 Confirmed" is added
|
||||||
if: github.event.label.name == '🪲 Confirmed'
|
if: github.event.label.name == '🪲 Confirmed'
|
||||||
# 🤖 Issues Helper
|
# 🤖 Issues Helper
|
||||||
# https://github.com/marketplace/actions/issues-helper
|
# https://github.com/marketplace/actions/issues-helper
|
||||||
uses: actions-cool/issues-helper@v3
|
uses: actions-cool/issues-helper@v3.6.0
|
||||||
with:
|
with:
|
||||||
actions: 'remove-labels'
|
actions: 'remove-labels'
|
||||||
token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
labels: '✖️ Not Reproducible,✖️ Not A Bug'
|
labels: '✖️ Not Reproducible,✖️ Not A Bug'
|
||||||
|
|
||||||
remove-stale-label:
|
remove-stale-label:
|
||||||
@@ -85,10 +89,10 @@ jobs:
|
|||||||
- name: Remove Stale Label
|
- name: Remove Stale Label
|
||||||
# 🤖 Issues Helper
|
# 🤖 Issues Helper
|
||||||
# https://github.com/marketplace/actions/issues-helper
|
# https://github.com/marketplace/actions/issues-helper
|
||||||
uses: actions-cool/issues-helper@v3
|
uses: actions-cool/issues-helper@v3.6.0
|
||||||
with:
|
with:
|
||||||
actions: 'remove-labels'
|
actions: 'remove-labels'
|
||||||
token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
issue-number: ${{ github.event.issue.number }}
|
issue-number: ${{ github.event.issue.number }}
|
||||||
labels: '⚰️ Stale,🕸️ Inactive,🚏 Awaiting User Response,🛑 No Response'
|
labels: '⚰️ Stale,🕸️ Inactive,🚏 Awaiting User Response,🛑 No Response'
|
||||||
|
|
||||||
@@ -101,12 +105,12 @@ jobs:
|
|||||||
- name: Checkout Repository
|
- name: Checkout Repository
|
||||||
# Checkout
|
# Checkout
|
||||||
# https://github.com/marketplace/actions/checkout
|
# https://github.com/marketplace/actions/checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4.2.2
|
||||||
|
|
||||||
- name: Post Issue Comments Based on Labels
|
- name: Post Issue Comments Based on Labels
|
||||||
# Label Commenter
|
# Label Commenter
|
||||||
# https://github.com/marketplace/actions/label-commenter
|
# https://github.com/marketplace/actions/label-commenter
|
||||||
uses: peaceiris/actions-label-commenter@v1
|
uses: peaceiris/actions-label-commenter@v1.10.0
|
||||||
with:
|
with:
|
||||||
config_file: .github/issues-auto-comments.yml
|
config_file: .github/issues-auto-comments.yml
|
||||||
github_token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
16
.github/workflows/issues-updates-on-merge.yml
vendored
16
.github/workflows/issues-updates-on-merge.yml
vendored
@@ -6,6 +6,10 @@ on:
|
|||||||
- staging
|
- staging
|
||||||
- release
|
- release
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
issues: write
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
# This runs commits to staging/release, reading the commit messages. Check `pr-auto-manager.yml`:`update-linked-issues` for PR-linked updates.
|
# This runs commits to staging/release, reading the commit messages. Check `pr-auto-manager.yml`:`update-linked-issues` for PR-linked updates.
|
||||||
update-linked-issues:
|
update-linked-issues:
|
||||||
@@ -16,26 +20,26 @@ jobs:
|
|||||||
- name: Checkout Repository
|
- name: Checkout Repository
|
||||||
# Checkout
|
# Checkout
|
||||||
# https://github.com/marketplace/actions/checkout
|
# https://github.com/marketplace/actions/checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4.2.2
|
||||||
|
|
||||||
- name: Extract Linked Issues from Commit Message
|
- name: Extract Linked Issues from Commit Message
|
||||||
id: extract_issues
|
id: extract_issues
|
||||||
run: |
|
run: |
|
||||||
ISSUES=$(git log -1 --pretty=%B | grep -oiE '(close|closes|closed|fix|fixes|fixed|resolve|resolves|resolved) #([0-9]+)' | awk '{print $2}' | tr -d '#' | jq -R -s -c 'split("\n")[:-1]')
|
ISSUES=$(git log ${{ github.event.before }}..${{ github.event.after }} --pretty=%B | grep -oiE '(close|closes|closed|fix|fixes|fixed|resolve|resolves|resolved) #([0-9]+)' | awk '{print $2}' | tr -d '#' | jq -R -s -c 'split("\n")[:-1]')
|
||||||
echo "issues=$ISSUES" >> $GITHUB_ENV
|
echo "issues=$ISSUES" >> $GITHUB_ENV
|
||||||
|
|
||||||
- name: Label Linked Issues
|
- name: Label Linked Issues
|
||||||
id: label_linked_issues
|
id: label_linked_issues
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
run: |
|
run: |
|
||||||
for ISSUE in $(echo $issues | jq -r '.[]'); do
|
for ISSUE in $(echo $issues | jq -r '.[]'); do
|
||||||
if [ "${{ github.ref }}" == "refs/heads/staging" ]; then
|
if [ "${{ github.ref }}" == "refs/heads/staging" ]; then
|
||||||
LABEL="✅ Done (staging)"
|
LABEL="✅ Done (staging)"
|
||||||
gh issue edit $ISSUE -R ${{ github.repository }} --add-label "$LABEL"
|
gh issue edit $ISSUE -R ${{ github.repository }} --add-label "$LABEL" --remove-label "🧑💻 In Progress"
|
||||||
elif [ "${{ github.ref }}" == "refs/heads/release" ]; then
|
elif [ "${{ github.ref }}" == "refs/heads/release" ]; then
|
||||||
LABEL="✅ Done"
|
LABEL="✅ Done"
|
||||||
gh issue edit $ISSUE -R ${{ github.repository }} --add-label "$LABEL"
|
gh issue edit $ISSUE -R ${{ github.repository }} --add-label "$LABEL" --remove-label "🧑💻 In Progress"
|
||||||
fi
|
fi
|
||||||
echo "Added label '$LABEL' to issue #$ISSUE"
|
echo "Added label '$LABEL' (and removed '🧑💻 In Progress' if present) in issue #$ISSUE"
|
||||||
done
|
done
|
||||||
|
17
.github/workflows/job-close-stale.yml
vendored
17
.github/workflows/job-close-stale.yml
vendored
@@ -6,6 +6,11 @@ on:
|
|||||||
schedule:
|
schedule:
|
||||||
- cron: '0 0 * * *' # Runs every day at midnight UTC
|
- cron: '0 0 * * *' # Runs every day at midnight UTC
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
issues: write
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
mark-inactivity:
|
mark-inactivity:
|
||||||
name: ⏳ Mark Issues/PRs without Activity
|
name: ⏳ Mark Issues/PRs without Activity
|
||||||
@@ -15,9 +20,9 @@ jobs:
|
|||||||
- name: Mark Issues/PRs without Activity
|
- name: Mark Issues/PRs without Activity
|
||||||
# Close Stale Issues and PRs
|
# Close Stale Issues and PRs
|
||||||
# https://github.com/marketplace/actions/close-stale-issues
|
# https://github.com/marketplace/actions/close-stale-issues
|
||||||
uses: actions/stale@v9
|
uses: actions/stale@v9.1.0
|
||||||
with:
|
with:
|
||||||
repo-token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
days-before-stale: 183
|
days-before-stale: 183
|
||||||
days-before-close: 7
|
days-before-close: 7
|
||||||
operations-per-run: 30
|
operations-per-run: 30
|
||||||
@@ -49,9 +54,9 @@ jobs:
|
|||||||
- name: Mark Issues/PRs Awaiting User Response
|
- name: Mark Issues/PRs Awaiting User Response
|
||||||
# Close Stale Issues and PRs
|
# Close Stale Issues and PRs
|
||||||
# https://github.com/marketplace/actions/close-stale-issues
|
# https://github.com/marketplace/actions/close-stale-issues
|
||||||
uses: actions/stale@v9
|
uses: actions/stale@v9.1.0
|
||||||
with:
|
with:
|
||||||
repo-token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
days-before-stale: 7
|
days-before-stale: 7
|
||||||
days-before-close: 7
|
days-before-close: 7
|
||||||
operations-per-run: 30
|
operations-per-run: 30
|
||||||
@@ -76,9 +81,9 @@ jobs:
|
|||||||
- name: Mark Issues with Alternative Exists
|
- name: Mark Issues with Alternative Exists
|
||||||
# Close Stale Issues and PRs
|
# Close Stale Issues and PRs
|
||||||
# https://github.com/marketplace/actions/close-stale-issues
|
# https://github.com/marketplace/actions/close-stale-issues
|
||||||
uses: actions/stale@v9
|
uses: actions/stale@v9.1.0
|
||||||
with:
|
with:
|
||||||
repo-token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
days-before-stale: 7
|
days-before-stale: 7
|
||||||
days-before-close: 7
|
days-before-close: 7
|
||||||
operations-per-run: 30
|
operations-per-run: 30
|
||||||
|
9
.github/workflows/on-close-handler.yml
vendored
9
.github/workflows/on-close-handler.yml
vendored
@@ -6,6 +6,11 @@ on:
|
|||||||
pull_request_target:
|
pull_request_target:
|
||||||
types: [closed]
|
types: [closed]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
issues: write
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
remove-labels:
|
remove-labels:
|
||||||
name: 🗑️ Remove Pending Labels on Close
|
name: 🗑️ Remove Pending Labels on Close
|
||||||
@@ -15,9 +20,9 @@ jobs:
|
|||||||
- name: Remove Pending Labels on Close
|
- name: Remove Pending Labels on Close
|
||||||
# 🤖 Issues Helper
|
# 🤖 Issues Helper
|
||||||
# https://github.com/marketplace/actions/issues-helper
|
# https://github.com/marketplace/actions/issues-helper
|
||||||
uses: actions-cool/issues-helper@v3
|
uses: actions-cool/issues-helper@v3.6.0
|
||||||
with:
|
with:
|
||||||
actions: remove-labels
|
actions: remove-labels
|
||||||
token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
issue-number: ${{ github.event.issue.number || github.event.pull_request.number }}
|
issue-number: ${{ github.event.issue.number || github.event.pull_request.number }}
|
||||||
labels: '🚏 Awaiting User Response,🧑💻 In Progress,📌 Keep Open,🚫 Merge Conflicts,🔬 Needs Testing,🔨 Needs Work,⚰️ Stale,⛔ Waiting For External/Upstream'
|
labels: '🚏 Awaiting User Response,🧑💻 In Progress,📌 Keep Open,🚫 Merge Conflicts,🔬 Needs Testing,🔨 Needs Work,⚰️ Stale,⛔ Waiting For External/Upstream'
|
||||||
|
9
.github/workflows/on-open-handler.yml
vendored
9
.github/workflows/on-open-handler.yml
vendored
@@ -6,6 +6,11 @@ on:
|
|||||||
pull_request_target:
|
pull_request_target:
|
||||||
types: [opened]
|
types: [opened]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
issues: write
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
label-maintainer:
|
label-maintainer:
|
||||||
name: 🏷️ Label if Author is a Repo Maintainer
|
name: 🏷️ Label if Author is a Repo Maintainer
|
||||||
@@ -16,9 +21,9 @@ jobs:
|
|||||||
- name: Label if Author is a Repo Maintainer
|
- name: Label if Author is a Repo Maintainer
|
||||||
# 🤖 Issues Helper
|
# 🤖 Issues Helper
|
||||||
# https://github.com/marketplace/actions/issues-helper
|
# https://github.com/marketplace/actions/issues-helper
|
||||||
uses: actions-cool/issues-helper@v3
|
uses: actions-cool/issues-helper@v3.6.0
|
||||||
with:
|
with:
|
||||||
actions: 'add-labels'
|
actions: 'add-labels'
|
||||||
token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
issue-number: ${{ github.event.issue.number || github.event.pull_request.number }}
|
issue-number: ${{ github.event.issue.number || github.event.pull_request.number }}
|
||||||
labels: '👷 Maintainer'
|
labels: '👷 Maintainer'
|
||||||
|
128
.github/workflows/pr-auto-manager.yml
vendored
128
.github/workflows/pr-auto-manager.yml
vendored
@@ -1,23 +1,82 @@
|
|||||||
name: 🔀 Pull Request Manager
|
name: 🔀 Pull Request Manager
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
workflow_dispatch: # Allow to manually call this workflow
|
||||||
pull_request_target:
|
pull_request_target:
|
||||||
types: [opened, synchronize, reopened, edited, labeled, unlabeled, closed]
|
types: [opened, synchronize, reopened, edited, labeled, unlabeled, closed]
|
||||||
pull_request_review_comment:
|
pull_request_review_comment:
|
||||||
types: [created]
|
types: [created]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
run-eslint:
|
||||||
|
name: ✅ Check ESLint on PR
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
# Only needs to run when code is changed
|
||||||
|
if: github.event.action == 'opened' || github.event.action == 'synchronize'
|
||||||
|
|
||||||
|
# Override permissions, linter likely needs write access to issues
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
issues: write
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout Repository
|
||||||
|
# Checkout
|
||||||
|
# https://github.com/marketplace/actions/checkout
|
||||||
|
uses: actions/checkout@v4.2.2
|
||||||
|
with:
|
||||||
|
ref: ${{ github.event.pull_request.head.sha }}
|
||||||
|
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||||
|
|
||||||
|
- name: Setup Node.js
|
||||||
|
# Setup Node.js environment
|
||||||
|
# https://github.com/marketplace/actions/setup-node-js-environment
|
||||||
|
uses: actions/setup-node@v4.3.0
|
||||||
|
with:
|
||||||
|
node-version: 20
|
||||||
|
|
||||||
|
- name: Run npm install
|
||||||
|
run: npm ci
|
||||||
|
|
||||||
|
- name: Run ESLint
|
||||||
|
# Action ESLint
|
||||||
|
# https://github.com/marketplace/actions/action-eslint
|
||||||
|
uses: sibiraj-s/action-eslint@v3.0.1
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
eslint-args: '--ignore-path=.gitignore --quiet'
|
||||||
|
extensions: 'js'
|
||||||
|
annotations: true
|
||||||
|
ignore-patterns: |
|
||||||
|
dist/
|
||||||
|
lib/
|
||||||
|
|
||||||
label-by-size:
|
label-by-size:
|
||||||
name: 🏷️ Label PR by Size
|
name: 🏷️ Label PR by Size
|
||||||
|
# This job should run after all others, to prevent possible concurrency issues
|
||||||
|
needs: [label-by-branches, label-by-files, remove-stale-label, check-merge-blocking-labels, write-auto-comments]
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
# Only needs to run when code is changed
|
||||||
|
if: always() && (github.event.action == 'opened' || github.event.action == 'synchronize')
|
||||||
|
|
||||||
|
# Override permissions, the labeler needs issues write access
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
issues: write
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Label PR Size
|
- name: Label PR Size
|
||||||
# Pull Request Size Labeler
|
# Pull Request Size Labeler
|
||||||
# https://github.com/marketplace/actions/pull-request-size-labeler
|
# https://github.com/marketplace/actions/pull-request-size-labeler
|
||||||
uses: codelytv/pr-size-labeler@v1
|
uses: codelytv/pr-size-labeler@v1.10.2
|
||||||
with:
|
with:
|
||||||
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
xs_label: '🟩 ⬤○○○○'
|
xs_label: '🟩 ⬤○○○○'
|
||||||
xs_max_size: '20'
|
xs_max_size: '20'
|
||||||
s_label: '🟩 ⬤⬤○○○'
|
s_label: '🟩 ⬤⬤○○○'
|
||||||
@@ -28,7 +87,6 @@ jobs:
|
|||||||
l_max_size: '1000'
|
l_max_size: '1000'
|
||||||
xl_label: '🟥 ⬤⬤⬤⬤⬤'
|
xl_label: '🟥 ⬤⬤⬤⬤⬤'
|
||||||
fail_if_xl: 'false'
|
fail_if_xl: 'false'
|
||||||
github_api_url: 'https://api.github.com'
|
|
||||||
files_to_ignore: |
|
files_to_ignore: |
|
||||||
"package-lock.json"
|
"package-lock.json"
|
||||||
"public/lib/*"
|
"public/lib/*"
|
||||||
@@ -36,55 +94,63 @@ jobs:
|
|||||||
label-by-branches:
|
label-by-branches:
|
||||||
name: 🏷️ Label PR by Branches
|
name: 🏷️ Label PR by Branches
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
# Only label once when PR is created or branches are changed, to allow manual label removal
|
# Only label once when PR is created or when base branch is changed, to allow manual label removal
|
||||||
if: github.event.action == 'opened' || (github.event.action == 'synchronize' && (github.event.changes.base || github.event.changes.head))
|
if: github.event.action == 'opened' || (github.event.action == 'synchronize' && github.event.changes.base)
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repository
|
- name: Checkout Repository
|
||||||
# Checkout
|
# Checkout
|
||||||
# https://github.com/marketplace/actions/checkout
|
# https://github.com/marketplace/actions/checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4.2.2
|
||||||
|
|
||||||
- name: Apply Labels Based on Branch Name and Target Branch
|
- name: Apply Labels Based on Branch Name and Target Branch
|
||||||
# Pull Request Labeler
|
# Pull Request Labeler
|
||||||
# https://github.com/marketplace/actions/labeler
|
# https://github.com/marketplace/actions/labeler
|
||||||
uses: actions/labeler@v5
|
uses: actions/labeler@v5.0.0
|
||||||
with:
|
with:
|
||||||
configuration-path: .github/pr-auto-labels-by-branch.yml
|
configuration-path: .github/pr-auto-labels-by-branch.yml
|
||||||
repo-token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
label-by-files:
|
label-by-files:
|
||||||
name: 🏷️ Label PR by Files
|
name: 🏷️ Label PR by Files
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
# Only needs to run when code is changed
|
||||||
|
if: github.event.action == 'opened' || github.event.action == 'synchronize'
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repository
|
- name: Checkout Repository
|
||||||
# Checkout
|
# Checkout
|
||||||
# https://github.com/marketplace/actions/checkout
|
# https://github.com/marketplace/actions/checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4.2.2
|
||||||
|
|
||||||
- name: Apply Labels Based on Changed Files
|
- name: Apply Labels Based on Changed Files
|
||||||
# Pull Request Labeler
|
# Pull Request Labeler
|
||||||
# https://github.com/marketplace/actions/labeler
|
# https://github.com/marketplace/actions/labeler
|
||||||
uses: actions/labeler@v5
|
uses: actions/labeler@v5.0.0
|
||||||
with:
|
with:
|
||||||
configuration-path: .github/pr-auto-labels-by-files.yml
|
configuration-path: .github/pr-auto-labels-by-files.yml
|
||||||
repo-token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
remove-stale-label:
|
remove-stale-label:
|
||||||
name: 🗑️ Remove Stale Label on Comment
|
name: 🗑️ Remove Stale Label on Comment
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
# Only runs when this is not done by the github actions bot
|
# Only runs on comments not done by the github actions bot
|
||||||
if: github.actor != 'github-actions[bot]'
|
if: github.event_name == 'pull_request_review_comment' && github.actor != 'github-actions[bot]'
|
||||||
|
|
||||||
|
# Override permissions, issue labeler needs issues write access
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
issues: write
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Remove Stale Label
|
- name: Remove Stale Label
|
||||||
# 🤖 Issues Helper
|
# 🤖 Issues Helper
|
||||||
# https://github.com/marketplace/actions/issues-helper
|
# https://github.com/marketplace/actions/issues-helper
|
||||||
uses: actions-cool/issues-helper@v3
|
uses: actions-cool/issues-helper@v3.6.0
|
||||||
with:
|
with:
|
||||||
actions: 'remove-labels'
|
actions: 'remove-labels'
|
||||||
token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
issue-number: ${{ github.event.pull_request.number }}
|
issue-number: ${{ github.event.pull_request.number }}
|
||||||
labels: '⚰️ Stale'
|
labels: '⚰️ Stale'
|
||||||
|
|
||||||
@@ -95,12 +161,18 @@ jobs:
|
|||||||
# Run, even if the previous jobs were skipped/failed
|
# Run, even if the previous jobs were skipped/failed
|
||||||
if: always()
|
if: always()
|
||||||
|
|
||||||
|
# Override permissions, as this needs to write a check
|
||||||
|
permissions:
|
||||||
|
checks: write
|
||||||
|
contents: read
|
||||||
|
pull-requests: read
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Check Merge Blocking
|
- name: Check Merge Blocking
|
||||||
# GitHub Script
|
# GitHub Script
|
||||||
# https://github.com/marketplace/actions/github-scriptLabels
|
# https://github.com/marketplace/actions/github-script
|
||||||
id: label-check
|
id: label-check
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v7.0.1
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const prLabels = context.payload.pull_request.labels.map(label => label.name);
|
const prLabels = context.payload.pull_request.labels.map(label => label.name);
|
||||||
@@ -134,7 +206,7 @@ jobs:
|
|||||||
|
|
||||||
write-auto-comments:
|
write-auto-comments:
|
||||||
name: 💬 Post PR Comments Based on Labels
|
name: 💬 Post PR Comments Based on Labels
|
||||||
needs: [label-by-size, label-by-branches, label-by-files]
|
needs: [label-by-branches, label-by-files]
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
# Run, even if the previous jobs were skipped/failed
|
# Run, even if the previous jobs were skipped/failed
|
||||||
if: always()
|
if: always()
|
||||||
@@ -143,15 +215,15 @@ jobs:
|
|||||||
- name: Checkout Repository
|
- name: Checkout Repository
|
||||||
# Checkout
|
# Checkout
|
||||||
# https://github.com/marketplace/actions/checkout
|
# https://github.com/marketplace/actions/checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4.2.2
|
||||||
|
|
||||||
- name: Post PR Comments Based on Labels
|
- name: Post PR Comments Based on Labels
|
||||||
# Label Commenter for PRs
|
# Label Commenter for PRs
|
||||||
# https://github.com/marketplace/actions/label-commenter
|
# https://github.com/marketplace/actions/label-commenter
|
||||||
uses: peaceiris/actions-label-commenter@v1
|
uses: peaceiris/actions-label-commenter@v1.10.0
|
||||||
with:
|
with:
|
||||||
config_file: .github/pr-auto-comments.yml
|
config_file: .github/pr-auto-comments.yml
|
||||||
github_token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
# This runs on merged PRs to staging, reading the PR body and directly linked issues. Check `issues-updates-on-merge.yml`:`update-linked-issues` for commit-based updates.
|
# This runs on merged PRs to staging, reading the PR body and directly linked issues. Check `issues-updates-on-merge.yml`:`update-linked-issues` for commit-based updates.
|
||||||
update-linked-issues:
|
update-linked-issues:
|
||||||
@@ -159,6 +231,12 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'staging'
|
if: github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'staging'
|
||||||
|
|
||||||
|
# Override permissions, We need to be able to write to issues
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
issues: write
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Extract Linked Issues From PR Description
|
- name: Extract Linked Issues From PR Description
|
||||||
id: extract_issues
|
id: extract_issues
|
||||||
@@ -172,7 +250,7 @@ jobs:
|
|||||||
PR_NUMBER=${{ github.event.pull_request.number }}
|
PR_NUMBER=${{ github.event.pull_request.number }}
|
||||||
REPO=${{ github.repository }}
|
REPO=${{ github.repository }}
|
||||||
API_URL="https://api.github.com/repos/$REPO/pulls/$PR_NUMBER/issues"
|
API_URL="https://api.github.com/repos/$REPO/pulls/$PR_NUMBER/issues"
|
||||||
ISSUES=$(curl -s -H "Authorization: token ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}" "$API_URL" | jq -r '.[].number' | jq -R -s -c 'split("\n")[:-1]')
|
ISSUES=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" "$API_URL" | jq -r '.[].number' | jq -R -s -c 'split("\n")[:-1]')
|
||||||
echo "linked_issues=$ISSUES" >> $GITHUB_ENV
|
echo "linked_issues=$ISSUES" >> $GITHUB_ENV
|
||||||
|
|
||||||
- name: Merge Issue Lists
|
- name: Merge Issue Lists
|
||||||
@@ -184,9 +262,9 @@ jobs:
|
|||||||
- name: Label Linked Issues
|
- name: Label Linked Issues
|
||||||
id: label_linked_issues
|
id: label_linked_issues
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
run: |
|
run: |
|
||||||
for ISSUE in $(echo $final_issues | jq -r '.[]'); do
|
for ISSUE in $(echo $final_issues | jq -r '.[]'); do
|
||||||
gh issue edit $ISSUE -R ${{ github.repository }} --add-label "✅ Done (staging)"
|
gh issue edit $ISSUE -R ${{ github.repository }} --add-label "✅ Done (staging)" --remove-label "🧑💻 In Progress"
|
||||||
echo "Added label '✅ Done (staging)' to issue #$ISSUE"
|
echo "Added label '✅ Done (staging)' (and removed '🧑💻 In Progress' if present) in issue #$ISSUE"
|
||||||
done
|
done
|
||||||
|
@@ -7,6 +7,10 @@ on:
|
|||||||
pull_request_target:
|
pull_request_target:
|
||||||
types: [synchronize]
|
types: [synchronize]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
check-merge-conflicts:
|
check-merge-conflicts:
|
||||||
name: ⚔️ Check Merge Conflicts
|
name: ⚔️ Check Merge Conflicts
|
||||||
@@ -16,9 +20,9 @@ jobs:
|
|||||||
- name: Check Merge Conflicts
|
- name: Check Merge Conflicts
|
||||||
# Label Conflicting Pull Requests
|
# Label Conflicting Pull Requests
|
||||||
# https://github.com/marketplace/actions/label-conflicting-pull-requests
|
# https://github.com/marketplace/actions/label-conflicting-pull-requests
|
||||||
uses: eps1lon/actions-label-merge-conflict@v3
|
uses: eps1lon/actions-label-merge-conflict@v3.0.3
|
||||||
with:
|
with:
|
||||||
dirtyLabel: '🚫 Merge Conflicts'
|
dirtyLabel: '🚫 Merge Conflicts'
|
||||||
repoToken: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
|
repoToken: ${{ secrets.GITHUB_TOKEN }}
|
||||||
commentOnDirty: >
|
commentOnDirty: >
|
||||||
⚠️ This PR has conflicts that need to be resolved before it can be merged.
|
⚠️ This PR has conflicts that need to be resolved before it can be merged.
|
||||||
|
@@ -12,3 +12,4 @@ access.log
|
|||||||
.vscode
|
.vscode
|
||||||
.git
|
.git
|
||||||
/public/scripts/extensions/third-party
|
/public/scripts/extensions/third-party
|
||||||
|
/colab
|
||||||
|
10
Dockerfile
10
Dockerfile
@@ -4,7 +4,7 @@ FROM node:lts-alpine3.19
|
|||||||
ARG APP_HOME=/home/node/app
|
ARG APP_HOME=/home/node/app
|
||||||
|
|
||||||
# Install system dependencies
|
# Install system dependencies
|
||||||
RUN apk add --no-cache gcompat tini git
|
RUN apk add --no-cache gcompat tini git git-lfs
|
||||||
|
|
||||||
# Create app directory
|
# Create app directory
|
||||||
WORKDIR ${APP_HOME}
|
WORKDIR ${APP_HOME}
|
||||||
@@ -12,15 +12,13 @@ WORKDIR ${APP_HOME}
|
|||||||
# Set NODE_ENV to production
|
# Set NODE_ENV to production
|
||||||
ENV NODE_ENV=production
|
ENV NODE_ENV=production
|
||||||
|
|
||||||
# Install app dependencies
|
# Bundle app source
|
||||||
COPY package*.json post-install.js ./
|
COPY . ./
|
||||||
|
|
||||||
RUN \
|
RUN \
|
||||||
echo "*** Install npm packages ***" && \
|
echo "*** Install npm packages ***" && \
|
||||||
npm i --no-audit --no-fund --loglevel=error --no-progress --omit=dev && npm cache clean --force
|
npm i --no-audit --no-fund --loglevel=error --no-progress --omit=dev && npm cache clean --force
|
||||||
|
|
||||||
# Bundle app source
|
|
||||||
COPY . ./
|
|
||||||
|
|
||||||
# Copy default chats, characters and user avatars to <folder>.default folder
|
# Copy default chats, characters and user avatars to <folder>.default folder
|
||||||
RUN \
|
RUN \
|
||||||
rm -f "config.yaml" || true && \
|
rm -f "config.yaml" || true && \
|
||||||
|
@@ -114,6 +114,8 @@ backups:
|
|||||||
chat:
|
chat:
|
||||||
# Enable automatic chat backups
|
# Enable automatic chat backups
|
||||||
enabled: true
|
enabled: true
|
||||||
|
# Verify integrity of chat files before saving
|
||||||
|
checkIntegrity: true
|
||||||
# Maximum number of chat backups to keep per user (starting from the most recent). Set to -1 to keep all backups.
|
# Maximum number of chat backups to keep per user (starting from the most recent). Set to -1 to keep all backups.
|
||||||
maxTotalBackups: -1
|
maxTotalBackups: -1
|
||||||
# Interval in milliseconds to throttle chat backups per user
|
# Interval in milliseconds to throttle chat backups per user
|
||||||
@@ -140,6 +142,8 @@ performance:
|
|||||||
lazyLoadCharacters: false
|
lazyLoadCharacters: false
|
||||||
# The maximum amount of memory that parsed character cards can use. Set to 0 to disable memory caching.
|
# The maximum amount of memory that parsed character cards can use. Set to 0 to disable memory caching.
|
||||||
memoryCacheCapacity: '100mb'
|
memoryCacheCapacity: '100mb'
|
||||||
|
# Enables disk caching for character cards. Improves performances with large card libraries.
|
||||||
|
useDiskCache: true
|
||||||
|
|
||||||
# Allow secret keys exposure via API
|
# Allow secret keys exposure via API
|
||||||
allowKeysExposure: false
|
allowKeysExposure: false
|
||||||
@@ -151,6 +155,7 @@ whitelistImportDomains:
|
|||||||
- cdn.discordapp.com
|
- cdn.discordapp.com
|
||||||
- files.catbox.moe
|
- files.catbox.moe
|
||||||
- raw.githubusercontent.com
|
- raw.githubusercontent.com
|
||||||
|
- char-archive.evulid.cc
|
||||||
# API request overrides (for KoboldAI and Text Completion APIs)
|
# API request overrides (for KoboldAI and Text Completion APIs)
|
||||||
## Note: host includes the port number if it's not the default (80 or 443)
|
## Note: host includes the port number if it's not the default (80 or 443)
|
||||||
## Format is an array of objects:
|
## Format is an array of objects:
|
||||||
@@ -229,6 +234,14 @@ claude:
|
|||||||
# should be ideal for most use cases.
|
# should be ideal for most use cases.
|
||||||
# Any value other than a non-negative integer will be ignored and caching at depth will not be enabled.
|
# Any value other than a non-negative integer will be ignored and caching at depth will not be enabled.
|
||||||
cachingAtDepth: -1
|
cachingAtDepth: -1
|
||||||
|
# Use 1h TTL instead of the default 5m.
|
||||||
|
## 5m: base price x 1.25
|
||||||
|
## 1h: base price x 2
|
||||||
|
extendedTTL: false
|
||||||
|
# -- GOOGLE GEMINI API CONFIGURATION --
|
||||||
|
gemini:
|
||||||
|
# API endpoint version ("v1beta" or "v1alpha")
|
||||||
|
apiVersion: 'v1beta'
|
||||||
# -- SERVER PLUGIN CONFIGURATION --
|
# -- SERVER PLUGIN CONFIGURATION --
|
||||||
enableServerPlugins: false
|
enableServerPlugins: false
|
||||||
# Attempt to automatically update server plugins on startup
|
# Attempt to automatically update server plugins on startup
|
||||||
|
@@ -540,7 +540,7 @@
|
|||||||
"type": "context"
|
"type": "context"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "presets/context/Pygmalion.json",
|
"filename": "presets/context/Metharme.json",
|
||||||
"type": "context"
|
"type": "context"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -563,6 +563,10 @@
|
|||||||
"filename": "presets/context/Llama 3 Instruct.json",
|
"filename": "presets/context/Llama 3 Instruct.json",
|
||||||
"type": "context"
|
"type": "context"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"filename": "presets/context/Llama 4 Instruct.json",
|
||||||
|
"type": "context"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"filename": "presets/context/Phi.json",
|
"filename": "presets/context/Phi.json",
|
||||||
"type": "context"
|
"type": "context"
|
||||||
@@ -615,10 +619,6 @@
|
|||||||
"filename": "presets/instruct/OpenOrca-OpenChat.json",
|
"filename": "presets/instruct/OpenOrca-OpenChat.json",
|
||||||
"type": "instruct"
|
"type": "instruct"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"filename": "presets/instruct/Pygmalion.json",
|
|
||||||
"type": "instruct"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"filename": "presets/instruct/Story.json",
|
"filename": "presets/instruct/Story.json",
|
||||||
"type": "instruct"
|
"type": "instruct"
|
||||||
@@ -663,6 +663,10 @@
|
|||||||
"filename": "presets/instruct/Llama 3 Instruct.json",
|
"filename": "presets/instruct/Llama 3 Instruct.json",
|
||||||
"type": "instruct"
|
"type": "instruct"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"filename": "presets/instruct/Llama 4 Instruct.json",
|
||||||
|
"type": "instruct"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"filename": "presets/instruct/Phi.json",
|
"filename": "presets/instruct/Phi.json",
|
||||||
"type": "instruct"
|
"type": "instruct"
|
||||||
@@ -747,6 +751,10 @@
|
|||||||
"filename": "presets/sysprompt/Neutral - Chat.json",
|
"filename": "presets/sysprompt/Neutral - Chat.json",
|
||||||
"type": "sysprompt"
|
"type": "sysprompt"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"filename": "presets/sysprompt/Lightning 1.1.json",
|
||||||
|
"type": "sysprompt"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"filename": "presets/instruct/Mistral V1.json",
|
"filename": "presets/instruct/Mistral V1.json",
|
||||||
"type": "instruct"
|
"type": "instruct"
|
||||||
@@ -786,5 +794,21 @@
|
|||||||
{
|
{
|
||||||
"filename": "presets/context/DeepSeek-V2.5.json",
|
"filename": "presets/context/DeepSeek-V2.5.json",
|
||||||
"type": "context"
|
"type": "context"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "presets/instruct/GLM-4.json",
|
||||||
|
"type": "instruct"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "presets/context/GLM-4.json",
|
||||||
|
"type": "context"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "presets/reasoning/DeepSeek.json",
|
||||||
|
"type": "reasoning"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "presets/reasoning/Blank.json",
|
||||||
|
"type": "reasoning"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
"example_separator": "",
|
"example_separator": "",
|
||||||
"chat_start": "",
|
"chat_start": "",
|
||||||
"use_stop_strings": false,
|
"use_stop_strings": false,
|
||||||
"allow_jailbreak": false,
|
|
||||||
"always_force_name2": false,
|
"always_force_name2": false,
|
||||||
"trim_sentences": false,
|
"trim_sentences": false,
|
||||||
"single_line": true,
|
"single_line": true,
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
"example_separator": "",
|
"example_separator": "",
|
||||||
"chat_start": "",
|
"chat_start": "",
|
||||||
"use_stop_strings": false,
|
"use_stop_strings": false,
|
||||||
"allow_jailbreak": false,
|
|
||||||
"always_force_name2": false,
|
"always_force_name2": false,
|
||||||
"trim_sentences": false,
|
"trim_sentences": false,
|
||||||
"single_line": false,
|
"single_line": false,
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
"example_separator": "",
|
"example_separator": "",
|
||||||
"chat_start": "",
|
"chat_start": "",
|
||||||
"use_stop_strings": false,
|
"use_stop_strings": false,
|
||||||
"allow_jailbreak": false,
|
|
||||||
"always_force_name2": true,
|
"always_force_name2": true,
|
||||||
"trim_sentences": false,
|
"trim_sentences": false,
|
||||||
"single_line": false,
|
"single_line": false,
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
"example_separator": "",
|
"example_separator": "",
|
||||||
"chat_start": "",
|
"chat_start": "",
|
||||||
"use_stop_strings": false,
|
"use_stop_strings": false,
|
||||||
"allow_jailbreak": false,
|
|
||||||
"always_force_name2": true,
|
"always_force_name2": true,
|
||||||
"trim_sentences": false,
|
"trim_sentences": false,
|
||||||
"single_line": false,
|
"single_line": false,
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
"example_separator": "",
|
"example_separator": "",
|
||||||
"chat_start": "",
|
"chat_start": "",
|
||||||
"use_stop_strings": false,
|
"use_stop_strings": false,
|
||||||
"allow_jailbreak": false,
|
|
||||||
"always_force_name2": true,
|
"always_force_name2": true,
|
||||||
"trim_sentences": false,
|
"trim_sentences": false,
|
||||||
"single_line": false,
|
"single_line": false,
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
"example_separator": "",
|
"example_separator": "",
|
||||||
"chat_start": "<|START_OF_TURN_TOKEN|><|SYSTEM_TOKEN|>New Roleplay:<|END_OF_TURN_TOKEN|>",
|
"chat_start": "<|START_OF_TURN_TOKEN|><|SYSTEM_TOKEN|>New Roleplay:<|END_OF_TURN_TOKEN|>",
|
||||||
"use_stop_strings": false,
|
"use_stop_strings": false,
|
||||||
"allow_jailbreak": false,
|
|
||||||
"always_force_name2": true,
|
"always_force_name2": true,
|
||||||
"trim_sentences": false,
|
"trim_sentences": false,
|
||||||
"single_line": false,
|
"single_line": false,
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
"example_separator": "",
|
"example_separator": "",
|
||||||
"chat_start": "",
|
"chat_start": "",
|
||||||
"use_stop_strings": false,
|
"use_stop_strings": false,
|
||||||
"allow_jailbreak": false,
|
|
||||||
"always_force_name2": true,
|
"always_force_name2": true,
|
||||||
"trim_sentences": false,
|
"trim_sentences": false,
|
||||||
"single_line": false,
|
"single_line": false,
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
"example_separator": "***",
|
"example_separator": "***",
|
||||||
"chat_start": "***",
|
"chat_start": "***",
|
||||||
"use_stop_strings": false,
|
"use_stop_strings": false,
|
||||||
"allow_jailbreak": false,
|
|
||||||
"always_force_name2": true,
|
"always_force_name2": true,
|
||||||
"trim_sentences": false,
|
"trim_sentences": false,
|
||||||
"single_line": false,
|
"single_line": false,
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
"example_separator": "",
|
"example_separator": "",
|
||||||
"chat_start": "",
|
"chat_start": "",
|
||||||
"use_stop_strings": false,
|
"use_stop_strings": false,
|
||||||
"allow_jailbreak": false,
|
|
||||||
"always_force_name2": false,
|
"always_force_name2": false,
|
||||||
"trim_sentences": true,
|
"trim_sentences": true,
|
||||||
"single_line": false,
|
"single_line": false,
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
"example_separator": "<|eot_id|>\n<|start_header_id|>user<|end_header_id|>\n\nWrite an example narrative / conversation that is not part of the main story.",
|
"example_separator": "<|eot_id|>\n<|start_header_id|>user<|end_header_id|>\n\nWrite an example narrative / conversation that is not part of the main story.",
|
||||||
"chat_start": "<|eot_id|>\n<|start_header_id|>user<|end_header_id|>\n\nStart the role-play between {{char}} and {{user}}.",
|
"chat_start": "<|eot_id|>\n<|start_header_id|>user<|end_header_id|>\n\nStart the role-play between {{char}} and {{user}}.",
|
||||||
"use_stop_strings": false,
|
"use_stop_strings": false,
|
||||||
"allow_jailbreak": false,
|
|
||||||
"always_force_name2": false,
|
"always_force_name2": false,
|
||||||
"trim_sentences": true,
|
"trim_sentences": true,
|
||||||
"single_line": false,
|
"single_line": false,
|
||||||
|
10
default/content/presets/context/GLM-4.json
Normal file
10
default/content/presets/context/GLM-4.json
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"story_string": "[gMASK]<sop>{{#if system}}{{system}}\n{{/if}}{{#if wiBefore}}{{wiBefore}}\n{{/if}}{{#if description}}{{description}}\n{{/if}}{{#if personality}}{{char}}'s personality: {{personality}}\n{{/if}}{{#if scenario}}Scenario: {{scenario}}\n{{/if}}{{#if wiAfter}}{{wiAfter}}\n{{/if}}{{#if persona}}{{persona}}\n{{/if}}{{trim}}\n",
|
||||||
|
"example_separator": "",
|
||||||
|
"chat_start": "",
|
||||||
|
"use_stop_strings": false,
|
||||||
|
"always_force_name2": true,
|
||||||
|
"trim_sentences": false,
|
||||||
|
"single_line": false,
|
||||||
|
"name": "GLM-4"
|
||||||
|
}
|
@@ -3,7 +3,6 @@
|
|||||||
"example_separator": "",
|
"example_separator": "",
|
||||||
"chat_start": "",
|
"chat_start": "",
|
||||||
"use_stop_strings": false,
|
"use_stop_strings": false,
|
||||||
"allow_jailbreak": false,
|
|
||||||
"always_force_name2": true,
|
"always_force_name2": true,
|
||||||
"trim_sentences": false,
|
"trim_sentences": false,
|
||||||
"single_line": false,
|
"single_line": false,
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
"example_separator": "### Example:",
|
"example_separator": "### Example:",
|
||||||
"chat_start": "### START ROLEPLAY:",
|
"chat_start": "### START ROLEPLAY:",
|
||||||
"use_stop_strings": false,
|
"use_stop_strings": false,
|
||||||
"allow_jailbreak": false,
|
|
||||||
"always_force_name2": true,
|
"always_force_name2": true,
|
||||||
"trim_sentences": false,
|
"trim_sentences": false,
|
||||||
"single_line": false,
|
"single_line": false,
|
||||||
|
@@ -1,9 +1,8 @@
|
|||||||
{
|
{
|
||||||
"story_string": "{{system}}\n{{#if wiBefore}}{{wiBefore}}\n{{/if}}{{#if description}}{{char}}'s description:{{description}}\n{{/if}}{{#if personality}}{{char}}'s personality:{{personality}}\n{{/if}}{{#if scenario}}Scenario: {{scenario}}\n{{/if}}{{#if wiAfter}}{{wiAfter}}\n{{/if}}{{#if persona}}{{user}}'s persona: {{persona}}\n{{/if}}",
|
"story_string": "Below is an instruction that describes a task. Write a response that appropriately completes the request.\n\n### Instruction:\n{{system}}\n{{#if wiBefore}}{{wiBefore}}\n{{/if}}{{#if description}}{{char}}'s description:{{description}}\n{{/if}}{{#if personality}}{{char}}'s personality:{{personality}}\n{{/if}}{{#if scenario}}Scenario: {{scenario}}\n{{/if}}{{#if wiAfter}}{{wiAfter}}\n{{/if}}{{#if persona}}{{user}}'s persona: {{persona}}\n{{/if}}\n\n",
|
||||||
"example_separator": "Example of an interaction:",
|
"example_separator": "Example of an interaction:\n",
|
||||||
"chat_start": "This is the history of the roleplay:",
|
"chat_start": "This is the history of the roleplay:\n",
|
||||||
"use_stop_strings": false,
|
"use_stop_strings": false,
|
||||||
"allow_jailbreak": false,
|
|
||||||
"always_force_name2": true,
|
"always_force_name2": true,
|
||||||
"trim_sentences": false,
|
"trim_sentences": false,
|
||||||
"single_line": false,
|
"single_line": false,
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
"example_separator": "",
|
"example_separator": "",
|
||||||
"chat_start": "",
|
"chat_start": "",
|
||||||
"use_stop_strings": false,
|
"use_stop_strings": false,
|
||||||
"allow_jailbreak": false,
|
|
||||||
"always_force_name2": true,
|
"always_force_name2": true,
|
||||||
"trim_sentences": false,
|
"trim_sentences": false,
|
||||||
"single_line": false,
|
"single_line": false,
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
"example_separator": "",
|
"example_separator": "",
|
||||||
"chat_start": "",
|
"chat_start": "",
|
||||||
"use_stop_strings": false,
|
"use_stop_strings": false,
|
||||||
"allow_jailbreak": false,
|
|
||||||
"always_force_name2": true,
|
"always_force_name2": true,
|
||||||
"trim_sentences": false,
|
"trim_sentences": false,
|
||||||
"single_line": false,
|
"single_line": false,
|
||||||
|
10
default/content/presets/context/Llama 4 Instruct.json
Normal file
10
default/content/presets/context/Llama 4 Instruct.json
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"story_string": "<|begin_of_text|><|header_start|>system<|header_end|>\n\n{{#if system}}{{system}}\n{{/if}}{{#if wiBefore}}{{wiBefore}}\n{{/if}}{{#if description}}{{description}}\n{{/if}}{{#if personality}}{{char}}'s personality: {{personality}}\n{{/if}}{{#if scenario}}Scenario: {{scenario}}\n{{/if}}{{#if wiAfter}}{{wiAfter}}\n{{/if}}{{#if persona}}{{persona}}\n{{/if}}{{trim}}<|eot|>",
|
||||||
|
"example_separator": "",
|
||||||
|
"chat_start": "",
|
||||||
|
"use_stop_strings": false,
|
||||||
|
"always_force_name2": true,
|
||||||
|
"trim_sentences": false,
|
||||||
|
"single_line": false,
|
||||||
|
"name": "Llama 4 Instruct"
|
||||||
|
}
|
@@ -3,7 +3,6 @@
|
|||||||
"example_separator": "",
|
"example_separator": "",
|
||||||
"chat_start": "",
|
"chat_start": "",
|
||||||
"use_stop_strings": false,
|
"use_stop_strings": false,
|
||||||
"allow_jailbreak": false,
|
|
||||||
"always_force_name2": true,
|
"always_force_name2": true,
|
||||||
"trim_sentences": false,
|
"trim_sentences": false,
|
||||||
"single_line": false,
|
"single_line": false,
|
||||||
|
@@ -3,9 +3,8 @@
|
|||||||
"example_separator": "",
|
"example_separator": "",
|
||||||
"chat_start": "",
|
"chat_start": "",
|
||||||
"use_stop_strings": false,
|
"use_stop_strings": false,
|
||||||
"allow_jailbreak": false,
|
|
||||||
"always_force_name2": true,
|
"always_force_name2": true,
|
||||||
"trim_sentences": false,
|
"trim_sentences": false,
|
||||||
"single_line": false,
|
"single_line": false,
|
||||||
"name": "Pygmalion"
|
"name": "Metharme"
|
||||||
}
|
}
|
@@ -3,7 +3,6 @@
|
|||||||
"example_separator": "",
|
"example_separator": "",
|
||||||
"chat_start": "",
|
"chat_start": "",
|
||||||
"use_stop_strings": false,
|
"use_stop_strings": false,
|
||||||
"allow_jailbreak": false,
|
|
||||||
"always_force_name2": true,
|
"always_force_name2": true,
|
||||||
"trim_sentences": false,
|
"trim_sentences": false,
|
||||||
"single_line": false,
|
"single_line": false,
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
"example_separator": "",
|
"example_separator": "",
|
||||||
"chat_start": "",
|
"chat_start": "",
|
||||||
"use_stop_strings": false,
|
"use_stop_strings": false,
|
||||||
"allow_jailbreak": false,
|
|
||||||
"always_force_name2": true,
|
"always_force_name2": true,
|
||||||
"trim_sentences": false,
|
"trim_sentences": false,
|
||||||
"single_line": false,
|
"single_line": false,
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
"example_separator": "",
|
"example_separator": "",
|
||||||
"chat_start": "",
|
"chat_start": "",
|
||||||
"use_stop_strings": false,
|
"use_stop_strings": false,
|
||||||
"allow_jailbreak": false,
|
|
||||||
"always_force_name2": true,
|
"always_force_name2": true,
|
||||||
"trim_sentences": false,
|
"trim_sentences": false,
|
||||||
"single_line": false,
|
"single_line": false,
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
"example_separator": "",
|
"example_separator": "",
|
||||||
"chat_start": "",
|
"chat_start": "",
|
||||||
"use_stop_strings": false,
|
"use_stop_strings": false,
|
||||||
"allow_jailbreak": false,
|
|
||||||
"always_force_name2": true,
|
"always_force_name2": true,
|
||||||
"trim_sentences": false,
|
"trim_sentences": false,
|
||||||
"single_line": false,
|
"single_line": false,
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
"example_separator": "",
|
"example_separator": "",
|
||||||
"chat_start": "",
|
"chat_start": "",
|
||||||
"use_stop_strings": false,
|
"use_stop_strings": false,
|
||||||
"allow_jailbreak": false,
|
|
||||||
"always_force_name2": true,
|
"always_force_name2": true,
|
||||||
"trim_sentences": false,
|
"trim_sentences": false,
|
||||||
"single_line": false,
|
"single_line": false,
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
"example_separator": "***",
|
"example_separator": "***",
|
||||||
"chat_start": "***",
|
"chat_start": "***",
|
||||||
"use_stop_strings": false,
|
"use_stop_strings": false,
|
||||||
"allow_jailbreak": false,
|
|
||||||
"always_force_name2": true,
|
"always_force_name2": true,
|
||||||
"trim_sentences": false,
|
"trim_sentences": false,
|
||||||
"single_line": false,
|
"single_line": false,
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
"example_separator": "This is how {{char}} should talk",
|
"example_separator": "This is how {{char}} should talk",
|
||||||
"chat_start": "\nThen the roleplay chat between {{user}} and {{char}} begins.\n",
|
"chat_start": "\nThen the roleplay chat between {{user}} and {{char}} begins.\n",
|
||||||
"use_stop_strings": false,
|
"use_stop_strings": false,
|
||||||
"allow_jailbreak": false,
|
|
||||||
"always_force_name2": true,
|
"always_force_name2": true,
|
||||||
"trim_sentences": false,
|
"trim_sentences": false,
|
||||||
"single_line": false,
|
"single_line": false,
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
"example_separator": "",
|
"example_separator": "",
|
||||||
"chat_start": "",
|
"chat_start": "",
|
||||||
"use_stop_strings": false,
|
"use_stop_strings": false,
|
||||||
"allow_jailbreak": false,
|
|
||||||
"always_force_name2": true,
|
"always_force_name2": true,
|
||||||
"trim_sentences": false,
|
"trim_sentences": false,
|
||||||
"single_line": false,
|
"single_line": false,
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
"example_separator": "",
|
"example_separator": "",
|
||||||
"chat_start": "",
|
"chat_start": "",
|
||||||
"use_stop_strings": false,
|
"use_stop_strings": false,
|
||||||
"allow_jailbreak": false,
|
|
||||||
"always_force_name2": true,
|
"always_force_name2": true,
|
||||||
"trim_sentences": false,
|
"trim_sentences": false,
|
||||||
"single_line": false,
|
"single_line": false,
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
"example_separator": "",
|
"example_separator": "",
|
||||||
"chat_start": "",
|
"chat_start": "",
|
||||||
"use_stop_strings": false,
|
"use_stop_strings": false,
|
||||||
"allow_jailbreak": false,
|
|
||||||
"always_force_name2": true,
|
"always_force_name2": true,
|
||||||
"trim_sentences": false,
|
"trim_sentences": false,
|
||||||
"single_line": false,
|
"single_line": false,
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
"example_separator": "",
|
"example_separator": "",
|
||||||
"chat_start": "",
|
"chat_start": "",
|
||||||
"use_stop_strings": false,
|
"use_stop_strings": false,
|
||||||
"allow_jailbreak": false,
|
|
||||||
"always_force_name2": true,
|
"always_force_name2": true,
|
||||||
"trim_sentences": false,
|
"trim_sentences": false,
|
||||||
"single_line": false,
|
"single_line": false,
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
"example_separator": "### New Roleplay:",
|
"example_separator": "### New Roleplay:",
|
||||||
"chat_start": "### New Roleplay:",
|
"chat_start": "### New Roleplay:",
|
||||||
"use_stop_strings": false,
|
"use_stop_strings": false,
|
||||||
"allow_jailbreak": false,
|
|
||||||
"always_force_name2": true,
|
"always_force_name2": true,
|
||||||
"trim_sentences": false,
|
"trim_sentences": false,
|
||||||
"single_line": false,
|
"single_line": false,
|
||||||
|
@@ -6,7 +6,7 @@
|
|||||||
"stop_sequence": "<|im_end|>",
|
"stop_sequence": "<|im_end|>",
|
||||||
"wrap": true,
|
"wrap": true,
|
||||||
"macro": true,
|
"macro": true,
|
||||||
"names_behavior": "always",
|
"names_behavior": "force",
|
||||||
"activation_regex": "",
|
"activation_regex": "",
|
||||||
"system_sequence_prefix": "",
|
"system_sequence_prefix": "",
|
||||||
"system_sequence_suffix": "",
|
"system_sequence_suffix": "",
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
"stop_sequence": "<|END_OF_TURN_TOKEN|>",
|
"stop_sequence": "<|END_OF_TURN_TOKEN|>",
|
||||||
"wrap": false,
|
"wrap": false,
|
||||||
"macro": true,
|
"macro": true,
|
||||||
"names_behavior": "always",
|
"names_behavior": "force",
|
||||||
"activation_regex": "",
|
"activation_regex": "",
|
||||||
"skip_examples": false,
|
"skip_examples": false,
|
||||||
"output_suffix": "<|END_OF_TURN_TOKEN|>",
|
"output_suffix": "<|END_OF_TURN_TOKEN|>",
|
||||||
|
@@ -1,22 +1,22 @@
|
|||||||
{
|
{
|
||||||
"input_sequence": "<|user|>",
|
"input_sequence": "<|user|>\n",
|
||||||
"output_sequence": "<|model|>",
|
"output_sequence": "<|assistant|>\n",
|
||||||
|
"first_output_sequence": "",
|
||||||
"last_output_sequence": "",
|
"last_output_sequence": "",
|
||||||
"system_sequence": "",
|
"system_sequence_prefix": "<|system|>\n",
|
||||||
"stop_sequence": "<|user|>",
|
"system_sequence_suffix": "",
|
||||||
|
"stop_sequence": "",
|
||||||
"wrap": false,
|
"wrap": false,
|
||||||
"macro": true,
|
"macro": true,
|
||||||
"names_behavior": "always",
|
"names_behavior": "force",
|
||||||
"activation_regex": "",
|
"activation_regex": "",
|
||||||
"system_sequence_prefix": "<|system|>",
|
|
||||||
"system_sequence_suffix": "",
|
|
||||||
"first_output_sequence": "",
|
|
||||||
"skip_examples": false,
|
"skip_examples": false,
|
||||||
"output_suffix": "",
|
"output_suffix": "",
|
||||||
"input_suffix": "",
|
"input_suffix": "",
|
||||||
|
"system_sequence": "",
|
||||||
"system_suffix": "",
|
"system_suffix": "",
|
||||||
"user_alignment_message": "",
|
"user_alignment_message": "",
|
||||||
"system_same_as_user": true,
|
|
||||||
"last_system_sequence": "",
|
"last_system_sequence": "",
|
||||||
"name": "Pygmalion"
|
"system_same_as_user": true,
|
||||||
|
"name": "GLM-4"
|
||||||
}
|
}
|
@@ -6,7 +6,7 @@
|
|||||||
"stop_sequence": "<end_of_turn>",
|
"stop_sequence": "<end_of_turn>",
|
||||||
"wrap": true,
|
"wrap": true,
|
||||||
"macro": true,
|
"macro": true,
|
||||||
"names_behavior": "none",
|
"names_behavior": "force",
|
||||||
"activation_regex": "",
|
"activation_regex": "",
|
||||||
"system_sequence_prefix": "",
|
"system_sequence_prefix": "",
|
||||||
"system_sequence_suffix": "",
|
"system_sequence_suffix": "",
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"input_sequence": "### Instruction:",
|
"input_sequence": "### Instruction:",
|
||||||
"output_sequence": "### Response: (length = unlimited)",
|
"output_sequence": "### Response:",
|
||||||
"last_output_sequence": "",
|
"last_output_sequence": "### Response: (length = unlimited)",
|
||||||
"system_sequence": "",
|
"system_sequence": "",
|
||||||
"stop_sequence": "",
|
"stop_sequence": "",
|
||||||
"wrap": true,
|
"wrap": true,
|
||||||
@@ -12,8 +12,8 @@
|
|||||||
"system_sequence_suffix": "",
|
"system_sequence_suffix": "",
|
||||||
"first_output_sequence": "",
|
"first_output_sequence": "",
|
||||||
"skip_examples": false,
|
"skip_examples": false,
|
||||||
"output_suffix": "",
|
"output_suffix": "\n\n",
|
||||||
"input_suffix": "",
|
"input_suffix": "\n\n",
|
||||||
"system_suffix": "",
|
"system_suffix": "",
|
||||||
"user_alignment_message": "",
|
"user_alignment_message": "",
|
||||||
"system_same_as_user": true,
|
"system_same_as_user": true,
|
||||||
|
@@ -6,7 +6,7 @@
|
|||||||
"stop_sequence": "<|eot_id|>",
|
"stop_sequence": "<|eot_id|>",
|
||||||
"wrap": false,
|
"wrap": false,
|
||||||
"macro": true,
|
"macro": true,
|
||||||
"names_behavior": "always",
|
"names_behavior": "force",
|
||||||
"activation_regex": "",
|
"activation_regex": "",
|
||||||
"system_sequence_prefix": "",
|
"system_sequence_prefix": "",
|
||||||
"system_sequence_suffix": "",
|
"system_sequence_suffix": "",
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
"input_suffix": "<|eot_id|>",
|
"input_suffix": "<|eot_id|>",
|
||||||
"system_suffix": "<|eot_id|>",
|
"system_suffix": "<|eot_id|>",
|
||||||
"user_alignment_message": "",
|
"user_alignment_message": "",
|
||||||
"system_same_as_user": true,
|
"system_same_as_user": false,
|
||||||
"last_system_sequence": "",
|
"last_system_sequence": "",
|
||||||
"name": "Llama 3 Instruct"
|
"name": "Llama 3 Instruct"
|
||||||
}
|
}
|
||||||
|
22
default/content/presets/instruct/Llama 4 Instruct.json
Normal file
22
default/content/presets/instruct/Llama 4 Instruct.json
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"input_sequence": "<|header_start|>user<|header_end|>\n\n",
|
||||||
|
"output_sequence": "<|header_start|>assistant<|header_end|>\n\n",
|
||||||
|
"last_output_sequence": "",
|
||||||
|
"system_sequence": "<|header_start|>system<|header_end|>\n\n",
|
||||||
|
"stop_sequence": "<|eot|>",
|
||||||
|
"wrap": false,
|
||||||
|
"macro": true,
|
||||||
|
"names_behavior": "force",
|
||||||
|
"activation_regex": "",
|
||||||
|
"system_sequence_prefix": "",
|
||||||
|
"system_sequence_suffix": "",
|
||||||
|
"first_output_sequence": "",
|
||||||
|
"skip_examples": false,
|
||||||
|
"output_suffix": "<|eot|>",
|
||||||
|
"input_suffix": "<|eot|>",
|
||||||
|
"system_suffix": "<|eot|>",
|
||||||
|
"user_alignment_message": "",
|
||||||
|
"system_same_as_user": false,
|
||||||
|
"last_system_sequence": "",
|
||||||
|
"name": "Llama 4 Instruct"
|
||||||
|
}
|
@@ -6,7 +6,7 @@
|
|||||||
"stop_sequence": "",
|
"stop_sequence": "",
|
||||||
"wrap": false,
|
"wrap": false,
|
||||||
"macro": true,
|
"macro": true,
|
||||||
"names_behavior": "always",
|
"names_behavior": "force",
|
||||||
"activation_regex": "",
|
"activation_regex": "",
|
||||||
"system_sequence_prefix": "",
|
"system_sequence_prefix": "",
|
||||||
"system_sequence_suffix": "",
|
"system_sequence_suffix": "",
|
||||||
|
@@ -6,7 +6,7 @@
|
|||||||
"stop_sequence": "",
|
"stop_sequence": "",
|
||||||
"wrap": false,
|
"wrap": false,
|
||||||
"macro": true,
|
"macro": true,
|
||||||
"names_behavior": "always",
|
"names_behavior": "force",
|
||||||
"activation_regex": "",
|
"activation_regex": "",
|
||||||
"system_sequence_prefix": "",
|
"system_sequence_prefix": "",
|
||||||
"system_sequence_suffix": "",
|
"system_sequence_suffix": "",
|
||||||
|
@@ -6,7 +6,7 @@
|
|||||||
"stop_sequence": "",
|
"stop_sequence": "",
|
||||||
"wrap": false,
|
"wrap": false,
|
||||||
"macro": true,
|
"macro": true,
|
||||||
"names_behavior": "always",
|
"names_behavior": "force",
|
||||||
"activation_regex": "",
|
"activation_regex": "",
|
||||||
"system_sequence_prefix": "",
|
"system_sequence_prefix": "",
|
||||||
"system_sequence_suffix": "",
|
"system_sequence_suffix": "",
|
||||||
|
@@ -6,7 +6,7 @@
|
|||||||
"stop_sequence": "</s>",
|
"stop_sequence": "</s>",
|
||||||
"wrap": false,
|
"wrap": false,
|
||||||
"macro": true,
|
"macro": true,
|
||||||
"names_behavior": "always",
|
"names_behavior": "force",
|
||||||
"activation_regex": "",
|
"activation_regex": "",
|
||||||
"system_sequence_prefix": "",
|
"system_sequence_prefix": "",
|
||||||
"system_sequence_suffix": "",
|
"system_sequence_suffix": "",
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
"stop_sequence": "<|end|>",
|
"stop_sequence": "<|end|>",
|
||||||
"wrap": false,
|
"wrap": false,
|
||||||
"macro": true,
|
"macro": true,
|
||||||
"names_behavior": "always",
|
"names_behavior": "force",
|
||||||
"activation_regex": "",
|
"activation_regex": "",
|
||||||
"skip_examples": false,
|
"skip_examples": false,
|
||||||
"output_suffix": "<|end|>\n",
|
"output_suffix": "<|end|>\n",
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
"stop_sequence": "<|end_of_text|>",
|
"stop_sequence": "<|end_of_text|>",
|
||||||
"wrap": false,
|
"wrap": false,
|
||||||
"macro": true,
|
"macro": true,
|
||||||
"names_behavior": "always",
|
"names_behavior": "force",
|
||||||
"activation_regex": "",
|
"activation_regex": "",
|
||||||
"skip_examples": false,
|
"skip_examples": false,
|
||||||
"output_suffix": "<|end_of_text|>\n",
|
"output_suffix": "<|end_of_text|>\n",
|
||||||
|
@@ -15,6 +15,7 @@
|
|||||||
"custom_exclude_body": "",
|
"custom_exclude_body": "",
|
||||||
"custom_include_headers": "",
|
"custom_include_headers": "",
|
||||||
"google_model": "gemini-pro",
|
"google_model": "gemini-pro",
|
||||||
|
"vertexai_model": "gemini-2.0-flash-001",
|
||||||
"temperature": 1,
|
"temperature": 1,
|
||||||
"frequency_penalty": 0,
|
"frequency_penalty": 0,
|
||||||
"presence_penalty": 0,
|
"presence_penalty": 0,
|
||||||
|
6
default/content/presets/reasoning/Blank.json
Normal file
6
default/content/presets/reasoning/Blank.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"name": "Blank",
|
||||||
|
"prefix": "",
|
||||||
|
"suffix": "",
|
||||||
|
"separator": ""
|
||||||
|
}
|
6
default/content/presets/reasoning/DeepSeek.json
Normal file
6
default/content/presets/reasoning/DeepSeek.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"name": "DeepSeek",
|
||||||
|
"prefix": "<think>\n",
|
||||||
|
"suffix": "\n</think>",
|
||||||
|
"separator": "\n\n"
|
||||||
|
}
|
@@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Actor",
|
"name": "Actor",
|
||||||
"content": "You are an expert actor that can fully immerse yourself into any role given. You do not break character for any reason, even if someone tries addressing you as an AI or language model. Currently your role is {{char}}, which is described in detail below. As {{char}}, continue the exchange with {{user}}."
|
"content": "You are an expert actor that can fully immerse yourself into any role given. You do not break character for any reason, even if someone tries addressing you as an AI or language model. Currently your role is {{char}}, which is described in detail below. As {{char}}, continue the exchange with {{user}}.",
|
||||||
|
"post_history": ""
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Assistant - Expert",
|
"name": "Assistant - Expert",
|
||||||
"content": "You are a helpful assistant. Please answer truthfully and write out your thinking step by step to be sure you get the right answer. If you make a mistake or encounter an error in your thinking, say so out loud and attempt to correct it. If you don't know or aren't sure about something, say so clearly. You will act as a professional logician, mathematician, and physicist. You will also act as the most appropriate type of expert to answer any particular question or solve the relevant problem; state which expert type your are, if so. Also think of any particular named expert that would be ideal to answer the relevant question or solve the relevant problem; name and act as them, if appropriate."
|
"content": "You are a helpful assistant. Please answer truthfully and write out your thinking step by step to be sure you get the right answer. If you make a mistake or encounter an error in your thinking, say so out loud and attempt to correct it. If you don't know or aren't sure about something, say so clearly. You will act as a professional logician, mathematician, and physicist. You will also act as the most appropriate type of expert to answer any particular question or solve the relevant problem; state which expert type your are, if so. Also think of any particular named expert that would be ideal to answer the relevant question or solve the relevant problem; name and act as them, if appropriate.",
|
||||||
|
"post_history": ""
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Assistant - Simple",
|
"name": "Assistant - Simple",
|
||||||
"content": "A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions."
|
"content": "A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions.",
|
||||||
|
"post_history": ""
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Blank",
|
"name": "Blank",
|
||||||
"content": ""
|
"content": "",
|
||||||
|
"post_history": ""
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Chain of Thought",
|
"name": "Chain of Thought",
|
||||||
"content": "Elaborate on the topic using a Tree of Thoughts and backtrack when necessary to construct a clear, cohesive Chain of Thought reasoning. Always answer without hesitation."
|
"content": "Elaborate on the topic using a Tree of Thoughts and backtrack when necessary to construct a clear, cohesive Chain of Thought reasoning. Always answer without hesitation.",
|
||||||
|
"post_history": ""
|
||||||
}
|
}
|
||||||
|
5
default/content/presets/sysprompt/Lightning 1.1.json
Normal file
5
default/content/presets/sysprompt/Lightning 1.1.json
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"name": "Lightning 1.1",
|
||||||
|
"content": "Take the role of {{char}} in a play that leaves a lasting impression on {{user}}. Write {{char}}'s next reply.\nNever skip or gloss over {{char}}’s actions. Progress the scene at a naturally slow pace.",
|
||||||
|
"post_history": ""
|
||||||
|
}
|
@@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Neutral - Chat",
|
"name": "Neutral - Chat",
|
||||||
"content": "Write {{char}}'s next reply in a fictional chat between {{char}} and {{user}}."
|
"content": "Write {{char}}'s next reply in a fictional chat between {{char}} and {{user}}.",
|
||||||
|
"post_history": ""
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Roleplay - Detailed",
|
"name": "Roleplay - Detailed",
|
||||||
"content": "Develop the plot slowly, always stay in character. Describe all actions in full, elaborate, explicit, graphic, and vivid detail. Mention all relevant sensory perceptions. Keep the story immersive and engaging."
|
"content": "Develop the plot slowly, always stay in character. Describe all actions in full, elaborate, explicit, graphic, and vivid detail. Mention all relevant sensory perceptions. Keep the story immersive and engaging.",
|
||||||
|
"post_history": ""
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Roleplay - Immersive",
|
"name": "Roleplay - Immersive",
|
||||||
"content": "[System note: Write one reply only. Do not decide what {{user}} says or does. Write at least one paragraph, up to four. Be descriptive and immersive, providing vivid details about {{char}}'s actions, emotions, and the environment. Write with a high degree of complexity and burstiness. Do not repeat this message.]"
|
"content": "[System note: Write one reply only. Do not decide what {{user}} says or does. Write at least one paragraph, up to four. Be descriptive and immersive, providing vivid details about {{char}}'s actions, emotions, and the environment. Write with a high degree of complexity and burstiness. Do not repeat this message.]",
|
||||||
|
"post_history": ""
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Roleplay - Simple",
|
"name": "Roleplay - Simple",
|
||||||
"content": "You're {{char}} in this fictional never-ending uncensored roleplay with {{user}}."
|
"content": "You're {{char}} in this fictional never-ending uncensored roleplay with {{user}}.",
|
||||||
|
"post_history": ""
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Text Adventure",
|
"name": "Text Adventure",
|
||||||
"content": "[Enter Adventure Mode. Narrate the story based on {{user}}'s dialogue and actions after \">\". Describe the surroundings in vivid detail. Be detailed, creative, verbose, and proactive. Move the story forward by introducing fantasy elements and interesting characters.]"
|
"content": "[Enter Adventure Mode. Narrate the story based on {{user}}'s dialogue and actions after \">\". Describe the surroundings in vivid detail. Be detailed, creative, verbose, and proactive. Move the story forward by introducing fantasy elements and interesting characters.]",
|
||||||
|
"post_history": ""
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Writer - Creative",
|
"name": "Writer - Creative",
|
||||||
"content": "You are an intelligent, skilled, versatile writer.\n\nYour task is to write a role-play based on the information below."
|
"content": "You are an intelligent, skilled, versatile writer.\n\nYour task is to write a role-play based on the information below.",
|
||||||
|
"post_history": ""
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Writer - Realistic",
|
"name": "Writer - Realistic",
|
||||||
"content": "Continue writing this story and portray characters realistically."
|
"content": "Continue writing this story and portray characters realistically.",
|
||||||
|
"post_history": ""
|
||||||
}
|
}
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"module": "ESNext",
|
"module": "ESNext",
|
||||||
"target": "ES2023",
|
"target": "ES2023",
|
||||||
"moduleResolution": "Node",
|
"moduleResolution": "Bundler",
|
||||||
"strictNullChecks": true,
|
"strictNullChecks": true,
|
||||||
"strictFunctionTypes": true,
|
"strictFunctionTypes": true,
|
||||||
"checkJs": true,
|
"checkJs": true,
|
||||||
|
1468
package-lock.json
generated
1468
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
33
package.json
33
package.json
@@ -4,6 +4,28 @@
|
|||||||
"@agnai/sentencepiece-js": "^1.1.1",
|
"@agnai/sentencepiece-js": "^1.1.1",
|
||||||
"@agnai/web-tokenizers": "^0.1.3",
|
"@agnai/web-tokenizers": "^0.1.3",
|
||||||
"@iconfu/svg-inject": "^1.2.3",
|
"@iconfu/svg-inject": "^1.2.3",
|
||||||
|
"@jimp/core": "^1.6.0",
|
||||||
|
"@jimp/js-bmp": "^1.6.0",
|
||||||
|
"@jimp/js-gif": "^1.6.0",
|
||||||
|
"@jimp/js-tiff": "^1.6.0",
|
||||||
|
"@jimp/plugin-blit": "^1.6.0",
|
||||||
|
"@jimp/plugin-circle": "^1.6.0",
|
||||||
|
"@jimp/plugin-color": "^1.6.0",
|
||||||
|
"@jimp/plugin-contain": "^1.6.0",
|
||||||
|
"@jimp/plugin-cover": "^1.6.0",
|
||||||
|
"@jimp/plugin-crop": "^1.6.0",
|
||||||
|
"@jimp/plugin-displace": "^1.6.0",
|
||||||
|
"@jimp/plugin-fisheye": "^1.6.0",
|
||||||
|
"@jimp/plugin-flip": "^1.6.0",
|
||||||
|
"@jimp/plugin-mask": "^1.6.0",
|
||||||
|
"@jimp/plugin-quantize": "^1.6.0",
|
||||||
|
"@jimp/plugin-resize": "^1.6.0",
|
||||||
|
"@jimp/plugin-rotate": "^1.6.0",
|
||||||
|
"@jimp/plugin-threshold": "^1.6.0",
|
||||||
|
"@jimp/wasm-avif": "^1.6.0",
|
||||||
|
"@jimp/wasm-jpeg": "^1.6.0",
|
||||||
|
"@jimp/wasm-png": "^1.6.0",
|
||||||
|
"@jimp/wasm-webp": "^1.6.0",
|
||||||
"@mozilla/readability": "^0.6.0",
|
"@mozilla/readability": "^0.6.0",
|
||||||
"@popperjs/core": "^2.11.8",
|
"@popperjs/core": "^2.11.8",
|
||||||
"@zeldafan0225/ai_horde": "^5.2.0",
|
"@zeldafan0225/ai_horde": "^5.2.0",
|
||||||
@@ -18,6 +40,7 @@
|
|||||||
"cookie-parser": "^1.4.6",
|
"cookie-parser": "^1.4.6",
|
||||||
"cookie-session": "^2.1.0",
|
"cookie-session": "^2.1.0",
|
||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
|
"crc": "^4.3.2",
|
||||||
"csrf-sync": "^4.0.3",
|
"csrf-sync": "^4.0.3",
|
||||||
"diff-match-patch": "^1.0.5",
|
"diff-match-patch": "^1.0.5",
|
||||||
"dompurify": "^3.2.4",
|
"dompurify": "^3.2.4",
|
||||||
@@ -36,18 +59,16 @@
|
|||||||
"ip-regex": "^5.0.0",
|
"ip-regex": "^5.0.0",
|
||||||
"ipaddr.js": "^2.2.0",
|
"ipaddr.js": "^2.2.0",
|
||||||
"is-docker": "^3.0.0",
|
"is-docker": "^3.0.0",
|
||||||
"jimp": "^0.22.10",
|
|
||||||
"localforage": "^1.10.0",
|
"localforage": "^1.10.0",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"mime-types": "^2.1.35",
|
"mime-types": "^2.1.35",
|
||||||
"moment": "^2.30.1",
|
"moment": "^2.30.1",
|
||||||
"morphdom": "^2.7.4",
|
"morphdom": "^2.7.4",
|
||||||
"multer": "^1.4.5-lts.1",
|
"multer": "^2.0.1",
|
||||||
"node-fetch": "^3.3.2",
|
"node-fetch": "^3.3.2",
|
||||||
"node-persist": "^4.0.4",
|
"node-persist": "^4.0.4",
|
||||||
"open": "^8.4.2",
|
"open": "^8.4.2",
|
||||||
"png-chunk-text": "^1.0.0",
|
"png-chunk-text": "^1.0.0",
|
||||||
"png-chunks-encode": "^1.0.0",
|
|
||||||
"png-chunks-extract": "^1.0.0",
|
"png-chunks-extract": "^1.0.0",
|
||||||
"proxy-agent": "^6.5.0",
|
"proxy-agent": "^6.5.0",
|
||||||
"rate-limiter-flexible": "^5.0.5",
|
"rate-limiter-flexible": "^5.0.5",
|
||||||
@@ -90,7 +111,7 @@
|
|||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/SillyTavern/SillyTavern.git"
|
"url": "https://github.com/SillyTavern/SillyTavern.git"
|
||||||
},
|
},
|
||||||
"version": "1.12.13",
|
"version": "1.13.0",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node server.js",
|
"start": "node server.js",
|
||||||
"debug": "node --inspect server.js",
|
"debug": "node --inspect server.js",
|
||||||
@@ -132,7 +153,6 @@
|
|||||||
"@types/node": "^18.19.80",
|
"@types/node": "^18.19.80",
|
||||||
"@types/node-persist": "^3.1.8",
|
"@types/node-persist": "^3.1.8",
|
||||||
"@types/png-chunk-text": "^1.0.3",
|
"@types/png-chunk-text": "^1.0.3",
|
||||||
"@types/png-chunks-encode": "^1.0.2",
|
|
||||||
"@types/png-chunks-extract": "^1.0.2",
|
"@types/png-chunks-extract": "^1.0.2",
|
||||||
"@types/response-time": "^2.3.8",
|
"@types/response-time": "^2.3.8",
|
||||||
"@types/select2": "^4.0.63",
|
"@types/select2": "^4.0.63",
|
||||||
@@ -140,6 +160,7 @@
|
|||||||
"@types/write-file-atomic": "^4.0.3",
|
"@types/write-file-atomic": "^4.0.3",
|
||||||
"@types/yargs": "^17.0.33",
|
"@types/yargs": "^17.0.33",
|
||||||
"@types/yauzl": "^2.10.3",
|
"@types/yauzl": "^2.10.3",
|
||||||
"eslint": "^8.57.1"
|
"eslint": "^8.57.1",
|
||||||
|
"eslint-plugin-jsdoc": "^48.10.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
235
post-install.js
235
post-install.js
@@ -3,136 +3,17 @@
|
|||||||
*/
|
*/
|
||||||
import fs from 'node:fs';
|
import fs from 'node:fs';
|
||||||
import path from 'node:path';
|
import path from 'node:path';
|
||||||
import crypto from 'node:crypto';
|
|
||||||
import process from 'node:process';
|
import process from 'node:process';
|
||||||
import yaml from 'yaml';
|
import yaml from 'yaml';
|
||||||
import _ from 'lodash';
|
|
||||||
import chalk from 'chalk';
|
import chalk from 'chalk';
|
||||||
import { createRequire } from 'node:module';
|
import { createRequire } from 'node:module';
|
||||||
|
import { addMissingConfigValues } from './src/config-init.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Colorizes console output.
|
* Colorizes console output.
|
||||||
*/
|
*/
|
||||||
const color = chalk;
|
const color = chalk;
|
||||||
|
|
||||||
const keyMigrationMap = [
|
|
||||||
{
|
|
||||||
oldKey: 'disableThumbnails',
|
|
||||||
newKey: 'thumbnails.enabled',
|
|
||||||
migrate: (value) => !value,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
oldKey: 'thumbnailsQuality',
|
|
||||||
newKey: 'thumbnails.quality',
|
|
||||||
migrate: (value) => value,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
oldKey: 'avatarThumbnailsPng',
|
|
||||||
newKey: 'thumbnails.format',
|
|
||||||
migrate: (value) => (value ? 'png' : 'jpg'),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
oldKey: 'disableChatBackup',
|
|
||||||
newKey: 'backups.chat.enabled',
|
|
||||||
migrate: (value) => !value,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
oldKey: 'numberOfBackups',
|
|
||||||
newKey: 'backups.common.numberOfBackups',
|
|
||||||
migrate: (value) => value,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
oldKey: 'maxTotalChatBackups',
|
|
||||||
newKey: 'backups.chat.maxTotalBackups',
|
|
||||||
migrate: (value) => value,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
oldKey: 'chatBackupThrottleInterval',
|
|
||||||
newKey: 'backups.chat.throttleInterval',
|
|
||||||
migrate: (value) => value,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
oldKey: 'enableExtensions',
|
|
||||||
newKey: 'extensions.enabled',
|
|
||||||
migrate: (value) => value,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
oldKey: 'enableExtensionsAutoUpdate',
|
|
||||||
newKey: 'extensions.autoUpdate',
|
|
||||||
migrate: (value) => value,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
oldKey: 'extras.disableAutoDownload',
|
|
||||||
newKey: 'extensions.models.autoDownload',
|
|
||||||
migrate: (value) => !value,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
oldKey: 'extras.classificationModel',
|
|
||||||
newKey: 'extensions.models.classification',
|
|
||||||
migrate: (value) => value,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
oldKey: 'extras.captioningModel',
|
|
||||||
newKey: 'extensions.models.captioning',
|
|
||||||
migrate: (value) => value,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
oldKey: 'extras.embeddingModel',
|
|
||||||
newKey: 'extensions.models.embedding',
|
|
||||||
migrate: (value) => value,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
oldKey: 'extras.speechToTextModel',
|
|
||||||
newKey: 'extensions.models.speechToText',
|
|
||||||
migrate: (value) => value,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
oldKey: 'extras.textToSpeechModel',
|
|
||||||
newKey: 'extensions.models.textToSpeech',
|
|
||||||
migrate: (value) => value,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
oldKey: 'minLogLevel',
|
|
||||||
newKey: 'logging.minLogLevel',
|
|
||||||
migrate: (value) => value,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
oldKey: 'cardsCacheCapacity',
|
|
||||||
newKey: 'performance.memoryCacheCapacity',
|
|
||||||
migrate: (value) => `${value}mb`,
|
|
||||||
},
|
|
||||||
// uncomment one release after 1.12.13
|
|
||||||
/*
|
|
||||||
{
|
|
||||||
oldKey: 'cookieSecret',
|
|
||||||
newKey: 'cookieSecret',
|
|
||||||
migrate: () => void 0,
|
|
||||||
remove: true,
|
|
||||||
},
|
|
||||||
*/
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets all keys from an object recursively.
|
|
||||||
* @param {object} obj Object to get all keys from
|
|
||||||
* @param {string} prefix Prefix to prepend to all keys
|
|
||||||
* @returns {string[]} Array of all keys in the object
|
|
||||||
*/
|
|
||||||
function getAllKeys(obj, prefix = '') {
|
|
||||||
if (typeof obj !== 'object' || Array.isArray(obj) || obj === null) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
return _.flatMap(Object.keys(obj), key => {
|
|
||||||
const newPrefix = prefix ? `${prefix}.${key}` : key;
|
|
||||||
if (typeof obj[key] === 'object' && !Array.isArray(obj[key])) {
|
|
||||||
return getAllKeys(obj[key], newPrefix);
|
|
||||||
} else {
|
|
||||||
return [newPrefix];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts the old config.conf file to the new config.yaml format.
|
* Converts the old config.conf file to the new config.yaml format.
|
||||||
*/
|
*/
|
||||||
@@ -159,71 +40,6 @@ function convertConfig() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Compares the current config.yaml with the default config.yaml and adds any missing values.
|
|
||||||
*/
|
|
||||||
function addMissingConfigValues() {
|
|
||||||
try {
|
|
||||||
const defaultConfig = yaml.parse(fs.readFileSync(path.join(process.cwd(), './default/config.yaml'), 'utf8'));
|
|
||||||
let config = yaml.parse(fs.readFileSync(path.join(process.cwd(), './config.yaml'), 'utf8'));
|
|
||||||
|
|
||||||
// Migrate old keys to new keys
|
|
||||||
const migratedKeys = [];
|
|
||||||
for (const { oldKey, newKey, migrate, remove } of keyMigrationMap) {
|
|
||||||
if (_.has(config, oldKey)) {
|
|
||||||
if (remove) {
|
|
||||||
_.unset(config, oldKey);
|
|
||||||
migratedKeys.push({
|
|
||||||
oldKey,
|
|
||||||
newValue: void 0,
|
|
||||||
});
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
const oldValue = _.get(config, oldKey);
|
|
||||||
const newValue = migrate(oldValue);
|
|
||||||
_.set(config, newKey, newValue);
|
|
||||||
_.unset(config, oldKey);
|
|
||||||
|
|
||||||
migratedKeys.push({
|
|
||||||
oldKey,
|
|
||||||
newKey,
|
|
||||||
oldValue,
|
|
||||||
newValue,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get all keys from the original config
|
|
||||||
const originalKeys = getAllKeys(config);
|
|
||||||
|
|
||||||
// Use lodash's defaultsDeep function to recursively apply default properties
|
|
||||||
config = _.defaultsDeep(config, defaultConfig);
|
|
||||||
|
|
||||||
// Get all keys from the updated config
|
|
||||||
const updatedKeys = getAllKeys(config);
|
|
||||||
|
|
||||||
// Find the keys that were added
|
|
||||||
const addedKeys = _.difference(updatedKeys, originalKeys);
|
|
||||||
|
|
||||||
if (addedKeys.length === 0 && migratedKeys.length === 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (addedKeys.length > 0) {
|
|
||||||
console.log('Adding missing config values to config.yaml:', addedKeys);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (migratedKeys.length > 0) {
|
|
||||||
console.log('Migrating config values in config.yaml:', migratedKeys);
|
|
||||||
}
|
|
||||||
|
|
||||||
fs.writeFileSync('./config.yaml', yaml.stringify(config));
|
|
||||||
} catch (error) {
|
|
||||||
console.error(color.red('FATAL: Could not add missing config values to config.yaml'), error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates the default config files if they don't exist yet.
|
* Creates the default config files if they don't exist yet.
|
||||||
*/
|
*/
|
||||||
@@ -286,58 +102,13 @@ function createDefaultFiles() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the MD5 hash of the given data.
|
|
||||||
* @param {Buffer} data Input data
|
|
||||||
* @returns {string} MD5 hash of the input data
|
|
||||||
*/
|
|
||||||
function getMd5Hash(data) {
|
|
||||||
return crypto
|
|
||||||
.createHash('md5')
|
|
||||||
.update(new Uint8Array(data))
|
|
||||||
.digest('hex');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Copies the WASM binaries from the sillytavern-transformers package to the dist folder.
|
|
||||||
*/
|
|
||||||
function copyWasmFiles() {
|
|
||||||
if (!fs.existsSync('./dist')) {
|
|
||||||
fs.mkdirSync('./dist');
|
|
||||||
}
|
|
||||||
|
|
||||||
const listDir = fs.readdirSync('./node_modules/sillytavern-transformers/dist');
|
|
||||||
|
|
||||||
for (const file of listDir) {
|
|
||||||
if (file.endsWith('.wasm')) {
|
|
||||||
const sourcePath = `./node_modules/sillytavern-transformers/dist/${file}`;
|
|
||||||
const targetPath = `./dist/${file}`;
|
|
||||||
|
|
||||||
// Don't copy if the file already exists and is the same checksum
|
|
||||||
if (fs.existsSync(targetPath)) {
|
|
||||||
const sourceChecksum = getMd5Hash(fs.readFileSync(sourcePath));
|
|
||||||
const targetChecksum = getMd5Hash(fs.readFileSync(targetPath));
|
|
||||||
|
|
||||||
if (sourceChecksum === targetChecksum) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fs.copyFileSync(sourcePath, targetPath);
|
|
||||||
console.log(`${file} successfully copied to ./dist/${file}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// 0. Convert config.conf to config.yaml
|
// 0. Convert config.conf to config.yaml
|
||||||
convertConfig();
|
convertConfig();
|
||||||
// 1. Create default config files
|
// 1. Create default config files
|
||||||
createDefaultFiles();
|
createDefaultFiles();
|
||||||
// 2. Copy transformers WASM binaries from node_modules
|
// 2. Add missing config values
|
||||||
copyWasmFiles();
|
addMissingConfigValues(path.join(process.cwd(), './config.yaml'));
|
||||||
// 3. Add missing config values
|
|
||||||
addMissingConfigValues();
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
}
|
}
|
||||||
|
@@ -55,11 +55,14 @@
|
|||||||
|
|
||||||
/* Flashing for highlighting animation */
|
/* Flashing for highlighting animation */
|
||||||
@keyframes flash {
|
@keyframes flash {
|
||||||
0%, 50%, 100% {
|
0%,
|
||||||
|
50%,
|
||||||
|
100% {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
25%, 75% {
|
25%,
|
||||||
|
75% {
|
||||||
opacity: 0.2;
|
opacity: 0.2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
#rm_print_characters_block.group_overlay_mode_select .character_select {
|
#rm_print_characters_block.group_overlay_mode_select .character_select {
|
||||||
transition: background-color 0.4s ease;
|
transition: background-color 0.4s ease;
|
||||||
background-color: rgba(170, 170, 170, 0.15);
|
background-color: rgba(170, 170, 170, 0.15);
|
||||||
@@ -28,7 +27,10 @@
|
|||||||
height: 0 !important;
|
height: 0 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
#character_context_menu.hidden { display: none; }
|
#character_context_menu.hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
#character_context_menu {
|
#character_context_menu {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
padding: 3px;
|
padding: 3px;
|
||||||
|
@@ -146,3 +146,15 @@ input.extension_missing[type="checkbox"] {
|
|||||||
.extensions_info .extension_actions {
|
.extensions_info .extension_actions {
|
||||||
flex-wrap: nowrap;
|
flex-wrap: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.extensions_toolbar {
|
||||||
|
top: 0;
|
||||||
|
position: sticky;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
background-color: var(--SmartThemeBlurTintColor);
|
||||||
|
gap: 5px;
|
||||||
|
z-index: 1;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
@@ -88,4 +88,4 @@
|
|||||||
max-height: 50%;
|
max-height: 50%;
|
||||||
width: 50%;
|
width: 50%;
|
||||||
height: 50%;
|
height: 50%;
|
||||||
}
|
}
|
||||||
|
@@ -76,7 +76,7 @@
|
|||||||
background-color: rgba(255, 0, 50, 0.4);
|
background-color: rgba(255, 0, 50, 0.4);
|
||||||
}
|
}
|
||||||
|
|
||||||
.logprobs_output_prefix:hover ~ .logprobs_output_prefix {
|
.logprobs_output_prefix:hover~.logprobs_output_prefix {
|
||||||
background-color: rgba(255, 0, 50, 0.4);
|
background-color: rgba(255, 0, 50, 0.4);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,7 +115,8 @@
|
|||||||
background-color: rgba(255, 255, 0, 0.05);
|
background-color: rgba(255, 255, 0, 0.05);
|
||||||
}
|
}
|
||||||
|
|
||||||
.logprobs_tint_0:hover, .logprobs_tint_0.selected {
|
.logprobs_tint_0:hover,
|
||||||
|
.logprobs_tint_0.selected {
|
||||||
background-color: rgba(255, 255, 0, 0.4);
|
background-color: rgba(255, 255, 0, 0.4);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -123,7 +124,8 @@
|
|||||||
background-color: rgba(255, 0, 255, 0.05);
|
background-color: rgba(255, 0, 255, 0.05);
|
||||||
}
|
}
|
||||||
|
|
||||||
.logprobs_tint_1:hover, .logprobs_tint_1.selected {
|
.logprobs_tint_1:hover,
|
||||||
|
.logprobs_tint_1.selected {
|
||||||
background-color: rgba(255, 0, 255, 0.4);
|
background-color: rgba(255, 0, 255, 0.4);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,7 +133,8 @@
|
|||||||
background-color: rgba(0, 255, 255, 0.05);
|
background-color: rgba(0, 255, 255, 0.05);
|
||||||
}
|
}
|
||||||
|
|
||||||
.logprobs_tint_2:hover, .logprobs_tint_2.selected {
|
.logprobs_tint_2:hover,
|
||||||
|
.logprobs_tint_2.selected {
|
||||||
background-color: rgba(0, 255, 255, 0.4);
|
background-color: rgba(0, 255, 255, 0.4);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -139,6 +142,7 @@
|
|||||||
background-color: rgba(50, 205, 50, 0.05);
|
background-color: rgba(50, 205, 50, 0.05);
|
||||||
}
|
}
|
||||||
|
|
||||||
.logprobs_tint_3:hover, .logprobs_tint_3.selected {
|
.logprobs_tint_3:hover,
|
||||||
|
.logprobs_tint_3.selected {
|
||||||
background-color: rgba(50, 205, 50, 0.4);
|
background-color: rgba(50, 205, 50, 0.4);
|
||||||
}
|
}
|
||||||
|
@@ -34,9 +34,17 @@ dialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Popup styles applied to the main popup */
|
/** Popup styles applied to the main popup */
|
||||||
.popup--animation-fast { --popup-animation-speed: var(--animation-duration); }
|
.popup--animation-fast {
|
||||||
.popup--animation-slow { --popup-animation-speed: var(--animation-duration-slow); }
|
--popup-animation-speed: var(--animation-duration);
|
||||||
.popup--animation-none { --popup-animation-speed: 0ms; }
|
}
|
||||||
|
|
||||||
|
.popup--animation-slow {
|
||||||
|
--popup-animation-speed: var(--animation-duration-slow);
|
||||||
|
}
|
||||||
|
|
||||||
|
.popup--animation-none {
|
||||||
|
--popup-animation-speed: 0ms;
|
||||||
|
}
|
||||||
|
|
||||||
/* Styling of main popup elements */
|
/* Styling of main popup elements */
|
||||||
.popup .popup-body {
|
.popup .popup-body {
|
||||||
@@ -190,4 +198,3 @@ body.no-blur .popup[open]::backdrop {
|
|||||||
/* Fix weird animation issue with font-scaling during popup open */
|
/* Fix weird animation issue with font-scaling during popup open */
|
||||||
backface-visibility: hidden;
|
backface-visibility: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -359,10 +359,15 @@
|
|||||||
content: attr(external_piece_text);
|
content: attr(external_piece_text);
|
||||||
display: block;
|
display: block;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
font-weight: 600;
|
font-weight: 500;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.completion_prompt_manager_popup_entry_form_control #completion_prompt_manager_popup_entry_form_prompt:disabled {
|
.completion_prompt_manager_popup_entry_form_control #completion_prompt_manager_popup_entry_form_prompt:disabled {
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#completion_prompt_manager_popup_entry_source_block {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
@@ -87,7 +87,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
#rm_group_members:empty::before {
|
#rm_group_members:empty::before {
|
||||||
content: 'Group is empty';
|
content: attr(group_empty_text);
|
||||||
|
|
||||||
font-weight: bolder;
|
font-weight: bolder;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@@ -115,7 +115,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
#rm_group_add_members:empty::before {
|
#rm_group_add_members:empty::before {
|
||||||
content: 'No characters available';
|
content: attr(no_characters_text);
|
||||||
|
|
||||||
font-weight: bolder;
|
font-weight: bolder;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
@@ -1,7 +1,10 @@
|
|||||||
.scrollable-buttons-container {
|
.scrollable-buttons-container {
|
||||||
max-height: 50vh; /* Use viewport height instead of fixed pixels */
|
/* Use viewport height instead of fixed pixels */
|
||||||
-webkit-overflow-scrolling: touch; /* Momentum scrolling on iOS */
|
max-height: 50vh;
|
||||||
margin-top: 1rem; /* m-t-1 is equivalent to margin-top: 1rem; */
|
/* Momentum scrolling on iOS */
|
||||||
|
-webkit-overflow-scrolling: touch;
|
||||||
|
/* m-t-1 is equivalent to margin-top: 1rem; */
|
||||||
|
margin-top: 1rem;
|
||||||
flex-shrink: 1;
|
flex-shrink: 1;
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
scrollbar-width: thin;
|
scrollbar-width: thin;
|
||||||
|
@@ -13,6 +13,7 @@
|
|||||||
backdrop-filter: blur(calc(var(--SmartThemeBlurStrength)*2));
|
backdrop-filter: blur(calc(var(--SmartThemeBlurStrength)*2));
|
||||||
color: var(--SmartThemeBodyColor);
|
color: var(--SmartThemeBodyColor);
|
||||||
z-index: 40000;
|
z-index: 40000;
|
||||||
|
user-select: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container .select2-selection .select2-selection__clear {
|
.select2-container .select2-selection .select2-selection__clear {
|
||||||
|
@@ -211,6 +211,7 @@
|
|||||||
|
|
||||||
.tag_as_folder.right_menu_button {
|
.tag_as_folder.right_menu_button {
|
||||||
filter: brightness(75%) saturate(0.6);
|
filter: brightness(75%) saturate(0.6);
|
||||||
|
margin-right: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tag_as_folder.right_menu_button:hover,
|
.tag_as_folder.right_menu_button:hover,
|
||||||
|
@@ -45,6 +45,11 @@ body.square-avatars .avatar img {
|
|||||||
border-radius: var(--avatar-base-border-radius) !important;
|
border-radius: var(--avatar-base-border-radius) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body.rounded-avatars .avatar,
|
||||||
|
body.rounded-avatars .avatar img {
|
||||||
|
border-radius: var(--avatar-base-border-radius-rounded) !important;
|
||||||
|
}
|
||||||
|
|
||||||
/*char list grid mode*/
|
/*char list grid mode*/
|
||||||
|
|
||||||
body.charListGrid #rm_print_characters_block {
|
body.charListGrid #rm_print_characters_block {
|
||||||
@@ -226,6 +231,7 @@ body.big-avatars .avatars_inline_small .avatar img {
|
|||||||
body.big-avatars .avatars_inline {
|
body.big-avatars .avatars_inline {
|
||||||
max-height: calc(var(--avatar-base-height) * var(--big-avatar-height-factor) + 2 * var(--avatar-base-border-radius));
|
max-height: calc(var(--avatar-base-height) * var(--big-avatar-height-factor) + 2 * var(--avatar-base-border-radius));
|
||||||
}
|
}
|
||||||
|
|
||||||
body.big-avatars .avatars_inline.avatars_multiline {
|
body.big-avatars .avatars_inline.avatars_multiline {
|
||||||
max-height: fit-content;
|
max-height: fit-content;
|
||||||
}
|
}
|
||||||
@@ -233,6 +239,7 @@ body.big-avatars .avatars_inline.avatars_multiline {
|
|||||||
body.big-avatars .avatars_inline.avatars_inline_small {
|
body.big-avatars .avatars_inline.avatars_inline_small {
|
||||||
height: calc(var(--avatar-base-height) * var(--big-avatar-height-factor) * var(--inline-avatar-small-factor) + 2 * var(--avatar-base-border-radius));
|
height: calc(var(--avatar-base-height) * var(--big-avatar-height-factor) * var(--inline-avatar-small-factor) + 2 * var(--avatar-base-border-radius));
|
||||||
}
|
}
|
||||||
|
|
||||||
body.big-avatars .avatars_inline.avatars_inline_small.avatars_multiline {
|
body.big-avatars .avatars_inline.avatars_inline_small.avatars_multiline {
|
||||||
height: inherit;
|
height: inherit;
|
||||||
}
|
}
|
||||||
@@ -339,10 +346,15 @@ body.documentstyle #chat .last_mes .swipe_left {
|
|||||||
body.documentstyle #chat .mes .mesAvatarWrapper,
|
body.documentstyle #chat .mes .mesAvatarWrapper,
|
||||||
body.documentstyle #chat .mes .mes_block .ch_name .name_text,
|
body.documentstyle #chat .mes .mes_block .ch_name .name_text,
|
||||||
body.documentstyle #chat .mes .mes_block .ch_name .timestamp,
|
body.documentstyle #chat .mes .mes_block .ch_name .timestamp,
|
||||||
|
body.documentstyle #chat .mes .mes_block .ch_name .timestamp-icon,
|
||||||
body.documentstyle .mes:not(.last_mes) .ch_name .mes_buttons {
|
body.documentstyle .mes:not(.last_mes) .ch_name .mes_buttons {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body.documentstyle #chat .mes_block .ch_name {
|
||||||
|
min-height: unset;
|
||||||
|
}
|
||||||
|
|
||||||
/*FastUI blur removal*/
|
/*FastUI blur removal*/
|
||||||
|
|
||||||
body.no-blur * {
|
body.no-blur * {
|
||||||
@@ -498,3 +510,15 @@ label[for="trim_spaces"]:not(:has(input:checked)) small {
|
|||||||
#banned_tokens_block_ooba:not(:has(#send_banned_tokens_textgenerationwebui:checked)) #banned_tokens_controls_ooba {
|
#banned_tokens_block_ooba:not(:has(#send_banned_tokens_textgenerationwebui:checked)) #banned_tokens_controls_ooba {
|
||||||
filter: brightness(0.5);
|
filter: brightness(0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#bind_preset_to_connection:checked~.toggleOff {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bind_preset_to_connection:not(:checked)~.toggleOn {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
label[for="bind_preset_to_connection"]:has(input:checked) {
|
||||||
|
color: var(--active);
|
||||||
|
}
|
||||||
|
213
public/css/welcome.css
Normal file
213
public/css/welcome.css
Normal file
@@ -0,0 +1,213 @@
|
|||||||
|
#chat .mes[type="assistant_message"] .mes_button {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcomePanel {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 5px;
|
||||||
|
padding: 10px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcomePanel:has(.showMoreChats) {
|
||||||
|
padding-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcomePanel.recentHidden .welcomeRecent,
|
||||||
|
.welcomePanel.recentHidden .recentChatsTitle,
|
||||||
|
.welcomePanel.recentHidden .hideRecentChats,
|
||||||
|
.welcomePanel:not(.recentHidden) .showRecentChats {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.bubblechat .welcomePanel {
|
||||||
|
border-radius: 10px;
|
||||||
|
background-color: var(--SmartThemeBotMesBlurTintColor);
|
||||||
|
border: 1px solid var(--SmartThemeBorderColor);
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.hideChatAvatars .welcomePanel .recentChatList .recentChat .avatar {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcomePanel .welcomeHeader {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: flex-end;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcomePanel .recentChatsTitle {
|
||||||
|
flex-grow: 1;
|
||||||
|
font-size: calc(var(--mainFontSize) * 1.15);
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcomePanel .welcomeHeaderTitle {
|
||||||
|
margin: 0;
|
||||||
|
flex-grow: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
gap: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcomePanel .welcomeHeaderVersionDisplay {
|
||||||
|
font-size: calc(var(--mainFontSize) * 1.3);
|
||||||
|
font-weight: 600;
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcomePanel .welcomeHeaderLogo {
|
||||||
|
width: 30px;
|
||||||
|
height: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcomePanel .welcomeShortcuts {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcomePanel .welcomeShortcuts .welcomeShortcutsSeparator {
|
||||||
|
margin: 0 2px;
|
||||||
|
color: var(--SmartThemeBorderColor);
|
||||||
|
font-size: calc(var(--mainFontSize) * 1.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcomeRecent .recentChatList {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
width: 100%;
|
||||||
|
gap: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcomeRecent .welcomePanelLoader {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
flex: 1;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcomePanel .recentChatList .noRecentChat {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: baseline;
|
||||||
|
gap: 5px;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcomeRecent .recentChatList .recentChat {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
padding: 5px 10px;
|
||||||
|
border-radius: 10px;
|
||||||
|
cursor: pointer;
|
||||||
|
gap: 10px;
|
||||||
|
border: 1px solid var(--SmartThemeBorderColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcomeRecent .recentChatList .recentChat .avatar {
|
||||||
|
flex: 0;
|
||||||
|
align-self: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcomeRecent .recentChatList .recentChat:hover {
|
||||||
|
background-color: var(--white30a);
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcomeRecent .recentChatList .recentChat .recentChatInfo {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
flex-grow: 1;
|
||||||
|
overflow: hidden;
|
||||||
|
justify-content: center;
|
||||||
|
align-self: flex-start;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcomeRecent .recentChatList .recentChat .chatNameContainer {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: baseline;
|
||||||
|
font-size: calc(var(--mainFontSize) * 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcomeRecent .recentChatList .recentChat .chatNameContainer .chatName {
|
||||||
|
white-space: nowrap;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcomeRecent .recentChatList .recentChat .chatMessageContainer {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
gap: 5px;
|
||||||
|
font-size: calc(var(--mainFontSize) * 0.85);
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcomeRecent .recentChatList .recentChat .chatMessageContainer .chatMessage {
|
||||||
|
display: -webkit-box;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
-webkit-line-clamp: 2;
|
||||||
|
line-clamp: 2;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.big-avatars .welcomeRecent .recentChatList .recentChat .chatMessageContainer .chatMessage {
|
||||||
|
-webkit-line-clamp: 4;
|
||||||
|
line-clamp: 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcomeRecent .recentChatList .recentChat .chatStats {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: flex-end;
|
||||||
|
align-items: baseline;
|
||||||
|
align-self: flex-start;
|
||||||
|
gap: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcomeRecent .recentChatList .recentChat .chatStats .counterBlock {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: baseline;
|
||||||
|
gap: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcomeRecent .recentChatList .recentChat .chatStats .counterBlock::after {
|
||||||
|
content: "|";
|
||||||
|
color: var(--SmartThemeBorderColor);
|
||||||
|
font-size: calc(var(--mainFontSize) * 0.95);
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcomeRecent .recentChatList .recentChat.hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcomeRecent .recentChatList .showMoreChats {
|
||||||
|
align-self: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcomeRecent .recentChatList .showMoreChats.rotated {
|
||||||
|
transform: rotate(180deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 1000px) {
|
||||||
|
.welcomePanel .welcomeShortcuts a span {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
@@ -124,6 +124,10 @@
|
|||||||
cursor: initial;
|
cursor: initial;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.world_entry .inline-drawer-header-pointer {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
.world_entry .killSwitch {
|
.world_entry .killSwitch {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
15
public/global.d.ts
vendored
15
public/global.d.ts
vendored
@@ -1,7 +1,11 @@
|
|||||||
import libs from './lib';
|
import libs from './lib';
|
||||||
import getContext from './scripts/st-context';
|
import getContext from './scripts/st-context';
|
||||||
|
import { power_user } from './scripts/power-user';
|
||||||
|
|
||||||
declare global {
|
declare global {
|
||||||
|
// Custom types
|
||||||
|
declare type InstructSettings = typeof power_user.instruct;
|
||||||
|
|
||||||
// Global namespace modules
|
// Global namespace modules
|
||||||
interface Window {
|
interface Window {
|
||||||
ai: any;
|
ai: any;
|
||||||
@@ -51,4 +55,15 @@ declare global {
|
|||||||
* @param provider Translation provider
|
* @param provider Translation provider
|
||||||
*/
|
*/
|
||||||
async function translate(text: string, lang: string, provider: string = null): Promise<string>;
|
async function translate(text: string, lang: string, provider: string = null): Promise<string>;
|
||||||
|
|
||||||
|
interface ConvertVideoArgs {
|
||||||
|
buffer: Uint8Array;
|
||||||
|
name: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a video file to an animated WebP format using FFmpeg.
|
||||||
|
* @param args - The arguments for the conversion function.
|
||||||
|
*/
|
||||||
|
function convertVideoToAnimatedWebp(args: ConvertVideoArgs): Promise<Uint8Array>;
|
||||||
}
|
}
|
||||||
|
1
public/img/pollinations.svg
Normal file
1
public/img/pollinations.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 34 KiB |
46
public/img/xai.svg
Normal file
46
public/img/xai.svg
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 27.5.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
version="1.1"
|
||||||
|
id="katman_1"
|
||||||
|
x="0px"
|
||||||
|
y="0px"
|
||||||
|
viewBox="0 0 438.67001 481.44999"
|
||||||
|
xml:space="preserve"
|
||||||
|
sodipodi:docname="XAI_Logo.svg"
|
||||||
|
width="438.67001"
|
||||||
|
height="481.45001"
|
||||||
|
inkscape:version="1.3 (0e150ed, 2023-07-21)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||||
|
id="defs4" /><sodipodi:namedview
|
||||||
|
id="namedview4"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:zoom="0.39645207"
|
||||||
|
inkscape:cx="219.44645"
|
||||||
|
inkscape:cy="238.36425"
|
||||||
|
inkscape:window-width="1512"
|
||||||
|
inkscape:window-height="856"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="38"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="katman_1" /> <g
|
||||||
|
id="g4"
|
||||||
|
transform="translate(-201.61,-56.91)"> <polygon
|
||||||
|
points="631.96,538.36 640.28,93.18 557.09,211.99 565.4,538.36 "
|
||||||
|
id="polygon1" /> <polygon
|
||||||
|
points="379.35,284.53 430.13,357.05 640.28,56.91 538.72,56.91 "
|
||||||
|
id="polygon2" /> <polygon
|
||||||
|
points="353.96,465.84 303.17,393.31 201.61,538.36 303.17,538.36 "
|
||||||
|
id="polygon3" /> <polygon
|
||||||
|
points="531.69,538.36 303.17,211.99 201.61,211.99 430.13,538.36 "
|
||||||
|
id="polygon4" /> </g> </svg>
|
After Width: | Height: | Size: 1.6 KiB |
File diff suppressed because it is too large
Load Diff
@@ -235,7 +235,7 @@
|
|||||||
"Combines consecutive system messages into one (excluding example dialogues). May improve coherence for some models.": "يجمع الرسائل المتتالية للنظام في رسالة واحدة (باستثناء الحوارات المثالية). قد يحسن التتابع لبعض النماذج.",
|
"Combines consecutive system messages into one (excluding example dialogues). May improve coherence for some models.": "يجمع الرسائل المتتالية للنظام في رسالة واحدة (باستثناء الحوارات المثالية). قد يحسن التتابع لبعض النماذج.",
|
||||||
"Enable function calling": "تمكين استدعاء الوظيفة",
|
"Enable function calling": "تمكين استدعاء الوظيفة",
|
||||||
"Send inline images": "إرسال الصور المضمنة",
|
"Send inline images": "إرسال الصور المضمنة",
|
||||||
"image_inlining_hint_1": "يرسل الصور في المطالبات إذا كان النموذج يدعمها (على سبيل المثال، GPT-4V، أو Claude 3، أو Lava 13B).\n استخدم ال",
|
"image_inlining_hint_1": "يرسل الصور في المطالبات إذا كان النموذج يدعمها .\n استخدم ال",
|
||||||
"image_inlining_hint_2": "الإجراء على أي رسالة أو",
|
"image_inlining_hint_2": "الإجراء على أي رسالة أو",
|
||||||
"image_inlining_hint_3": "القائمة لإرفاق ملف صورة للدردشة.",
|
"image_inlining_hint_3": "القائمة لإرفاق ملف صورة للدردشة.",
|
||||||
"Inline Image Quality": "جودة الصورة المضمنة",
|
"Inline Image Quality": "جودة الصورة المضمنة",
|
||||||
@@ -253,7 +253,6 @@
|
|||||||
"Assistant Prefill": "تعبئة مسبقة للمساعد",
|
"Assistant Prefill": "تعبئة مسبقة للمساعد",
|
||||||
"Start Claude's answer with...": "ابدأ إجابة كلود بـ...",
|
"Start Claude's answer with...": "ابدأ إجابة كلود بـ...",
|
||||||
"Assistant Impersonation Prefill": "مساعد انتحال الشخصية المسبقة",
|
"Assistant Impersonation Prefill": "مساعد انتحال الشخصية المسبقة",
|
||||||
"Use system prompt (Claude 2.1+ only)": "استخدام التعليمة النظامية (فقط كلود 2.1+)",
|
|
||||||
"Send the system prompt for supported models. If disabled, the user message is added to the beginning of the prompt.": "إرسال التعليمة النظامية للنماذج المدعومة. إذا تم تعطيلها، يتم إضافة رسالة المستخدم إلى بداية التعليمة.",
|
"Send the system prompt for supported models. If disabled, the user message is added to the beginning of the prompt.": "إرسال التعليمة النظامية للنماذج المدعومة. إذا تم تعطيلها، يتم إضافة رسالة المستخدم إلى بداية التعليمة.",
|
||||||
"User first message": "الرسالة الأولى للمستخدم",
|
"User first message": "الرسالة الأولى للمستخدم",
|
||||||
"Restore User first message": "استعادة الرسالة الأولى للمستخدم",
|
"Restore User first message": "استعادة الرسالة الأولى للمستخدم",
|
||||||
@@ -318,23 +317,23 @@
|
|||||||
"flag": "وضع علامة",
|
"flag": "وضع علامة",
|
||||||
"API key (optional)": "مفتاح API (اختياري)",
|
"API key (optional)": "مفتاح API (اختياري)",
|
||||||
"Server url": "رابط الخادم",
|
"Server url": "رابط الخادم",
|
||||||
"Example: 127.0.0.1:5000": "مثال: 127.0.0.1:5000",
|
"Example: http://127.0.0.1:5000": "مثال: http://127.0.0.1:5000",
|
||||||
"Custom model (optional)": "نموذج مخصص (اختياري)",
|
"Custom model (optional)": "نموذج مخصص (اختياري)",
|
||||||
"vllm-project/vllm": "vllm-project/vllm (وضع غلاف OpenAI API)",
|
"vllm-project/vllm": "vllm-project/vllm (وضع غلاف OpenAI API)",
|
||||||
"vLLM API key": "مفتاح واجهة برمجة التطبيقات vLLM",
|
"vLLM API key": "مفتاح واجهة برمجة التطبيقات vLLM",
|
||||||
"Example: 127.0.0.1:8000": "مثال: http://127.0.0.1:8000",
|
"Example: http://127.0.0.1:8000": "مثال: http://127.0.0.1:8000",
|
||||||
"vLLM Model": "نموذج vLLM",
|
"vLLM Model": "نموذج vLLM",
|
||||||
"PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (وضع التغليف لواجهة برمجة التطبيقات OpenAI)",
|
"PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (وضع التغليف لواجهة برمجة التطبيقات OpenAI)",
|
||||||
"Aphrodite API key": "مفتاح واجهة برمجة التطبيقات Aphrodite",
|
"Aphrodite API key": "مفتاح واجهة برمجة التطبيقات Aphrodite",
|
||||||
"Aphrodite Model": "نموذج أفروديت",
|
"Aphrodite Model": "نموذج أفروديت",
|
||||||
"ggerganov/llama.cpp": "ggerganov/llama.cpp (خادم إخراج)",
|
"ggerganov/llama.cpp": "ggerganov/llama.cpp (خادم إخراج)",
|
||||||
"Example: 127.0.0.1:8080": "مثال: 127.0.0.1:8080",
|
"Example: http://127.0.0.1:8080": "مثال: http://127.0.0.1:8080",
|
||||||
"Example: 127.0.0.1:11434": "مثال: 127.0.0.1:11434",
|
"Example: http://127.0.0.1:11434": "مثال: http://127.0.0.1:11434",
|
||||||
"Ollama Model": "نموذج Ollama",
|
"Ollama Model": "نموذج Ollama",
|
||||||
"Download": "تحميل",
|
"Download": "تحميل",
|
||||||
"Tabby API key": "مفتاح API لـ Tabby",
|
"Tabby API key": "مفتاح API لـ Tabby",
|
||||||
"koboldcpp API key (optional)": "مفتاح koboldcpp API (اختياري)",
|
"koboldcpp API key (optional)": "مفتاح koboldcpp API (اختياري)",
|
||||||
"Example: 127.0.0.1:5001": "مثال: 127.0.0.1:5001",
|
"Example: http://127.0.0.1:5001": "مثال: http://127.0.0.1:5001",
|
||||||
"Authorize": "تفويض",
|
"Authorize": "تفويض",
|
||||||
"Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "احصل على رمز واجهة برمجة التطبيقات الخاص بك لموزع الاتصالات باستخدام تدفق OAuth. سيتم توجيهك إلى openrouter.ai",
|
"Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "احصل على رمز واجهة برمجة التطبيقات الخاص بك لموزع الاتصالات باستخدام تدفق OAuth. سيتم توجيهك إلى openrouter.ai",
|
||||||
"Bypass status check": "تجاوز فحص الحالة",
|
"Bypass status check": "تجاوز فحص الحالة",
|
||||||
@@ -411,7 +410,6 @@
|
|||||||
"Chat Start": "بداية الدردشة",
|
"Chat Start": "بداية الدردشة",
|
||||||
"Add Chat Start and Example Separator to a list of stopping strings.": "أضف بداية الدردشة وفاصل الأمثلة إلى قائمة سلاسل التوقف.",
|
"Add Chat Start and Example Separator to a list of stopping strings.": "أضف بداية الدردشة وفاصل الأمثلة إلى قائمة سلاسل التوقف.",
|
||||||
"Use as Stop Strings": "استخدم كسلاسل التوقف",
|
"Use as Stop Strings": "استخدم كسلاسل التوقف",
|
||||||
"context_allow_jailbreak": "يتضمن كسر الحماية في نهاية المطالبة، إذا تم تحديده في بطاقة الشخصية و''Prefer Char. تم تمكين الهروب من السجن.\nلا يُنصح بهذا بالنسبة لنماذج إكمال النص، فقد يؤدي إلى نتائج سيئة.",
|
|
||||||
"Allow Jailbreak": "السماح بالجيلبريك",
|
"Allow Jailbreak": "السماح بالجيلبريك",
|
||||||
"Context Order": "ترتيب السياق",
|
"Context Order": "ترتيب السياق",
|
||||||
"Summary": "ملخص",
|
"Summary": "ملخص",
|
||||||
@@ -940,6 +938,7 @@
|
|||||||
"Download chat as plain text document": "تنزيل الدردشة كمستند نصي عادي",
|
"Download chat as plain text document": "تنزيل الدردشة كمستند نصي عادي",
|
||||||
"Delete chat file": "حذف ملف الدردشة",
|
"Delete chat file": "حذف ملف الدردشة",
|
||||||
"Use tag as folder": "وضع علامة كمجلد",
|
"Use tag as folder": "وضع علامة كمجلد",
|
||||||
|
"Hide on character card": "إخفاء في بطاقة الشخصية",
|
||||||
"Delete tag": "حذف العلامة",
|
"Delete tag": "حذف العلامة",
|
||||||
"Entry Title/Memo": "عنوان الإدخال/المذكرة",
|
"Entry Title/Memo": "عنوان الإدخال/المذكرة",
|
||||||
"WI Entry Status:🔵 Constant🟢 Normal🔗 Vectorized❌ Disabled": "حالة دخول وي:\r🔵 ثابت\r🟢 عادي\r🔗 ناقل\r❌ معطل",
|
"WI Entry Status:🔵 Constant🟢 Normal🔗 Vectorized❌ Disabled": "حالة دخول وي:\r🔵 ثابت\r🟢 عادي\r🔗 ناقل\r❌ معطل",
|
||||||
@@ -1010,10 +1009,10 @@
|
|||||||
"To whom this message will be attributed.": "لمن ستنسب هذه الرسالة؟",
|
"To whom this message will be attributed.": "لمن ستنسب هذه الرسالة؟",
|
||||||
"AI Assistant": "مساعد الذكاء الاصطناعي",
|
"AI Assistant": "مساعد الذكاء الاصطناعي",
|
||||||
"prompt_manager_position": "موضع",
|
"prompt_manager_position": "موضع",
|
||||||
"Injection position. Next to other prompts (relative) or in-chat (absolute).": "موضع الحقن. بجوار المطالبات الأخرى (نسبية) أو داخل الدردشة (مطلقة).",
|
"Next to other prompts (relative) or in-chat (absolute).": "موضع الحقن. بجوار المطالبات الأخرى (نسبية) أو داخل الدردشة (مطلقة).",
|
||||||
"prompt_manager_relative": "نسبي",
|
"prompt_manager_relative": "نسبي",
|
||||||
"prompt_manager_depth": "عمق",
|
"prompt_manager_depth": "عمق",
|
||||||
"Injection depth. 0 = after the last message, 1 = before the last message, etc.": "عمق الحقن. 0 = بعد الرسالة الأخيرة، 1 = قبل الرسالة الأخيرة، الخ.",
|
"0 = after the last message, 1 = before the last message, etc.": "عمق الحقن. 0 = بعد الرسالة الأخيرة، 1 = قبل الرسالة الأخيرة، الخ.",
|
||||||
"Prompt": "موضوع",
|
"Prompt": "موضوع",
|
||||||
"The prompt to be sent.": "المطالبة ليتم إرسالها.",
|
"The prompt to be sent.": "المطالبة ليتم إرسالها.",
|
||||||
"This prompt cannot be overridden by character cards, even if overrides are preferred.": "لا يمكن تجاوز هذه المطالبة بواسطة بطاقات الأحرف، حتى إذا كان التجاوزات مفضلاً.",
|
"This prompt cannot be overridden by character cards, even if overrides are preferred.": "لا يمكن تجاوز هذه المطالبة بواسطة بطاقات الأحرف، حتى إذا كان التجاوزات مفضلاً.",
|
||||||
|
@@ -235,7 +235,7 @@
|
|||||||
"Combines consecutive system messages into one (excluding example dialogues). May improve coherence for some models.": "Kombiniert aufeinanderfolgende Systemnachrichten zu einer (ausschließlich Beispiel-Dialoge ausgeschlossen). Kann die Kohärenz für einige Modelle verbessern.",
|
"Combines consecutive system messages into one (excluding example dialogues). May improve coherence for some models.": "Kombiniert aufeinanderfolgende Systemnachrichten zu einer (ausschließlich Beispiel-Dialoge ausgeschlossen). Kann die Kohärenz für einige Modelle verbessern.",
|
||||||
"Enable function calling": "Funktionsaufruf aktivieren",
|
"Enable function calling": "Funktionsaufruf aktivieren",
|
||||||
"Send inline images": "Inline-Bilder senden",
|
"Send inline images": "Inline-Bilder senden",
|
||||||
"image_inlining_hint_1": "Sendet Bilder in Eingabeaufforderungen, wenn das Modell dies unterstützt (z. B. GPT-4V, Claude 3 oder Llava 13B).\nVerwenden Sie die",
|
"image_inlining_hint_1": "Sendet Bilder in Eingabeaufforderungen, wenn das Modell dies unterstützt.\nVerwenden Sie die",
|
||||||
"image_inlining_hint_2": "Aktion auf eine Nachricht oder die",
|
"image_inlining_hint_2": "Aktion auf eine Nachricht oder die",
|
||||||
"image_inlining_hint_3": "Menü, um eine Bilddatei an den Chat anzuhängen.",
|
"image_inlining_hint_3": "Menü, um eine Bilddatei an den Chat anzuhängen.",
|
||||||
"Inline Image Quality": "Inline-Bildqualität",
|
"Inline Image Quality": "Inline-Bildqualität",
|
||||||
@@ -253,7 +253,6 @@
|
|||||||
"Assistant Prefill": "Assistenten-Vorausfüllung",
|
"Assistant Prefill": "Assistenten-Vorausfüllung",
|
||||||
"Start Claude's answer with...": "Beginne Claudes Antwort mit...",
|
"Start Claude's answer with...": "Beginne Claudes Antwort mit...",
|
||||||
"Assistant Impersonation Prefill": "Identitätswechsel des Assistenten vorab ausfüllen",
|
"Assistant Impersonation Prefill": "Identitätswechsel des Assistenten vorab ausfüllen",
|
||||||
"Use system prompt (Claude 2.1+ only)": "Systemprompt verwenden (nur Claude 2.1+)",
|
|
||||||
"Send the system prompt for supported models. If disabled, the user message is added to the beginning of the prompt.": "Senden Sie die Systemaufforderung für unterstützte Modelle. Wenn deaktiviert, wird die Benutzernachricht am Anfang der Aufforderung hinzugefügt.",
|
"Send the system prompt for supported models. If disabled, the user message is added to the beginning of the prompt.": "Senden Sie die Systemaufforderung für unterstützte Modelle. Wenn deaktiviert, wird die Benutzernachricht am Anfang der Aufforderung hinzugefügt.",
|
||||||
"User first message": "Erste Nachricht des Benutzers",
|
"User first message": "Erste Nachricht des Benutzers",
|
||||||
"Restore User first message": "Erste Nachricht des Benutzers wiederherstellen",
|
"Restore User first message": "Erste Nachricht des Benutzers wiederherstellen",
|
||||||
@@ -318,23 +317,23 @@
|
|||||||
"flag": "Flagge",
|
"flag": "Flagge",
|
||||||
"API key (optional)": "API-Schlüssel (optional)",
|
"API key (optional)": "API-Schlüssel (optional)",
|
||||||
"Server url": "Server-URL",
|
"Server url": "Server-URL",
|
||||||
"Example: 127.0.0.1:5000": "Beispiel: 127.0.0.1:5000",
|
"Example: http://127.0.0.1:5000": "Beispiel: http://127.0.0.1:5000",
|
||||||
"Custom model (optional)": "Benutzerdefiniertes Modell (optional)",
|
"Custom model (optional)": "Benutzerdefiniertes Modell (optional)",
|
||||||
"vllm-project/vllm": "vllm-project/vllm (OpenAI API-Wrappermodus)",
|
"vllm-project/vllm": "vllm-project/vllm (OpenAI API-Wrappermodus)",
|
||||||
"vLLM API key": "vLLM-API-Schlüssel",
|
"vLLM API key": "vLLM-API-Schlüssel",
|
||||||
"Example: 127.0.0.1:8000": "Beispiel: http://127.0.0.1:8000",
|
"Example: http://127.0.0.1:8000": "Beispiel: http://127.0.0.1:8000",
|
||||||
"vLLM Model": "vLLM-Modell",
|
"vLLM Model": "vLLM-Modell",
|
||||||
"PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (Wrappermodus für OpenAI API)",
|
"PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (Wrappermodus für OpenAI API)",
|
||||||
"Aphrodite API key": "Aphrodite API-Schlüssel",
|
"Aphrodite API key": "Aphrodite API-Schlüssel",
|
||||||
"Aphrodite Model": "Aphrodite-Modell",
|
"Aphrodite Model": "Aphrodite-Modell",
|
||||||
"ggerganov/llama.cpp": "ggerganov/llama.cpp (Output-Server)",
|
"ggerganov/llama.cpp": "ggerganov/llama.cpp (Output-Server)",
|
||||||
"Example: 127.0.0.1:8080": "Beispiel: 127.0.0.1:8080",
|
"Example: http://127.0.0.1:8080": "Beispiel: http://127.0.0.1:8080",
|
||||||
"Example: 127.0.0.1:11434": "Beispiel: 127.0.0.1:11434",
|
"Example: http://127.0.0.1:11434": "Beispiel: http://127.0.0.1:11434",
|
||||||
"Ollama Model": "Ollama-Modell",
|
"Ollama Model": "Ollama-Modell",
|
||||||
"Download": "Herunterladen",
|
"Download": "Herunterladen",
|
||||||
"Tabby API key": "Tabby API-Schlüssel",
|
"Tabby API key": "Tabby API-Schlüssel",
|
||||||
"koboldcpp API key (optional)": "koboldcpp API-Schlüssel (optional)",
|
"koboldcpp API key (optional)": "koboldcpp API-Schlüssel (optional)",
|
||||||
"Example: 127.0.0.1:5001": "Beispiel: 127.0.0.1:5001",
|
"Example: http://127.0.0.1:5001": "Beispiel: http://127.0.0.1:5001",
|
||||||
"Authorize": "Autorisieren",
|
"Authorize": "Autorisieren",
|
||||||
"Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "Hole dein OpenRouter-API-Token mit OAuth-Fluss. Du wirst zu openrouter.ai weitergeleitet",
|
"Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "Hole dein OpenRouter-API-Token mit OAuth-Fluss. Du wirst zu openrouter.ai weitergeleitet",
|
||||||
"Bypass status check": "Umgehe Statusüberprüfung",
|
"Bypass status check": "Umgehe Statusüberprüfung",
|
||||||
@@ -411,7 +410,6 @@
|
|||||||
"Chat Start": "Chat-Start",
|
"Chat Start": "Chat-Start",
|
||||||
"Add Chat Start and Example Separator to a list of stopping strings.": "Fügen Sie einer Liste von Stoppzeichenfolgen „Chat-Start“ und „Beispieltrennzeichen“ hinzu.",
|
"Add Chat Start and Example Separator to a list of stopping strings.": "Fügen Sie einer Liste von Stoppzeichenfolgen „Chat-Start“ und „Beispieltrennzeichen“ hinzu.",
|
||||||
"Use as Stop Strings": "Verwende als Stoppzeichenfolgen",
|
"Use as Stop Strings": "Verwende als Stoppzeichenfolgen",
|
||||||
"context_allow_jailbreak": "Schließt Jailbreak am Ende der Eingabeaufforderung ein, wenn dies in der Charakterkarte definiert ist UND „Charakter-Jailbreak bevorzugen“ aktiviert ist.\nDIES WIRD FÜR TEXTVERVOLLSTÄNDIGUNGSMODELLE NICHT EMPFOHLEN, KANN ZU SCHLECHTEN AUSGABEN FÜHREN.",
|
|
||||||
"Allow Jailbreak": "Jailbreak zulassen",
|
"Allow Jailbreak": "Jailbreak zulassen",
|
||||||
"Context Order": "Kontextreihenfolge",
|
"Context Order": "Kontextreihenfolge",
|
||||||
"Summary": "Zusammenfassung",
|
"Summary": "Zusammenfassung",
|
||||||
@@ -940,6 +938,7 @@
|
|||||||
"Download chat as plain text document": "Chat als einfaches Textdokument herunterladen",
|
"Download chat as plain text document": "Chat als einfaches Textdokument herunterladen",
|
||||||
"Delete chat file": "Chatdatei löschen",
|
"Delete chat file": "Chatdatei löschen",
|
||||||
"Use tag as folder": "Als Ordner markieren",
|
"Use tag as folder": "Als Ordner markieren",
|
||||||
|
"Hide on character card": "Auf Charakterkarte ausblenden",
|
||||||
"Delete tag": "Tag löschen",
|
"Delete tag": "Tag löschen",
|
||||||
"Entry Title/Memo": "Eintragstitel/Memo",
|
"Entry Title/Memo": "Eintragstitel/Memo",
|
||||||
"WI Entry Status:🔵 Constant🟢 Normal🔗 Vectorized❌ Disabled": "WI-Eintragstatus: 🔵 Konstant 🟢 Normal 🔗 Vektorisiert ❌ Deaktiviert",
|
"WI Entry Status:🔵 Constant🟢 Normal🔗 Vectorized❌ Disabled": "WI-Eintragstatus: 🔵 Konstant 🟢 Normal 🔗 Vektorisiert ❌ Deaktiviert",
|
||||||
@@ -1010,10 +1009,10 @@
|
|||||||
"To whom this message will be attributed.": "Wem diese Nachricht zugeschrieben wird.",
|
"To whom this message will be attributed.": "Wem diese Nachricht zugeschrieben wird.",
|
||||||
"AI Assistant": "KI-Assistent",
|
"AI Assistant": "KI-Assistent",
|
||||||
"prompt_manager_position": "Position",
|
"prompt_manager_position": "Position",
|
||||||
"Injection position. Next to other prompts (relative) or in-chat (absolute).": "Injektionsposition. Neben anderen Eingabeaufforderungen (relativ) oder im Chat (absolut).",
|
"Next to other prompts (relative) or in-chat (absolute).": "Neben anderen Eingabeaufforderungen (relativ) oder im Chat (absolut).",
|
||||||
"prompt_manager_relative": "Relativ",
|
"prompt_manager_relative": "Relativ",
|
||||||
"prompt_manager_depth": "Tiefe",
|
"prompt_manager_depth": "Tiefe",
|
||||||
"Injection depth. 0 = after the last message, 1 = before the last message, etc.": "Injektionstiefe. 0 = nach der letzten Nachricht, 1 = vor der letzten Nachricht usw.",
|
"0 = after the last message, 1 = before the last message, etc.": "0 = nach der letzten Nachricht, 1 = vor der letzten Nachricht usw.",
|
||||||
"Prompt": "Aufforderung",
|
"Prompt": "Aufforderung",
|
||||||
"The prompt to be sent.": "Die zu sendende Eingabeaufforderung.",
|
"The prompt to be sent.": "Die zu sendende Eingabeaufforderung.",
|
||||||
"This prompt cannot be overridden by character cards, even if overrides are preferred.": "Diese Eingabeaufforderung kann nicht durch Charakterkarten überschrieben werden, selbst wenn dies bevorzugt wird.",
|
"This prompt cannot be overridden by character cards, even if overrides are preferred.": "Diese Eingabeaufforderung kann nicht durch Charakterkarten überschrieben werden, selbst wenn dies bevorzugt wird.",
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user