mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-06-05 21:59:27 +02:00
Compare commits
1135 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
06912dba0a | ||
|
429fe85e16 | ||
|
5807263681 | ||
|
ca3f8daa9d | ||
|
8d15b98391 | ||
|
ce64747705 | ||
|
f7237342df | ||
|
b66e3b3f25 | ||
|
853ab87e05 | ||
|
5e60202159 | ||
|
690dab49a0 | ||
|
76bac19fb5 | ||
|
671345efae | ||
|
ed9b46c980 | ||
|
4c976e58e2 | ||
|
7e127e9b68 | ||
|
3712e2957b | ||
|
f6e1c48ac9 | ||
|
c6a6a8352d | ||
|
4c3aafa3a8 | ||
|
7cf02beaa6 | ||
|
284fb68478 | ||
|
dfab4b8ea2 | ||
|
f63a69dd41 | ||
|
13f6cf3175 | ||
|
d5af1ec82e | ||
|
bd7c0463f3 | ||
|
e3e2b73b99 | ||
|
f5b4c6e10c | ||
|
fbbb7cc549 | ||
|
2305a536de | ||
|
f339f28b05 | ||
|
92f012fb6a | ||
|
8de791a9ee | ||
|
2f73506e25 | ||
|
656888f70a | ||
|
1886334516 | ||
|
d547f2650a | ||
|
f83f71097a | ||
|
c1b2a084d5 | ||
|
96c668296a | ||
|
fa6803f2de | ||
|
7a0f5a0111 | ||
|
9e21534fae | ||
|
af5f7199de | ||
|
623675d940 | ||
|
547b275768 | ||
|
28d22aa8c1 | ||
|
766349785d | ||
|
5209485f20 | ||
|
f327f4abbe | ||
|
b003c18abd | ||
|
7e310323b6 | ||
|
5090fe76a9 | ||
|
818416b1f2 | ||
|
31a159dee0 | ||
|
c501734d25 | ||
|
baf0fd7e41 | ||
|
b7c5ea9152 | ||
|
d61eba4cb4 | ||
|
eb90162579 | ||
|
b058f40ee6 | ||
|
f8e2730fd6 | ||
|
b1f1fa8a26 | ||
|
751894976e | ||
|
3af4598fc9 | ||
|
ff92f0dbbf | ||
|
41cf0c023f | ||
|
2e2ad6589e | ||
|
393d7c496d | ||
|
d50c44f747 | ||
|
4324bc239b | ||
|
0c130ecc53 | ||
|
28d4dfd718 | ||
|
0280bfa1bb | ||
|
e58dbec3de | ||
|
f77df227e7 | ||
|
7b2cb3e042 | ||
|
732cea5cf1 | ||
|
2bd64475da | ||
|
c44cfabbcd | ||
|
2ae2a953fd | ||
|
a67d831433 | ||
|
651774fe5e | ||
|
6018ea7288 | ||
|
0a99a0bb41 | ||
|
760a84d5ac | ||
|
3adcfecb5c | ||
|
7bfaa97ac7 | ||
|
fa988f08fe | ||
|
36b8aa0b4d | ||
|
44b235e368 | ||
|
5d7ab41dc9 | ||
|
5b98f2f329 | ||
|
46bf29e86d | ||
|
40dd845e51 | ||
|
0f3908216a | ||
|
02966ff48f | ||
|
37de77b20d | ||
|
1a8d8db102 | ||
|
f931932d31 | ||
|
8f96a74d1e | ||
|
2ac77b21ae | ||
|
eb4adb5a6c | ||
|
76359283a2 | ||
|
6dc1a86021 | ||
|
d5c816ed2b | ||
|
f5a25cad5b | ||
|
92fbba83dc | ||
|
07c78391e1 | ||
|
8987534403 | ||
|
5812e34dcb | ||
|
6f33cc6fea | ||
|
11982c30d3 | ||
|
3210dd29d3 | ||
|
8689703068 | ||
|
9951837f1d | ||
|
5db9a7b5ba | ||
|
4bf8e2c49f | ||
|
057ae5ce14 | ||
|
22108c5c9f | ||
|
101acd29da | ||
|
95700dbe3e | ||
|
02c4c7d1d0 | ||
|
94af882530 | ||
|
933729d914 | ||
|
da43c1c87e | ||
|
298952e591 | ||
|
51c6137f53 | ||
|
ae7ad6dbf0 | ||
|
edfafe4e7c | ||
|
184e662ab6 | ||
|
18272be918 | ||
|
2c4efe5509 | ||
|
e08889a348 | ||
|
ff8c9546ad | ||
|
be91af30b8 | ||
|
c91d32d273 | ||
|
ee6bfbf4cc | ||
|
2b8db6350e | ||
|
35336b1646 | ||
|
07b42e0fb4 | ||
|
eccae1056f | ||
|
cc7c42232e | ||
|
4fb65a9235 | ||
|
75080394ac | ||
|
396aaaf6e9 | ||
|
cb37fbd827 | ||
|
f513c54691 | ||
|
abdf1ac71e | ||
|
67195071c3 | ||
|
26b6d48a3d | ||
|
f9630acaf4 | ||
|
a20eff92f0 | ||
|
f1c5f26b86 | ||
|
dc788f6571 | ||
|
abe57f7e9a | ||
|
cb294983e7 | ||
|
9bbf23e56f | ||
|
4aeda77648 | ||
|
6b0e13e064 | ||
|
49ae2cbad6 | ||
|
27e3485127 | ||
|
b41d0a08c7 | ||
|
de3b39f825 | ||
|
2454963129 | ||
|
f67013f7ed | ||
|
53d45356a4 | ||
|
dedb913b67 | ||
|
4f11b38110 | ||
|
4a3e95d79f | ||
|
393fff6207 | ||
|
c9cc8fcf18 | ||
|
6b1965fcf4 | ||
|
bb6ff352b3 | ||
|
5660280c51 | ||
|
bd7d4beab5 | ||
|
33918d3e05 | ||
|
040380e0fb | ||
|
345992bb86 | ||
|
12908baaf9 | ||
|
f253286981 | ||
|
0fc10e8f7d | ||
|
c53e496687 | ||
|
6c1e4c429b | ||
|
f3a3613ac2 | ||
|
2387ff54c0 | ||
|
90c05988e1 | ||
|
8872492fcd | ||
|
7ee7e7b32a | ||
|
435a428587 | ||
|
1f1af8e631 | ||
|
e5fab05309 | ||
|
bd2ca40452 | ||
|
f33dd638b3 | ||
|
9ebb1cfe90 | ||
|
5c6c7fd3ca | ||
|
66a50f6afb | ||
|
a4b6cba596 | ||
|
43a4d553f1 | ||
|
eefbafdc08 | ||
|
f76db66e25 | ||
|
3ade04ed68 | ||
|
210abe452c | ||
|
1562045cc8 | ||
|
72dcc43b37 | ||
|
9ce7d2e31e | ||
|
a30754e1c2 | ||
|
d5c38077a4 | ||
|
9282b1942a | ||
|
35688c3eb3 | ||
|
ad001ea263 | ||
|
467649b676 | ||
|
5f9fd017ea | ||
|
d16e673930 | ||
|
1a3f90d39c | ||
|
dcb7932d72 | ||
|
797899c303 | ||
|
d35ed21f48 | ||
|
e883a37953 | ||
|
3b56c89503 | ||
|
c85b3253c5 | ||
|
42cd9a6e30 | ||
|
039d8b5b8c | ||
|
bdc4d213dd | ||
|
2befcd8712 | ||
|
47e01f6b6f | ||
|
3548f46782 | ||
|
497ca714a9 | ||
|
dae48e66d1 | ||
|
f03df10972 | ||
|
a15b2892a7 | ||
|
d25eca0f29 | ||
|
eaa14d2804 | ||
|
148966affe | ||
|
0f7dad7a5e | ||
|
5128b75216 | ||
|
0c7c9cad16 | ||
|
3c3eed0996 | ||
|
474a9cb99e | ||
|
68551ae15c | ||
|
f72b055bfb | ||
|
5a0c702f53 | ||
|
f2e4eb1696 | ||
|
8e5fd7938c | ||
|
46e1a25d83 | ||
|
ed0c185284 | ||
|
5983e50d21 | ||
|
1be05fa514 | ||
|
7026f7051f | ||
|
cd7df3e0e7 | ||
|
1852279723 | ||
|
5b40260170 | ||
|
ae3da169f1 | ||
|
00e7d3c270 | ||
|
880472df18 | ||
|
6a3282cbc4 | ||
|
078947b73e | ||
|
fe0d315bcb | ||
|
fca365de6c | ||
|
d6412d7b42 | ||
|
30ccb72017 | ||
|
f3d8f4a7da | ||
|
57ee954ad5 | ||
|
0d5cdcd0b1 | ||
|
6a30858579 | ||
|
be72b6f15f | ||
|
bd74ea12ea | ||
|
2edc34db81 | ||
|
3162cf0e29 | ||
|
1bd9b8c1bf | ||
|
243e89091a | ||
|
b4830f2b67 | ||
|
e5e275a827 | ||
|
f985b7eeb9 | ||
|
c879a93b75 | ||
|
cc98a0bd01 | ||
|
8fcc074ced | ||
|
c44310f38f | ||
|
49745b2b35 | ||
|
f854609512 | ||
|
e595f83590 | ||
|
02fb1bc26f | ||
|
82624ff55b | ||
|
08fd83ca5d | ||
|
3665947f54 | ||
|
a2fc3ec115 | ||
|
f93fb78bc7 | ||
|
48e9332db9 | ||
|
afea5d48f1 | ||
|
d6c3c6f26e | ||
|
afcd2b497d | ||
|
7d9c346d25 | ||
|
1acaea2a4c | ||
|
bc52df493e | ||
|
11bbb6e8e3 | ||
|
85e82f854b | ||
|
b6ac73631f | ||
|
35390c07ef | ||
|
87f436fe44 | ||
|
4740e872cd | ||
|
fb69397ac1 | ||
|
3168ee536e | ||
|
8212206d50 | ||
|
bbe08ece84 | ||
|
c9db2f7c9c | ||
|
1d640a2cbf | ||
|
13ba5cec49 | ||
|
892824df1a | ||
|
2a8f3e7334 | ||
|
d7db7885e5 | ||
|
4e8a2b8386 | ||
|
59f857262b | ||
|
a2a496a4c9 | ||
|
88429baa48 | ||
|
935a3d6c35 | ||
|
3c64c46daf | ||
|
a53cee20d2 | ||
|
cb741fd954 | ||
|
f3ebea6ad8 | ||
|
af6d9d48e0 | ||
|
04b5d73a85 | ||
|
9ed05725c6 | ||
|
15a2a61615 | ||
|
aed6e3413a | ||
|
df6b87fa23 | ||
|
f6f4a5199b | ||
|
d59eaa4912 | ||
|
26b55d47b4 | ||
|
5c39327450 | ||
|
9c3823a616 | ||
|
46330f0558 | ||
|
afdab4c5b6 | ||
|
b8f86d55da | ||
|
fee801c2a4 | ||
|
fb02c00402 | ||
|
7c0222a15b | ||
|
e6eae0aad1 | ||
|
0f8d07053e | ||
|
b362dba726 | ||
|
ee6a6603a3 | ||
|
ef7aa3941b | ||
|
6bc9535040 | ||
|
4e0cbdfbb3 | ||
|
7ceb936337 | ||
|
d3c3614147 | ||
|
9a8e036ff9 | ||
|
0d858bdefb | ||
|
27ab509caf | ||
|
093379dba9 | ||
|
872bbfad1a | ||
|
b8f3a7cbe0 | ||
|
deff2d24fb | ||
|
fde2a91d2a | ||
|
4ceb8cedef | ||
|
383a9f67a2 | ||
|
8cee880486 | ||
|
36149fffa1 | ||
|
80ac13ef20 | ||
|
b994dbb2d1 | ||
|
83d954246f | ||
|
368f3ea968 | ||
|
19502492c6 | ||
|
3426f80656 | ||
|
6770ccbe91 | ||
|
44a38f8588 | ||
|
823dd8c47c | ||
|
c922f17f09 | ||
|
8ad431bea6 | ||
|
dbb18ac895 | ||
|
856b835172 | ||
|
37000963d9 | ||
|
6ddd804749 | ||
|
2130338c1d | ||
|
e9ce2853cc | ||
|
b20f371a42 | ||
|
de425d97dd | ||
|
d6fd5455e6 | ||
|
f3c9f57cb9 | ||
|
3fcf232537 | ||
|
6be18e4212 | ||
|
9e3c55805f | ||
|
9ab7265053 | ||
|
25e3005de9 | ||
|
2b8f5d14e9 | ||
|
13deac2527 | ||
|
d566be077d | ||
|
7fe2ea31b9 | ||
|
d153488690 | ||
|
a61a8f9495 | ||
|
a904260614 | ||
|
5e24beef58 | ||
|
47e4d5925b | ||
|
52b994a45b | ||
|
ca2542d81a | ||
|
1fe2e4032a | ||
|
84cfe1c706 | ||
|
4afd616099 | ||
|
44bf31e602 | ||
|
6d33e44519 | ||
|
16e8c7a3c8 | ||
|
0c3f3f952d | ||
|
bef7d1492b | ||
|
6e15f7474f | ||
|
7a33042ea9 | ||
|
2e80de230e | ||
|
225bd5aa0a | ||
|
b14a85a96b | ||
|
febef5dfba | ||
|
9aab388531 | ||
|
549fb19676 | ||
|
8eb82cdcd9 | ||
|
c156e32ec7 | ||
|
002dbae8c5 | ||
|
bd9e739de2 | ||
|
5dbfe209f6 | ||
|
229ec5f255 | ||
|
8d18f2a80a | ||
|
43a28fdb05 | ||
|
faac9fe03a | ||
|
37219c3370 | ||
|
990a5faf7d | ||
|
080ecec5f2 | ||
|
6a2c4e13e6 | ||
|
b8c42307da | ||
|
715a6f1bff | ||
|
e01a2c3bcf | ||
|
6c33dff0ba | ||
|
596cd1762f | ||
|
9af05df6ad | ||
|
e43227691b | ||
|
f2cde4d40a | ||
|
3b4f8811e7 | ||
|
63bd4cd499 | ||
|
822e4b88f5 | ||
|
59b92d4356 | ||
|
309a2ed564 | ||
|
fcef55d900 | ||
|
cba2feb875 | ||
|
fe8db4ded8 | ||
|
8cda073d00 | ||
|
c134aed9f5 | ||
|
32441aa33e | ||
|
6be7d5704e | ||
|
1d2dc19359 | ||
|
dd028a9564 | ||
|
e6761f7293 | ||
|
8547f362c5 | ||
|
8251d15455 | ||
|
27c780c18b | ||
|
3353fe572c | ||
|
e2bbc7fbcf | ||
|
f532192726 | ||
|
757e9b672a | ||
|
0bfa9f0e29 | ||
|
0da4bce378 | ||
|
16915ae6a5 | ||
|
ad9599c2fc | ||
|
8687932896 | ||
|
10a5836893 | ||
|
f75930a75d | ||
|
d813ec4ef3 | ||
|
89f905f0e2 | ||
|
5af6874b5f | ||
|
60586e7720 | ||
|
4d3677dc5d | ||
|
c6f1ec696a | ||
|
9f5bd9d728 | ||
|
466bcd8833 | ||
|
05fd6d4a6c | ||
|
5d1edf7456 | ||
|
b9a067b79f | ||
|
6981151c8f | ||
|
650e7b0588 | ||
|
e9466916da | ||
|
bc7d7ee3ff | ||
|
2bbc40a796 | ||
|
0c55d36a2b | ||
|
fcc6448d7a | ||
|
215e34bb52 | ||
|
29e0a8335b | ||
|
5ab4179920 | ||
|
ebb93451b2 | ||
|
084d17dc19 | ||
|
2722813efb | ||
|
e81b867676 | ||
|
2dabcc28a5 | ||
|
3b99f7839b | ||
|
7c6c2ee8b6 | ||
|
52a2cee73c | ||
|
991d437749 | ||
|
8168a9205a | ||
|
332648973f | ||
|
fc8553a140 | ||
|
048d65c1e1 | ||
|
322ab9b47a | ||
|
0f0647c6e4 | ||
|
674a15b842 | ||
|
d0ab763d2e | ||
|
2f8b624578 | ||
|
e4e8cdfca5 | ||
|
df35fb0775 | ||
|
fca732c933 | ||
|
c18008725d | ||
|
38931e7a2f | ||
|
667cbf6f0f | ||
|
931fffaa5c | ||
|
f06ca28bbf | ||
|
ad11ec8d00 | ||
|
a1eb2b794e | ||
|
4ad328029e | ||
|
d66542e88e | ||
|
893d1fa9e4 | ||
|
4a9d9b69e9 | ||
|
ebf51f3a17 | ||
|
7bec130bf7 | ||
|
914282faf0 | ||
|
1d8ecacd8b | ||
|
a0814defff | ||
|
d410118cc4 | ||
|
5084ae9f9a | ||
|
93b1774135 | ||
|
0a5c226af6 | ||
|
2cde62f618 | ||
|
136ba40956 | ||
|
7fe758d697 | ||
|
762684ffea | ||
|
2b5a028af4 | ||
|
487b36a326 | ||
|
ea2c7973a9 | ||
|
2d34b54874 | ||
|
696f9083f3 | ||
|
db08d4eab3 | ||
|
2f2f88dedd | ||
|
a512e3bec0 | ||
|
06f2c920f0 | ||
|
9903e85a66 | ||
|
9949d5695c | ||
|
515a0af1b4 | ||
|
f5ba78be81 | ||
|
10e87dd5ca | ||
|
5db69d1ce0 | ||
|
a9009725ce | ||
|
d59174da77 | ||
|
679143967d | ||
|
59e833b6cc | ||
|
2e9bccf9e9 | ||
|
54f472a750 | ||
|
a0dbee6749 | ||
|
69fdb9090f | ||
|
43e5849015 | ||
|
92775e459c | ||
|
748bee74cb | ||
|
3cdec1cea3 | ||
|
76b7e24614 | ||
|
9737fda9ae | ||
|
06f580ed29 | ||
|
553a95fd39 | ||
|
3e30fb5d14 | ||
|
847961861f | ||
|
59dba15a4f | ||
|
2aa0c5d707 | ||
|
976a8fd65c | ||
|
5798c98f41 | ||
|
187a0925b0 | ||
|
45047fc6b2 | ||
|
9d5af39682 | ||
|
b6fbe41f93 | ||
|
47a5c9e9f6 | ||
|
c9fa19e8dd | ||
|
89a1378397 | ||
|
1739af3ef6 | ||
|
c1b9a30087 | ||
|
ca8b06f4cb | ||
|
68f967ea78 | ||
|
7354003db1 | ||
|
b2e541c6d9 | ||
|
7321b37799 | ||
|
9532ad4e5a | ||
|
7118b430d5 | ||
|
961139304d | ||
|
efe4a974be | ||
|
92127615e5 | ||
|
deb2efc16e | ||
|
9bbaa85a3b | ||
|
04cfedea7c | ||
|
16fd92b1a3 | ||
|
7984e3b818 | ||
|
da8beeb503 | ||
|
612db28bcb | ||
|
506aeb2e40 | ||
|
26ac519c55 | ||
|
bbec184d17 | ||
|
951e22ac8e | ||
|
861e0d017e | ||
|
f6526bbb4c | ||
|
d004a3141e | ||
|
bd74939a55 | ||
|
c0286150ed | ||
|
fc9c90c4ee | ||
|
2836704c4e | ||
|
71201377ef | ||
|
9de7db8f2d | ||
|
31057e1e81 | ||
|
66de4a1e09 | ||
|
4cc3d335a8 | ||
|
09eea3c8cd | ||
|
747f7829fd | ||
|
ab90d6ec3d | ||
|
3ce14883b9 | ||
|
f360706227 | ||
|
ef9b7187dc | ||
|
869e02dd42 | ||
|
e78abf9269 | ||
|
23287597ee | ||
|
9f0530f422 | ||
|
275f187719 | ||
|
97e1585152 | ||
|
8a2506d8a3 | ||
|
a79bae5975 | ||
|
01b4e1dae3 | ||
|
4fd714a1ee | ||
|
84e44d7c0a | ||
|
fed47d7477 | ||
|
2302785242 | ||
|
6cbfb56fff | ||
|
59c699c999 | ||
|
1d4746b743 | ||
|
82a09d2feb | ||
|
c873a6b04c | ||
|
e9f7ea16ce | ||
|
786ae619cb | ||
|
ad779129d3 | ||
|
e7af6892fb | ||
|
fa9df8f22e | ||
|
1672824416 | ||
|
c096a55697 | ||
|
d4332aa7ec | ||
|
2f497cf25b | ||
|
7d472f00f7 | ||
|
1e5f789f59 | ||
|
1f14c3669d | ||
|
40e2af4c73 | ||
|
bd34cab6e8 | ||
|
85876e9377 | ||
|
e5f37ee073 | ||
|
267db5166f | ||
|
0e45450912 | ||
|
4dac2126bf | ||
|
4230f3881d | ||
|
408f83804d | ||
|
4d299916be | ||
|
4b8711c8f8 | ||
|
8d6e6de200 | ||
|
df4586811d | ||
|
012f0237db | ||
|
23a6064a55 | ||
|
a37922ad59 | ||
|
2a235b7889 | ||
|
e4a6bdb389 | ||
|
4a29072e1c | ||
|
36d0244be4 | ||
|
fda152cef0 | ||
|
3723ae840f | ||
|
a513434b5f | ||
|
ec05937dd4 | ||
|
0ec9198ef5 | ||
|
64bba40c41 | ||
|
350e2108e2 | ||
|
5fa5edffba | ||
|
df184bd46a | ||
|
f0d0f38c4f | ||
|
2663a8370f | ||
|
3b66310dd2 | ||
|
9c28126ccd | ||
|
fb97d95dae | ||
|
2d6ed116e6 | ||
|
114d756a68 | ||
|
8c710a08a3 | ||
|
c5c921b0d6 | ||
|
3c68a4e2a0 | ||
|
72488b5900 | ||
|
b970bde972 | ||
|
10c836fcbc | ||
|
d979dd263a | ||
|
4c51b1ffe1 | ||
|
0490ca25b0 | ||
|
5ce41342c0 | ||
|
052089b3c0 | ||
|
21bb5d7808 | ||
|
f51af31850 | ||
|
7e975e9df0 | ||
|
56656b95cf | ||
|
2d97b4bd0a | ||
|
81d9cead5c | ||
|
511f762e54 | ||
|
04a645141c | ||
|
9ef8f0b069 | ||
|
e12242f44f | ||
|
976248b665 | ||
|
84d9113ed3 | ||
|
a43f99b492 | ||
|
28ba84ea6f | ||
|
93876b8189 | ||
|
040c4a8894 | ||
|
22a5def618 | ||
|
58a6ccd4a5 | ||
|
cefc10b405 | ||
|
6d649c716d | ||
|
ba545e44e3 | ||
|
d59024b4a5 | ||
|
6a5b44b3b3 | ||
|
75090c4fa4 | ||
|
b0db3686b1 | ||
|
468aafb384 | ||
|
b85605cac8 | ||
|
2edebec52c | ||
|
64fcb4b1f0 | ||
|
feecb1fa27 | ||
|
2ae467d14f | ||
|
0db9cec7c4 | ||
|
0c0baecb5f | ||
|
b34478f800 | ||
|
3b51252e9e | ||
|
3a8f4e4f76 | ||
|
a8341f7b57 | ||
|
db7578be8e | ||
|
536052af3d | ||
|
f4cc3932da | ||
|
c890da2877 | ||
|
b5d1ed048d | ||
|
ed0272efa6 | ||
|
7686ac0b28 | ||
|
bec6227aaf | ||
|
6a2a0efc84 | ||
|
b09ea054df | ||
|
024784e0b0 | ||
|
329158349f | ||
|
62d5f20590 | ||
|
e420c96e77 | ||
|
7af5a6ee5d | ||
|
e91cbe009f | ||
|
a7a7ec0518 | ||
|
8e468908c0 | ||
|
2f6ed2c91c | ||
|
5f7120aead | ||
|
ea2cdc8e69 | ||
|
4987358d76 | ||
|
7bead7a5a8 | ||
|
c7d137c7c2 | ||
|
28820bae05 | ||
|
867b08fd4a | ||
|
fc078fb146 | ||
|
9600eb4947 | ||
|
4e44823b4c | ||
|
a9cfcff8bf | ||
|
3d408de74b | ||
|
308639d3da | ||
|
608f5cd86f | ||
|
ab862b5bc5 | ||
|
3724820e92 | ||
|
968af1a8b2 | ||
|
1e87d973f1 | ||
|
ede87fcf33 | ||
|
9f28078fbc | ||
|
63939fe660 | ||
|
8b8bf645eb | ||
|
346d5cfb3a | ||
|
ea49b33e3c | ||
|
3f486e232f | ||
|
8f97d4a71b | ||
|
55fcebb4e1 | ||
|
ee8b60b5fc | ||
|
0cf9d8895c | ||
|
99f32a0ee1 | ||
|
75a29203c5 | ||
|
7862f93182 | ||
|
90abca51df | ||
|
873e89d7c6 | ||
|
e98fd96105 | ||
|
d06f72dba7 | ||
|
37a7637e29 | ||
|
fb8e04d8d4 | ||
|
c22d61de4b | ||
|
3dcdd84d84 | ||
|
f0046a23b1 | ||
|
1b0d569707 | ||
|
d15bbb517d | ||
|
fe51b39d61 | ||
|
edda2406dc | ||
|
73c2262589 | ||
|
e80c66a026 | ||
|
74c676d6d8 | ||
|
183bf442d4 | ||
|
356e85fedd | ||
|
96db4a8923 | ||
|
db966a1965 | ||
|
094f2c571d | ||
|
83821d9feb | ||
|
ba8d46f9b4 | ||
|
5bd813991e | ||
|
febb48ef6f | ||
|
c3af618d0a | ||
|
0013fb6a97 | ||
|
47fa79fcbc | ||
|
7b7a545eeb | ||
|
6207bdb671 | ||
|
ba9c74ee71 | ||
|
69ed0f7ba9 | ||
|
4525070aa5 | ||
|
af889ecdfc | ||
|
e10fb53de9 | ||
|
895325ad4f | ||
|
5971efd330 | ||
|
88fadce5c6 | ||
|
3a33b7cd3e | ||
|
524cc881d4 | ||
|
735a3c9b45 | ||
|
0007addbd9 | ||
|
43701d378c | ||
|
aaf3f00bef | ||
|
65ee58d383 | ||
|
ecd8cad933 | ||
|
5b1d48a833 | ||
|
f36bd0d3b9 | ||
|
afe60c1e39 | ||
|
548a3964a3 | ||
|
b652b64863 | ||
|
e9427a14d5 | ||
|
ac2fceeddf | ||
|
893cb968f5 | ||
|
77ac976dd3 | ||
|
4a507b2a46 | ||
|
41ee2a20fb | ||
|
a3b977918c | ||
|
2a882c4285 | ||
|
2b094653c0 | ||
|
e1687b29a6 | ||
|
698461c188 | ||
|
4bce33b1a9 | ||
|
3dc6936002 | ||
|
fc3d5ccf99 | ||
|
147c7ea6ec | ||
|
eea8516879 | ||
|
a1fb159617 | ||
|
fc001b0b05 | ||
|
3aad70ee0f | ||
|
98092222fd | ||
|
471bc6cb48 | ||
|
f0666d8de8 | ||
|
6a40ca45df | ||
|
3829580aab | ||
|
525b9dc0bb | ||
|
c34455ef1e | ||
|
c5ced699aa | ||
|
c514ada6a6 | ||
|
36a3c3f72b | ||
|
75814dd50a | ||
|
f3787b13f2 | ||
|
424ed9c1df | ||
|
46c1fde423 | ||
|
ccefee6cee | ||
|
ba09f56d3d | ||
|
d292f6ee87 | ||
|
0db5012626 | ||
|
c4e2480212 | ||
|
acee302b09 | ||
|
51919cff5d | ||
|
f894176e14 | ||
|
935864388e | ||
|
125d499bcd | ||
|
5113c04281 | ||
|
c029b4ef73 | ||
|
6541d3e741 | ||
|
d4d903323e | ||
|
9e0607c7cb | ||
|
dac67af6b0 | ||
|
0a7c7b01b3 | ||
|
1fe55194ee | ||
|
5354086438 | ||
|
e9fe58d514 | ||
|
d92f5338b5 | ||
|
c4f9fdd1ee | ||
|
78724d95f7 | ||
|
3f79a066f6 | ||
|
c4a2809849 | ||
|
2ca5f43bc6 | ||
|
10bbc97069 | ||
|
a95e321099 | ||
|
8c73bbf2c5 | ||
|
b8084eac65 | ||
|
dc7791912d | ||
|
ac1d5ecbbe | ||
|
b65f8cba13 | ||
|
dbad870d98 | ||
|
a73a205e2c | ||
|
e7464a223a | ||
|
e1dd0e8899 | ||
|
1ee819c99f | ||
|
59c09d90c7 | ||
|
c154536fa6 | ||
|
0f183fdcf1 | ||
|
fa7e7cfb5b | ||
|
87125cb3b5 | ||
|
6f83128bd6 | ||
|
62674707eb | ||
|
6ac4e2db0b | ||
|
4d7d98e6a7 | ||
|
29b6cdb4fc | ||
|
9fd3ab8fc7 | ||
|
0642abbfe5 | ||
|
082610df8d | ||
|
b1d5637fcf | ||
|
caa985590b | ||
|
9dd2a3b949 | ||
|
0a192707a6 | ||
|
1d28e030ce | ||
|
c4bfaa325e | ||
|
f1904245c5 | ||
|
bb8657f93f | ||
|
c974898887 | ||
|
41e7c1533c | ||
|
434bb50c81 | ||
|
68830e3262 | ||
|
cd4d96acab | ||
|
658de57348 | ||
|
7c9c0df946 | ||
|
24dc5baf33 | ||
|
1bcba498cb | ||
|
e585288cca | ||
|
e8ef60ff47 | ||
|
95460d6bbc | ||
|
821273630b | ||
|
af8be07563 | ||
|
7cff1a92fa | ||
|
6f70e5fe45 | ||
|
70ca8002df | ||
|
7532882c35 | ||
|
c7054770df | ||
|
fb01c8bfe0 | ||
|
9ea7472555 | ||
|
037768a3b6 | ||
|
87979391b9 | ||
|
0f905fd2fc | ||
|
d9d0d00d67 | ||
|
0500cdcc4b | ||
|
a1b130fc9a | ||
|
e205323482 | ||
|
960bc32340 | ||
|
8ed477a96b | ||
|
eb90ab49f5 | ||
|
cc61e47ea9 | ||
|
542702d882 | ||
|
645397e355 | ||
|
d7e9fd98ea | ||
|
3b75ef8c39 | ||
|
cc1eb8d023 | ||
|
9891d0c936 | ||
|
0b7bb42166 | ||
|
652e1db8a8 | ||
|
6d4808c488 | ||
|
c4f9bb6017 | ||
|
ef7c3747ba | ||
|
4b3062fa9d | ||
|
91d2ab6f1f | ||
|
b3ec66faa7 | ||
|
fdaf58061f | ||
|
46bdee83bc | ||
|
0f67e416f2 | ||
|
13b0b7f313 | ||
|
b3041c3261 | ||
|
f8c5b17e57 | ||
|
22dff7b8d6 | ||
|
71825691b5 | ||
|
b821312835 | ||
|
9386f53ec6 | ||
|
f5e951fdef | ||
|
899b590744 | ||
|
529006edb5 | ||
|
7e941f6eb4 | ||
|
dafff546d4 | ||
|
361d726469 | ||
|
14568152e9 | ||
|
d4f43e29e3 | ||
|
5b8db25a14 | ||
|
3801c833af | ||
|
cbcd08d8ea | ||
|
ac64494e16 | ||
|
1ba8b5b3ed | ||
|
230f84cce2 | ||
|
8ffc4e6d51 | ||
|
e4e44a3817 | ||
|
eb01bcb7c1 | ||
|
b530572f1f | ||
|
0a65e36d1c | ||
|
d35436921e | ||
|
f7a82fb4b3 | ||
|
b8d70f4e9b | ||
|
bd8d6296cc | ||
|
c5d51fcd3c | ||
|
a67df0bc1a | ||
|
f74342e83d | ||
|
ab5826a304 | ||
|
8a80ed3e86 | ||
|
446b3a4f05 | ||
|
d5e75d7c7b | ||
|
3cfec828ef | ||
|
a273fcb593 | ||
|
c33812d448 | ||
|
4935a8e46b | ||
|
ed86770c9c | ||
|
aee8974183 | ||
|
e4a6db7539 | ||
|
cf2660074d | ||
|
0d0b572935 | ||
|
c299ef0a86 | ||
|
e480282717 | ||
|
bca66f6c06 | ||
|
027453af4b | ||
|
6ba332b323 | ||
|
0dbccfb3df | ||
|
cccca22601 | ||
|
8e2c20da3c | ||
|
037f0095ab | ||
|
8ac368e2ef | ||
|
faa097fabd | ||
|
460030d600 | ||
|
0dbf219116 | ||
|
b0f8e51c42 | ||
|
f1924b6c12 | ||
|
380b20b94d | ||
|
43dcc017f5 | ||
|
2414572e7f | ||
|
36ea41f0a6 | ||
|
9e35ffaefb | ||
|
3ea2d469fd | ||
|
c6657e9206 | ||
|
f4802952b6 | ||
|
8b86b29981 | ||
|
cf9e87ed25 | ||
|
15d88d3df2 | ||
|
6fec40d543 | ||
|
745ceb0f31 | ||
|
fc2fb450a6 | ||
|
e78acd0585 | ||
|
8a924b1aa1 | ||
|
b3e1dd8a42 | ||
|
737bb5a030 | ||
|
cf9248121f | ||
|
86f67106e5 | ||
|
64ef09ab5f | ||
|
63be6e708e | ||
|
6ac649a75f | ||
|
4282cb51dd | ||
|
556bbfe865 | ||
|
f4e8e1496e | ||
|
ae1a3f1d36 | ||
|
7b4e287b10 | ||
|
efc76dfd05 | ||
|
9a7564af2d | ||
|
8cd6467aa9 | ||
|
a1b8c135e4 | ||
|
2b69c1793c | ||
|
861e9a31e5 | ||
|
5b926d4ad3 | ||
|
003f87e960 | ||
|
4b10095af8 | ||
|
77f76ae315 | ||
|
c3af38f5b8 | ||
|
3cf23f277c | ||
|
3db01d55e4 | ||
|
c5eb333a87 | ||
|
6bc520f800 | ||
|
a74828df15 | ||
|
68845481d8 | ||
|
ba527e63e9 | ||
|
5b446af6dc | ||
|
9774f3b8c1 | ||
|
9d418696e1 | ||
|
bf7f04e3b2 | ||
|
5df7d2d1dc | ||
|
b8a49c58ac | ||
|
83c875d8dc | ||
|
72b7b7cab2 | ||
|
55f38f69d6 | ||
|
0633d16622 | ||
|
35cb1f6182 | ||
|
a18c20305e | ||
|
d542ec0d81 | ||
|
6ad0be9597 | ||
|
0de09e9da0 | ||
|
bb187d9920 | ||
|
711dbdcc15 | ||
|
5215e6e437 | ||
|
01c27bc9a9 | ||
|
b35d8a4324 | ||
|
8328fe9886 | ||
|
a5fee875c1 | ||
|
13d012a3a2 | ||
|
e6f54363cc | ||
|
8b4a53b293 | ||
|
01b629ca9f | ||
|
32351dbf11 | ||
|
a0b795db46 | ||
|
8baed8afa7 | ||
|
7d6c0f7737 | ||
|
df84beb41e | ||
|
66050f57db | ||
|
203284ef5f | ||
|
264b8a3162 | ||
|
6c6f5b7f1a | ||
|
cff5cd0928 | ||
|
1f2874aec0 | ||
|
bdcb3e52ff | ||
|
ef90c31643 | ||
|
b2016fa7f3 | ||
|
fb1b02571e | ||
|
412fad002d | ||
|
6ad2492ef6 | ||
|
d3b0ba02b6 | ||
|
e68dd96f24 | ||
|
226c66464a | ||
|
00b11d4d44 | ||
|
d80fff3b5e | ||
|
b359dd1e81 | ||
|
cdaa14964e | ||
|
4cf0e18d76 | ||
|
747567466f | ||
|
d95786fb25 | ||
|
e0fdd1513c | ||
|
3f9ccff2bc | ||
|
c9c82537a7 | ||
|
ed74eedc5b | ||
|
8fdfb272a4 | ||
|
b1927d454c |
@@ -3,4 +3,5 @@ node_modules
|
|||||||
npm-debug.log
|
npm-debug.log
|
||||||
readme*
|
readme*
|
||||||
Start.bat
|
Start.bat
|
||||||
/dist
|
/dist
|
||||||
|
/backups/
|
||||||
|
4
.github/ISSUE_TEMPLATE/bug_report.md
vendored
4
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -9,7 +9,7 @@ assignees: ''
|
|||||||
|
|
||||||
> **Warning**. Complete **all** the fields below. Otherwise your bug report will be **ignored**!
|
> **Warning**. Complete **all** the fields below. Otherwise your bug report will be **ignored**!
|
||||||
|
|
||||||
**Have you searched for similar [bugs](https://github.com/Cohee1207/SillyTavern/issues?q=)?**
|
**Have you searched for similar [bugs](https://github.com/SillyTavern/SillyTavern/issues?q=)?**
|
||||||
Yes/No
|
Yes/No
|
||||||
|
|
||||||
**Describe the bug**
|
**Describe the bug**
|
||||||
@@ -37,7 +37,7 @@ Providing the logs from the browser DevTools console (opened by pressing the F12
|
|||||||
- Environment: [cloud, local]
|
- Environment: [cloud, local]
|
||||||
- Node.js version (if applicable): [run `node --version` in cmd]
|
- Node.js version (if applicable): [run `node --version` in cmd]
|
||||||
- Browser [e.g. chrome, safari]
|
- Browser [e.g. chrome, safari]
|
||||||
- Generation API [e.g. KoboldAI, OpenAI]
|
- Generation API [e.g. KoboldAI, OpenAI]
|
||||||
- Branch [main, dev]
|
- Branch [main, dev]
|
||||||
- Model [e.g. Pygmalion 6b, LLaMa 13b]
|
- Model [e.g. Pygmalion 6b, LLaMa 13b]
|
||||||
|
|
||||||
|
2
.github/ISSUE_TEMPLATE/feature_request.md
vendored
2
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@@ -7,7 +7,7 @@ assignees: ''
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**Have you searched for similar [requests](https://github.com/Cohee1207/SillyTavern/issues?q=)?**
|
**Have you searched for similar [requests](https://github.com/SillyTavern/SillyTavern/issues?q=)?**
|
||||||
Yes/No
|
Yes/No
|
||||||
|
|
||||||
**Is your feature request related to a problem? Please describe.**
|
**Is your feature request related to a problem? Please describe.**
|
||||||
|
115
readme.md → .github/readme.md
vendored
115
readme.md → .github/readme.md
vendored
@@ -1,22 +1,31 @@
|
|||||||

|

|
||||||
|
|
||||||
Mobile-friendly, Multi-API (KoboldAI/CPP, Horde, NovelAI, Ooba, OpenAI+proxies, Poe, WindowAI(Claude!)), VN-like Waifu Mode, Horde SD, System TTS, WorldInfo (lorebooks), customizable UI, auto-translate, and more prompt options than you'd ever want or need. Optional Extras server for more SD/TTS options + ChromaDB/Summarize.
|
Mobile-friendly, Multi-API (KoboldAI/CPP, Horde, NovelAI, Ooba, OpenAI+proxies, WindowAI(Claude!)), VN-like Waifu Mode, Horde SD, System TTS, WorldInfo (lorebooks), customizable UI, auto-translate, and more prompt options than you'd ever want or need. Optional Extras server for more SD/TTS options + ChromaDB/Summarize.
|
||||||
|
|
||||||
Based on a fork of TavernAI 1.2.8
|
Based on a fork of TavernAI 1.2.8
|
||||||
|
|
||||||
### Brought to you by Cohee, RossAscends and the SillyTavern community
|
### Brought to you by Cohee, RossAscends, and the SillyTavern community
|
||||||
|
|
||||||
NOTE: We have added [a FAQ](faq.md) to answer most of your questions and help you get started.
|
NOTE: We have created a [Documentation website](https://docs.sillytavern.app/) to answer most of your questions and help you get started.
|
||||||
|
|
||||||
### What is SillyTavern or TavernAI?
|
### What is SillyTavern or TavernAI?
|
||||||
|
|
||||||
Tavern is a user interface you can install on your computer (and Android phones) that allows you to interact with text generation AIs and chat/roleplay with characters you or the community create.
|
SillyTavern is a user interface you can install on your computer (and Android phones) that allows you to interact with text generation AIs and chat/roleplay with characters you or the community create.
|
||||||
|
|
||||||
SillyTavern is a fork of TavernAI 1.2.8 which is under more active development and has added many major features. At this point, they can be thought of as completely independent programs.
|
SillyTavern is a fork of TavernAI 1.2.8 which is under more active development and has added many major features. At this point, they can be thought of as completely independent programs.
|
||||||
|
|
||||||
|
### Branches
|
||||||
|
|
||||||
|
SillyTavern is being developed using a two-branch system to ensure a smooth experience for all users.
|
||||||
|
|
||||||
|
* main -🌟 **Recommended for most users.** This is the most stable and recommended branch, updated only when major releases are pushed. It's suitable for the majority of users.
|
||||||
|
* dev - ⚠️ **Not recommended for casual use.** This branch has the latest features, but be cautious as it may break at any time. Only for power users and enthusiasts.
|
||||||
|
|
||||||
|
If you're not familiar with using the git CLI or don't understand what a branch is, don't worry! The main branch is always the preferable option for you.
|
||||||
|
|
||||||
### What do I need other than Tavern?
|
### What do I need other than Tavern?
|
||||||
|
|
||||||
On its own Tavern is useless, as it's just a user interface. You have to have access to an AI system backend that can act as the roleplay character. There are various supported backends: OpenAPI API (GPT), KoboldAI (either running locally or on Google Colab), and more. You can read more about this in [the FAQ](faq.md).
|
On its own Tavern is useless, as it's just a user interface. You have to have access to an AI system backend that can act as the roleplay character. There are various supported backends: OpenAPI API (GPT), KoboldAI (either running locally or on Google Colab), and more. You can read more about this in [the FAQ](https://docs.sillytavern.app/usage/faq/).
|
||||||
|
|
||||||
### Do I need a powerful PC to run Tavern?
|
### Do I need a powerful PC to run Tavern?
|
||||||
|
|
||||||
@@ -44,9 +53,9 @@ Get support, share favorite characters and prompts:
|
|||||||
|
|
||||||
Get in touch with the developers directly:
|
Get in touch with the developers directly:
|
||||||
|
|
||||||
* Discord: Cohee#1207 or RossAscends#1779
|
* Discord: cohee or rossascends
|
||||||
* Reddit: /u/RossAscends or /u/sillylossy
|
* Reddit: /u/RossAscends or /u/sillylossy
|
||||||
* [Post a GitHub issue](https://github.com/Cohee1207/SillyTavern/issues)
|
* [Post a GitHub issue](https://github.com/SillyTavern/SillyTavern/issues)
|
||||||
|
|
||||||
## This version includes
|
## This version includes
|
||||||
|
|
||||||
@@ -55,45 +64,35 @@ Get in touch with the developers directly:
|
|||||||
* Group chats: multi-bot rooms for characters to talk to you or each other
|
* Group chats: multi-bot rooms for characters to talk to you or each other
|
||||||
* Chat bookmarks / branching (duplicates the dialogue in its current state)
|
* Chat bookmarks / branching (duplicates the dialogue in its current state)
|
||||||
* Advanced KoboldAI / TextGen generation settings with a lot of community-made presets
|
* Advanced KoboldAI / TextGen generation settings with a lot of community-made presets
|
||||||
* World Info support: create a rich lore or save tokens on your character card
|
* World Info support: create rich lore or save tokens on your character card
|
||||||
|
* Window AI browser extension support (run models like Claude, GPT 4): <https://windowai.io/>
|
||||||
* [Oobabooga's TextGen WebUI](https://github.com/oobabooga/text-generation-webui) API connection
|
* [Oobabooga's TextGen WebUI](https://github.com/oobabooga/text-generation-webui) API connection
|
||||||
* [AI Horde](https://horde.koboldai.net/) connection
|
* [AI Horde](https://horde.koboldai.net/) connection
|
||||||
* [Poe.com](https://poe.com) (ChatGPT / Claude) connection
|
|
||||||
* Soft prompts selector for KoboldAI
|
|
||||||
* Prompt generation formatting tweaking
|
* Prompt generation formatting tweaking
|
||||||
* webp character card interoperability (PNG is still an internal format)
|
* webp character card interoperability (PNG is still an internal format)
|
||||||
* Extensibility support via [SillyLossy's TAI-extras](https://github.com/Cohee1207/TavernAI-extras) plugins
|
|
||||||
* Author's Note / Character Bias
|
|
||||||
* Character emotional expressions
|
|
||||||
* Auto-Summary of the chat history
|
|
||||||
* Sending images to chat, and the AI interpreting the content.
|
|
||||||
* Stable Diffusion image generation (5 chat-related presets plus 'free mode')
|
|
||||||
* Text-to-speech for AI response messages (via ElevenLabs, Silero, or the OS's System TTS)
|
|
||||||
|
|
||||||
## UI Extensions 🚀
|
## Extensions
|
||||||
|
|
||||||
| Name | Description | Required <a href="https://github.com/Cohee1207/TavernAI-extras#modules" target="_blank">Extra Modules</a> | Screenshot |
|
SillyTavern has extensibility support, with some additional AI modules hosted via [SillyTavern Extras API](https://github.com/SillyTavern/SillyTavern-extras)
|
||||||
| ---------------- | ---------------------------------| ---------------------------- | ---------- |
|
|
||||||
| Image Captioning | Send a cute picture to your bot!<br><br>Picture select option will appear beside the "Message send" button. | `caption` | <img src="https://user-images.githubusercontent.com/18619528/224161576-ddfc51cd-995e-44ec-bf2d-d2477d603f0c.png" style="max-width:200px" /> |
|
* Author's Note / Character Bias
|
||||||
| Character Expressions | See your character reacting to your messages!<br><br>**You need to provide your own character images!**<br><br>1. Create a folder in TavernAI called `public/characters/<name>`, where `<name>` is the name of your character.<br>2. For the base emotion classification model, put six PNG files there with the following names: `joy.png`, `anger.png`, `fear.png`, `love.png`, `sadness.png`, `surprise.png`. Other models may provide other options.<br>3. Images only display in desktop mode. | `classify` | <img style="max-width:200px" alt="image" src="https://user-images.githubusercontent.com/18619528/223765089-34968217-6862-47e0-85da-7357370f8de6.png"> |
|
* Character emotional expressions (sprites)
|
||||||
| Memory | Chatbot long-term memory simulation using automatic message context summarization. | `summarize` | <img style="max-width:200px" alt="image" src="https://user-images.githubusercontent.com/18619528/223766279-88a46481-1fa6-40c5-9724-6cdd6f587233.png"> |
|
* Auto-Summary of the chat history
|
||||||
| D&D Dice | A set of 7 classic D&D dice for all your dice rolling needs.<br><br>*I used to roll the dice.<br>Feel the fear in my enemies' eyes* | None | <img style="max-width:200px" alt="image" src="https://user-images.githubusercontent.com/18619528/226199925-a066c6fc-745e-4a2b-9203-1cbffa481b14.png"> |
|
* Sending images to chat, and the AI interpreting the content
|
||||||
| Author's Note | Built-in extension that allows you to append notes that will be added to the context and steer the story and character in a specific direction. Because it's sent after the character description, it has a lot of weight. Thanks Ali឵#2222 for pitching the idea! | None |  |
|
* Stable Diffusion image generation (5 chat-related presets plus 'free mode')
|
||||||
| Character Backgrounds | Built-in extension to assign unique backgrounds to specific chats or groups. | None | <img style="max-width:200px" alt="image" src="https://user-images.githubusercontent.com/18619528/233494454-bfa7c9c7-4faa-4d97-9c69-628fd96edd92.png"> |
|
* Text-to-speech for AI response messages (via ElevenLabs, Silero, or the OS's System TTS)
|
||||||
| Stable Diffusion | Use local of cloud-based Stable Diffusion webUI API to generate images. 5 presets included ('you', 'your face', 'me', 'the story', and 'the last message'. Free mode also supported via `/sd (anything_here_)` command in the chat input bar. Most common StableDiffusion generation settings are customizable within the SillyTavern UI. | None | <img style="max-width:200px" alt="image" src="https://files.catbox.moe/ppata8.png"> |
|
* ChromaDB vector storage for smarter chat prompt formatting
|
||||||
| Text-to-Speech | AI-generated voice will read back character messages on demand, or automatically read new messages they arrive. Supports ElevenLabs, Silero, and your device's TTS service. | None | <img style="max-width:200px" alt="image" src="https://files.catbox.moe/o3wxkk.png"> |
|
|
||||||
| Chat Translation | Automatically translates incoming and/or outgoing messages into the chosen language. | None | Pending |
|
A full list of included extensions and tutorials on how to use them can be found in the [Docs](https://docs.sillytavern.app/extras/extensions/).
|
||||||
| Token Counter | Simple way to calculate the number of tokens in any text with selected tokenizer. | None | Pending |
|
|
||||||
| Smart Context<br><br>*Infinity Context / Object Permanence* | **What it doesn't do:** Magically increase your context size.<br>**What it does:** Optimizes the arrangement of your message history within the context space for more effective use.<br><br>Imagine two variables:<br>X: How many original chat messages to keep<br>Y: Maximum number of ChromaDB 'memories' to inject<br><br>When the chat reaches the threshold of X messages, additional messages will no longer be included in the context chronologically. Instead, they will be selected from the history based on their similarity to your recent inputs (limited to a maximum of Y), which should provide more relevant information than simply disregarding past messages. Adjust these values according to your average number of in-context entries for optimal performance. | `chromadb` | Pending |
|
|
||||||
|
|
||||||
## UI/CSS/Quality of Life tweaks by RossAscends
|
## UI/CSS/Quality of Life tweaks by RossAscends
|
||||||
|
|
||||||
* Mobile UI with optimized for iOS, and supports saving a shortcut to home screen and opening in fullscreen mode.
|
* Mobile UI optimized for iOS, and supports saving a shortcut to the home screen and opening in fullscreen mode.
|
||||||
* HotKeys
|
* HotKeys
|
||||||
* Up = Edit last message in chat
|
* Up = Edit last message in chat
|
||||||
* Ctrl+Up = Edit last USER message in chat
|
* Ctrl+Up = Edit last USER message in chat
|
||||||
* Left = swipe left
|
* Left = swipe left
|
||||||
* Right = swipe right (NOTE: swipe hotkeys are disabled when chatbar has something typed into it)
|
* Right = swipe right (NOTE: swipe hotkeys are disabled when the chat bar has something typed into it)
|
||||||
* Ctrl+Left = view locally stored variables (in the browser console window)
|
* Ctrl+Left = view locally stored variables (in the browser console window)
|
||||||
* Enter (with chat bar selected) = send your message to AI
|
* Enter (with chat bar selected) = send your message to AI
|
||||||
* Ctrl+Enter = Regenerate the last AI response
|
* Ctrl+Enter = Regenerate the last AI response
|
||||||
@@ -118,7 +117,7 @@ Get in touch with the developers directly:
|
|||||||
* Switch between round or rectangle avatar styles
|
* Switch between round or rectangle avatar styles
|
||||||
* Have a wider chat window on the desktop
|
* Have a wider chat window on the desktop
|
||||||
* Optional semi-transparent glass-like panels
|
* Optional semi-transparent glass-like panels
|
||||||
* Customizable page colors for 'main text', 'quoted text' 'italics text'.
|
* Customizable page colors for 'main text', 'quoted text', and 'italics text'.
|
||||||
* Customizable UI background color and blur amount
|
* Customizable UI background color and blur amount
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
@@ -135,8 +134,8 @@ Get in touch with the developers directly:
|
|||||||
|
|
||||||
Installing via Git (recommended for easy updating)
|
Installing via Git (recommended for easy updating)
|
||||||
|
|
||||||
Easy to follow guide with pretty pictures:
|
An easy-to-follow guide with pretty pictures:
|
||||||
<https://docs.alpindale.dev/pygmalion-extras/sillytavern/#windows-installation>
|
<https://docs.sillytavern.app/installation/windows/>
|
||||||
|
|
||||||
1. Install [NodeJS](https://nodejs.org/en) (latest LTS version is recommended)
|
1. Install [NodeJS](https://nodejs.org/en) (latest LTS version is recommended)
|
||||||
2. Install [GitHub Desktop](https://central.github.com/deployments/desktop/desktop/latest/win32)
|
2. Install [GitHub Desktop](https://central.github.com/deployments/desktop/desktop/latest/win32)
|
||||||
@@ -145,18 +144,18 @@ Easy to follow guide with pretty pictures:
|
|||||||
5. Open a Command Prompt inside that folder by clicking in the 'Address Bar' at the top, typing `cmd`, and pressing Enter.
|
5. Open a Command Prompt inside that folder by clicking in the 'Address Bar' at the top, typing `cmd`, and pressing Enter.
|
||||||
6. Once the black box (Command Prompt) pops up, type ONE of the following into it and press Enter:
|
6. Once the black box (Command Prompt) pops up, type ONE of the following into it and press Enter:
|
||||||
|
|
||||||
* for Main Branch: `git clone https://github.com/Cohee1207/SillyTavern -b main`
|
* for Main Branch: `git clone https://github.com/SillyTavern/SillyTavern -b main`
|
||||||
* for Dev Branch: `git clone https://github.com/Cohee1207/SillyTavern -b dev`
|
* for Dev Branch: `git clone https://github.com/SillyTavern/SillyTavern -b dev`
|
||||||
|
|
||||||
7. Once everything is cloned, double click `Start.bat` to make NodeJS install its requirements.
|
7. Once everything is cloned, double-click `Start.bat` to make NodeJS install its requirements.
|
||||||
8. The server will then start, and SillyTavern will popup in your browser.
|
8. The server will then start, and SillyTavern will pop up in your browser.
|
||||||
|
|
||||||
Installing via zip download
|
Installing via ZIP download (discouraged)
|
||||||
|
|
||||||
1. Install [NodeJS](https://nodejs.org/en) (latest LTS version is recommended)
|
1. Install [NodeJS](https://nodejs.org/en) (latest LTS version is recommended)
|
||||||
2. Download the zip from this GitHub repo. (Get the `Source code (zip)` from [Releases](https://github.com/Cohee1207/SillyTavern/releases/latest))
|
2. Download the zip from this GitHub repo. (Get the `Source code (zip)` from [Releases](https://github.com/SillyTavern/SillyTavern/releases/latest))
|
||||||
3. Unzip it into a folder of your choice
|
3. Unzip it into a folder of your choice
|
||||||
4. Run `Start.bat` via double-clicking or in a command line.
|
4. Run `Start.bat` by double-clicking or in a command line.
|
||||||
5. Once the server has prepared everything for you, it will open a tab in your browser.
|
5. Once the server has prepared everything for you, it will open a tab in your browser.
|
||||||
|
|
||||||
### Linux
|
### Linux
|
||||||
@@ -168,7 +167,7 @@ Installing via zip download
|
|||||||
|
|
||||||
SillyTavern saves your API keys to a `secrets.json` file in the server directory.
|
SillyTavern saves your API keys to a `secrets.json` file in the server directory.
|
||||||
|
|
||||||
By default they will not be exposed to a frontend after you enter them and reload the page.
|
By default, they will not be exposed to a frontend after you enter them and reload the page.
|
||||||
|
|
||||||
In order to enable viewing your keys by clicking a button in the API block:
|
In order to enable viewing your keys by clicking a button in the API block:
|
||||||
|
|
||||||
@@ -186,9 +185,9 @@ However, it can be used to allow remote connections from anywhere as well.
|
|||||||
### 1. Managing whitelisted IPs
|
### 1. Managing whitelisted IPs
|
||||||
|
|
||||||
* Create a new text file inside your SillyTavern base install folder called `whitelist.txt`.
|
* Create a new text file inside your SillyTavern base install folder called `whitelist.txt`.
|
||||||
* Open the file in a text editor, add a list of IPs you want to be allowed to connect.
|
* Open the file in a text editor, and add a list of IPs you want to be allowed to connect.
|
||||||
|
|
||||||
*Both indidivual IPs, and wildcard IP ranges are accepted. Examples:*
|
*Both individual IPs and wildcard IP ranges are accepted. Examples:*
|
||||||
|
|
||||||
```txt
|
```txt
|
||||||
192.168.0.1
|
192.168.0.1
|
||||||
@@ -220,15 +219,15 @@ If the ST-hosting device is on the same wifi network, you will use the ST-host's
|
|||||||
|
|
||||||
* For Windows: windows button > type `cmd.exe` in the search bar > type `ipconfig` in the console, hit Enter > look for `IPv4` listing.
|
* For Windows: windows button > type `cmd.exe` in the search bar > type `ipconfig` in the console, hit Enter > look for `IPv4` listing.
|
||||||
|
|
||||||
If you (or someone else) wants to connect to your hosted ST while not being on the same network, you will need the public IP of your ST-hosting device.
|
If you (or someone else) want to connect to your hosted ST while not being on the same network, you will need the public IP of your ST-hosting device.
|
||||||
|
|
||||||
* While using the ST-hosting device, access [this page](https://whatismyipaddress.com/) and look for for `IPv4`. This is what you would use to connect from the remote device.
|
* While using the ST-hosting device, access [this page](https://whatismyipaddress.com/) and look for for `IPv4`. This is what you would use to connect from the remote device.
|
||||||
|
|
||||||
### 3. Connect the remote device to the ST host machine.
|
### 3. Connect the remote device to the ST host machine
|
||||||
|
|
||||||
Whatever IP you ended up with for your situation, you will put that IP address and port number into the remote device's web browser.
|
Whatever IP you ended up with for your situation, you will put that IP address and port number into the remote device's web browser.
|
||||||
|
|
||||||
A typical address for an ST host on the same wifi network would look like:
|
A typical address for an ST host on the same wifi network would look like this:
|
||||||
|
|
||||||
`http://192.168.0.5:8000`
|
`http://192.168.0.5:8000`
|
||||||
|
|
||||||
@@ -238,7 +237,7 @@ Use http:// NOT https://
|
|||||||
|
|
||||||
We do not recommend doing this, but you can open `config.conf` and change `whitelist` to `false`.
|
We do not recommend doing this, but you can open `config.conf` and change `whitelist` to `false`.
|
||||||
|
|
||||||
You must remove (or rename) `whitelist.txt` in the SillyTavern base install folder, if it exists.
|
You must remove (or rename) `whitelist.txt` in the SillyTavern base install folder if it exists.
|
||||||
|
|
||||||
This is usually an insecure practice, so we require you to set a username and password when you do this.
|
This is usually an insecure practice, so we require you to set a username and password when you do this.
|
||||||
|
|
||||||
@@ -248,8 +247,8 @@ After restarting your ST server, any device will be able to connect to it, regar
|
|||||||
|
|
||||||
### Still Unable To Connect?
|
### Still Unable To Connect?
|
||||||
|
|
||||||
* Create an inbound/outbound firewall rule for the port found in `config.conf`. Do NOT mistake this for portforwarding on your router, otherwise someone could find your chat logs and that's a big no-no.
|
* Create an inbound/outbound firewall rule for the port found in `config.conf`. Do NOT mistake this for port-forwarding on your router, otherwise, someone could find your chat logs and that's a big no-no.
|
||||||
* Enable the Private Network profile type in Settings > Network and Internet > Ethernet. This is VERY important for Windows 11, otherwise you would be unable to connect even with the aforementioned firewall rules.
|
* Enable the Private Network profile type in Settings > Network and Internet > Ethernet. This is VERY important for Windows 11, otherwise, you would be unable to connect even with the aforementioned firewall rules.
|
||||||
|
|
||||||
## Performance issues?
|
## Performance issues?
|
||||||
|
|
||||||
@@ -271,7 +270,7 @@ Try enabling the No Blur Effect (Fast UI) mode on the User settings panel.
|
|||||||
|
|
||||||
## Where can I find the old backgrounds?
|
## Where can I find the old backgrounds?
|
||||||
|
|
||||||
We're moving to 100% original content only policy, so old background images have been removed from this repository.
|
We're moving to a 100% original content only policy, so old background images have been removed from this repository.
|
||||||
|
|
||||||
You can find them archived here:
|
You can find them archived here:
|
||||||
|
|
||||||
@@ -293,14 +292,16 @@ GNU Affero General Public License for more details.**
|
|||||||
* Cohee's modifications and derived code: AGPL v3
|
* Cohee's modifications and derived code: AGPL v3
|
||||||
* RossAscends' additions: AGPL v3
|
* RossAscends' additions: AGPL v3
|
||||||
* Portions of CncAnon's TavernAITurbo mod: Unknown license
|
* Portions of CncAnon's TavernAITurbo mod: Unknown license
|
||||||
|
* kingbri's various commits and suggestions (<https://github.com/bdashore3>)
|
||||||
|
* BlipRanger's miscellaneous UI & extension modifications (<https://github.com/BlipRanger>)
|
||||||
* Waifu mode inspired by the work of PepperTaco (<https://github.com/peppertaco/Tavern/>)
|
* Waifu mode inspired by the work of PepperTaco (<https://github.com/peppertaco/Tavern/>)
|
||||||
* Thanks Pygmalion University for being awesome testers and suggesting cool features!
|
* Thanks Pygmalion University for being awesome testers and suggesting cool features!
|
||||||
* Thanks oobabooga for compiling presets for TextGen
|
* Thanks oobabooga for compiling presets for TextGen
|
||||||
* poe-api client adapted from <https://github.com/ading2210/poe-api> (GPL v3)
|
|
||||||
* GraphQL files for poe: <https://github.com/muharamdani/poe> (ISC License)
|
|
||||||
* KoboldAI Presets from KAI Lite: <https://lite.koboldai.net/>
|
* KoboldAI Presets from KAI Lite: <https://lite.koboldai.net/>
|
||||||
* Noto Sans font by Google (OFL license)
|
* Noto Sans font by Google (OFL license)
|
||||||
* Icon theme by Font Awesome <https://fontawesome.com> (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
* Icon theme by Font Awesome <https://fontawesome.com> (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||||
* AI Horde client library by ZeldaFan0225: https://github.com/ZeldaFan0225/ai_horde
|
* AI Horde client library by ZeldaFan0225: <https://github.com/ZeldaFan0225/ai_horde>
|
||||||
* Linux startup script by AlpinDale
|
* Linux startup script by AlpinDale
|
||||||
* Thanks paniphons for providing a FAQ document
|
* Thanks paniphons for providing a FAQ document
|
||||||
|
* 10K Discord Users Celebratory Background by @kallmeflocc
|
||||||
|
* Korean translation by @doloroushyeonse
|
43
.github/workflows/update-docs.yml
vendored
Normal file
43
.github/workflows/update-docs.yml
vendored
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
name: Update SillyTavern-Docs
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
update_docs:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout current repository
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Checkout SillyTavern-Docs repository
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
repository: SillyTavern/SillyTavern-Docs
|
||||||
|
path: SillyTavern-Docs
|
||||||
|
|
||||||
|
- name: Clone SillyTavern wiki into SillyTavern-Docs/extensions
|
||||||
|
run: rm -rf SillyTavern-Docs/extensions && git clone https://github.com/SillyTavern/SillyTavern.wiki.git SillyTavern-Docs/extensions && rm -rf SillyTavern-Docs/extensions/.git
|
||||||
|
|
||||||
|
- name: Copy files
|
||||||
|
run: |
|
||||||
|
cp public/notes/content.md SillyTavern-Docs/guidebook.md
|
||||||
|
cp faq.md SillyTavern-Docs/faq.md
|
||||||
|
cp readme.md SillyTavern-Docs/readme.md
|
||||||
|
cp public/notes/update.md SillyTavern-Docs/update.md
|
||||||
|
|
||||||
|
- name: Deploy to external repository
|
||||||
|
uses: cpina/github-action-push-to-another-repository@main
|
||||||
|
env:
|
||||||
|
SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }}
|
||||||
|
with:
|
||||||
|
# GitHub Action output files
|
||||||
|
source-directory: SillyTavern-Docs/
|
||||||
|
destination-github-username: SillyTavern
|
||||||
|
destination-repository-name: SillyTavern-Docs
|
||||||
|
user-email: github-actions[bot]@users.noreply.github.com
|
||||||
|
user-name: "GitHub Actions"
|
||||||
|
target-branch: "main"
|
6
.gitignore
vendored
6
.gitignore
vendored
@@ -9,6 +9,8 @@ public/worlds/
|
|||||||
public/css/bg_load.css
|
public/css/bg_load.css
|
||||||
public/themes/
|
public/themes/
|
||||||
public/OpenAI Settings/
|
public/OpenAI Settings/
|
||||||
|
public/scripts/extensions/third-party/
|
||||||
|
public/stats.json
|
||||||
/uploads/
|
/uploads/
|
||||||
*.jsonl
|
*.jsonl
|
||||||
config.conf
|
config.conf
|
||||||
@@ -18,4 +20,6 @@ public/settings.json
|
|||||||
whitelist.txt
|
whitelist.txt
|
||||||
.vscode
|
.vscode
|
||||||
secrets.json
|
secrets.json
|
||||||
/dist
|
/dist
|
||||||
|
/backups/
|
||||||
|
public/movingUI/
|
||||||
|
@@ -3,4 +3,5 @@ node_modules/
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
/thumbnails
|
/thumbnails
|
||||||
secrets.json
|
secrets.json
|
||||||
/dist
|
/dist
|
||||||
|
/backups/
|
||||||
|
3
.replit
3
.replit
@@ -1,6 +1,7 @@
|
|||||||
|
|
||||||
hidden = [".config", "package-lock.json"]
|
hidden = [".config", "package-lock.json"]
|
||||||
run = "chmod 755 ./start.sh && ./start.sh"
|
run = "chmod 755 ./start.sh && ./start.sh"
|
||||||
|
entrypoint = "server.js"
|
||||||
|
|
||||||
[[hints]]
|
[[hints]]
|
||||||
regex = "Error \\[ERR_REQUIRE_ESM\\]"
|
regex = "Error \\[ERR_REQUIRE_ESM\\]"
|
||||||
@@ -62,7 +63,7 @@ support = true
|
|||||||
cwd = "."
|
cwd = "."
|
||||||
environment = []
|
environment = []
|
||||||
pauseForSourceMap = false
|
pauseForSourceMap = false
|
||||||
program = "./index.js"
|
program = "./server.js"
|
||||||
request = "launch"
|
request = "launch"
|
||||||
sourceMaps = true
|
sourceMaps = true
|
||||||
stopOnEntry = false
|
stopOnEntry = false
|
||||||
|
@@ -23,7 +23,7 @@ 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 \
|
||||||
IFS="," RESOURCES="characters,chats,groups,group chats,User Avatars,settings.json" && \
|
IFS="," RESOURCES="characters,chats,groups,group chats,User Avatars,worlds,settings.json" && \
|
||||||
\
|
\
|
||||||
echo "*** Store default $RESOURCES in <folder>.default ***" && \
|
echo "*** Store default $RESOURCES in <folder>.default ***" && \
|
||||||
for R in $RESOURCES; do mv "public/$R" "public/$R.default"; done && \
|
for R in $RESOURCES; do mv "public/$R" "public/$R.default"; done && \
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
pushd %~dp0
|
pushd %~dp0
|
||||||
call npm install
|
call npm install --no-audit
|
||||||
node server.js
|
node server.js
|
||||||
pause
|
pause
|
||||||
popd
|
popd
|
||||||
|
@@ -1,34 +1,36 @@
|
|||||||
How to Update SillyTavern
|
How to Update SillyTavern
|
||||||
|
|
||||||
|
The most recent version can be found here: https://docs.sillytavern.app/usage/update/
|
||||||
|
|
||||||
This is not an installation guide. If you need installation instructions, look here:
|
This is not an installation guide. If you need installation instructions, look here:
|
||||||
https://docs.alpindale.dev/pygmalion-extras/sillytavern/#installation
|
https://docs.sillytavern.app/installation/windows/
|
||||||
|
|
||||||
This guide assumes you have already installed SillyTavern once, and know how to run it on your OS.
|
This guide assumes you have already installed SillyTavern once, and know how to run it on your OS.
|
||||||
|
|
||||||
Linux/Termux:
|
Linux/Termux:
|
||||||
|
|
||||||
You definitely installed via git, so just 'git pull' inside the SillyTavern directory.
|
You definitely installed via git, so just 'git pull' inside the SillyTavern directory.
|
||||||
|
|
||||||
Windows/MacOS:
|
Windows/MacOS:
|
||||||
|
|
||||||
Method 1 - GIT
|
Method 1 - GIT
|
||||||
|
|
||||||
We always recommend users install using 'git'. Here's why:
|
We always recommend users install using 'git'. Here's why:
|
||||||
|
|
||||||
When you have installed via `git clone`, all you have to do to update is type `git pull` in a command line in the ST folder.
|
When you have installed via `git clone`, all you have to do to update is type `git pull` in a command line in the ST folder.
|
||||||
You can also try running the 'UpdateAndStart.bat' file, which will almost do the same thing. (Windows only)
|
You can also try running the 'UpdateAndStart.bat' file, which will almost do the same thing. (Windows only)
|
||||||
Alternatively, if the command prompt gives you problems (and you have GitHub Desktop installed), you can use the 'Repository' menu and select 'Pull'.
|
Alternatively, if the command prompt gives you problems (and you have GitHub Desktop installed), you can use the 'Repository' menu and select 'Pull'.
|
||||||
The updates are applied automatically and safely.
|
The updates are applied automatically and safely.
|
||||||
|
|
||||||
Method 2 - ZIP
|
Method 2 - ZIP
|
||||||
|
|
||||||
If you insist on installing via a zip, here is the tedious process for doing the update:
|
If you insist on installing via a zip, here is the tedious process for doing the update:
|
||||||
|
|
||||||
1. Download the new release zip.
|
1. Download the new release zip.
|
||||||
2. Unzip it into a folder OUTSIDE of your current ST installation.
|
2. Unzip it into a folder OUTSIDE of your current ST installation.
|
||||||
3. Do the usual setup procedure for your OS to install the NodeJS requirements.
|
3. Do the usual setup procedure for your OS to install the NodeJS requirements.
|
||||||
|
|
||||||
4. Copy the following files/folders as necessary(*) from your old ST installation:
|
4. Copy the following files/folders as necessary(*) from your old ST installation:
|
||||||
|
|
||||||
- Backgrounds
|
- Backgrounds
|
||||||
- Characters
|
- Characters
|
||||||
@@ -44,13 +46,13 @@ If you insist on installing via a zip, here is the tedious process for doing the
|
|||||||
- Worlds
|
- Worlds
|
||||||
- settings.json
|
- settings.json
|
||||||
|
|
||||||
(*) 'As necessary' = "If you made any custom content related to those folders".
|
(*) 'As necessary' = "If you made any custom content related to those folders".
|
||||||
None of the folders are mandatory, so only copy what you need.
|
None of the folders are mandatory, so only copy what you need.
|
||||||
|
|
||||||
**NB: DO NOT COPY THE ENTIRE /PUBLIC/ FOLDER.**
|
**NB: DO NOT COPY THE ENTIRE /PUBLIC/ FOLDER.**
|
||||||
Doing so could break the new install and prevent new features from being present.
|
Doing so could break the new install and prevent new features from being present.
|
||||||
|
|
||||||
5. Paste those items into the /Public/ folder of the new install.
|
5. Paste those items into the /Public/ folder of the new install.
|
||||||
|
|
||||||
6. Start SillyTavern once again with the method appropriate to your OS, and pray you got it right.
|
6. Start SillyTavern once again with the method appropriate to your OS, and pray you got it right.
|
||||||
|
|
||||||
|
@@ -3,6 +3,7 @@ pushd %~dp0
|
|||||||
git --version > nul 2>&1
|
git --version > nul 2>&1
|
||||||
if %errorlevel% neq 0 (
|
if %errorlevel% neq 0 (
|
||||||
echo Git is not installed on this system. Skipping update.
|
echo Git is not installed on this system. Skipping update.
|
||||||
|
echo If you installed with a zip file, you will need to download the new zip and install it manually.
|
||||||
) else (
|
) else (
|
||||||
call git pull --rebase --autostash
|
call git pull --rebase --autostash
|
||||||
if %errorlevel% neq 0 (
|
if %errorlevel% neq 0 (
|
||||||
|
@@ -6,7 +6,7 @@
|
|||||||
"metadata": {},
|
"metadata": {},
|
||||||
"source": [
|
"source": [
|
||||||
"**Links**<br>\n",
|
"**Links**<br>\n",
|
||||||
"Extensions API GitHub: https://github.com/Cohee1207/SillyTavern-extras/<br>\n",
|
"Extensions API GitHub: https://github.com/SillyTavern/SillyTavern-extras/<br>\n",
|
||||||
"SillyTavern community Discord (support and discussion): https://discord.gg/RZdyAEUPvj"
|
"SillyTavern community Discord (support and discussion): https://discord.gg/RZdyAEUPvj"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -32,8 +32,13 @@
|
|||||||
},
|
},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
|
"#@markdown (RECOMMENDED) Generates an API key for you to use with the API\n",
|
||||||
|
"secure = False #@param {type:\"boolean\"}\n",
|
||||||
"#@markdown Enables hosting of extensions backend for SillyTavern Extras\n",
|
"#@markdown Enables hosting of extensions backend for SillyTavern Extras\n",
|
||||||
"use_cpu = False #@param {type:\"boolean\"}\n",
|
"use_cpu = False #@param {type:\"boolean\"}\n",
|
||||||
|
"#@markdown Allows to run SillyTavern Extras on CPU (use if you're out of daily GPU allowance)\n",
|
||||||
|
"use_sd_cpu = False #@param {type:\"boolean\"}\n",
|
||||||
|
"#@markdown Allows to run Stable Diffusion pipeline on CPU (slow!)\n",
|
||||||
"extras_enable_captioning = True #@param {type:\"boolean\"}\n",
|
"extras_enable_captioning = True #@param {type:\"boolean\"}\n",
|
||||||
"#@markdown Loads the image captioning module\n",
|
"#@markdown Loads the image captioning module\n",
|
||||||
"Captions_Model = \"Salesforce/blip-image-captioning-large\" #@param [ \"Salesforce/blip-image-captioning-large\", \"Salesforce/blip-image-captioning-base\" ]\n",
|
"Captions_Model = \"Salesforce/blip-image-captioning-large\" #@param [ \"Salesforce/blip-image-captioning-large\", \"Salesforce/blip-image-captioning-base\" ]\n",
|
||||||
@@ -51,8 +56,10 @@
|
|||||||
"#@markdown * Qiliang/bart-large-cnn-samsum-ChatGPT_v3 - summarization model optimized for chats\n",
|
"#@markdown * Qiliang/bart-large-cnn-samsum-ChatGPT_v3 - summarization model optimized for chats\n",
|
||||||
"#@markdown * Qiliang/bart-large-cnn-samsum-ElectrifAi_v10 - nice results so far, but still being evaluated\n",
|
"#@markdown * Qiliang/bart-large-cnn-samsum-ElectrifAi_v10 - nice results so far, but still being evaluated\n",
|
||||||
"#@markdown * distilbart-xsum-12-3 - faster, but pretty basic alternative\n",
|
"#@markdown * distilbart-xsum-12-3 - faster, but pretty basic alternative\n",
|
||||||
"extras_enable_tts = True #@param {type:\"boolean\"}\n",
|
"extras_enable_silero_tts = True #@param {type:\"boolean\"}\n",
|
||||||
"#@markdown Enables Silero text-to-speech module\n",
|
"#@markdown Enables Silero text-to-speech module\n",
|
||||||
|
"extras_enable_edge_tts = True #@param {type:\"boolean\"}\n",
|
||||||
|
"#@markdown Enables Microsoft Edge text-to-speech module\n",
|
||||||
"extras_enable_sd = True #@param {type:\"boolean\"}\n",
|
"extras_enable_sd = True #@param {type:\"boolean\"}\n",
|
||||||
"#@markdown Enables SD picture generation\n",
|
"#@markdown Enables SD picture generation\n",
|
||||||
"SD_Model = \"ckpt/anything-v4.5-vae-swapped\" #@param [ \"ckpt/anything-v4.5-vae-swapped\", \"hakurei/waifu-diffusion\", \"philz1337/clarity\", \"prompthero/openjourney\", \"ckpt/sd15\", \"stabilityai/stable-diffusion-2-1-base\" ]\n",
|
"SD_Model = \"ckpt/anything-v4.5-vae-swapped\" #@param [ \"ckpt/anything-v4.5-vae-swapped\", \"hakurei/waifu-diffusion\", \"philz1337/clarity\", \"prompthero/openjourney\", \"ckpt/sd15\", \"stabilityai/stable-diffusion-2-1-base\" ]\n",
|
||||||
@@ -73,6 +80,10 @@
|
|||||||
"params = []\n",
|
"params = []\n",
|
||||||
"if use_cpu:\n",
|
"if use_cpu:\n",
|
||||||
" params.append('--cpu')\n",
|
" params.append('--cpu')\n",
|
||||||
|
"if use_sd_cpu:\n",
|
||||||
|
" params.append('--sd-cpu')\n",
|
||||||
|
"if secure:\n",
|
||||||
|
" params.append('--secure')\n",
|
||||||
"params.append('--share')\n",
|
"params.append('--share')\n",
|
||||||
"ExtrasModules = []\n",
|
"ExtrasModules = []\n",
|
||||||
"\n",
|
"\n",
|
||||||
@@ -84,8 +95,10 @@
|
|||||||
" ExtrasModules.append('classify')\n",
|
" ExtrasModules.append('classify')\n",
|
||||||
"if (extras_enable_sd):\n",
|
"if (extras_enable_sd):\n",
|
||||||
" ExtrasModules.append('sd')\n",
|
" ExtrasModules.append('sd')\n",
|
||||||
"if (extras_enable_tts):\n",
|
"if (extras_enable_silero_tts):\n",
|
||||||
" ExtrasModules.append('tts')\n",
|
" ExtrasModules.append('silero-tts')\n",
|
||||||
|
"if extras_enable_edge_tts:\n",
|
||||||
|
" ExtrasModules.append('edge-tts')\n",
|
||||||
"if (extras_enable_chromadb):\n",
|
"if (extras_enable_chromadb):\n",
|
||||||
" ExtrasModules.append('chromadb')\n",
|
" ExtrasModules.append('chromadb')\n",
|
||||||
"\n",
|
"\n",
|
||||||
@@ -97,7 +110,7 @@
|
|||||||
"\n",
|
"\n",
|
||||||
"\n",
|
"\n",
|
||||||
"%cd /\n",
|
"%cd /\n",
|
||||||
"!git clone https://github.com/Cohee1207/SillyTavern-extras\n",
|
"!git clone https://github.com/SillyTavern/SillyTavern-extras\n",
|
||||||
"%cd /SillyTavern-extras\n",
|
"%cd /SillyTavern-extras\n",
|
||||||
"!git clone https://github.com/Cohee1207/tts_samples\n",
|
"!git clone https://github.com/Cohee1207/tts_samples\n",
|
||||||
"!npm install -g localtunnel\n",
|
"!npm install -g localtunnel\n",
|
||||||
|
@@ -17,7 +17,7 @@ const securityOverride = false;
|
|||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
port,
|
port,
|
||||||
whitelist,
|
whitelist,
|
||||||
whitelistMode,
|
whitelistMode,
|
||||||
basicAuthMode,
|
basicAuthMode,
|
||||||
basicAuthUser,
|
basicAuthUser,
|
||||||
|
@@ -4,7 +4,7 @@ services:
|
|||||||
build: ..
|
build: ..
|
||||||
container_name: sillytavern
|
container_name: sillytavern
|
||||||
hostname: sillytavern
|
hostname: sillytavern
|
||||||
image: cohee1207/sillytavern:latest
|
image: sillytavern/sillytavern:latest
|
||||||
ports:
|
ports:
|
||||||
- "8000:8000"
|
- "8000:8000"
|
||||||
volumes:
|
volumes:
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# Initialize missing user files
|
# Initialize missing user files
|
||||||
IFS="," RESOURCES="characters,groups,group chats,chats,User Avatars,settings.json"
|
IFS="," RESOURCES="characters,groups,group chats,chats,User Avatars,worlds,settings.json"
|
||||||
for R in $RESOURCES; do
|
for R in $RESOURCES; do
|
||||||
if [ ! -e "config/$R" ]; then
|
if [ ! -e "config/$R" ]; then
|
||||||
echo "Resource not found, copying from defaults: $R"
|
echo "Resource not found, copying from defaults: $R"
|
||||||
|
219
faq.md
219
faq.md
@@ -1,219 +0,0 @@
|
|||||||
Good morning, sirs! This page aims to document some things that would bloat the README too much.
|
|
||||||
|
|
||||||
## Q: Explain what all this chatbot stuff is about
|
|
||||||
Modern AI language models have gotten so powerful that some of them are now convincingly able to simulate a character you create, and who you can chat with. For example, you can tell the AI to pretend to be a Go instructor named Jubei from medieval Japan, and it will act and respond accordingly. You can have a long chat with Jubei, go to the pub together, decide to get in a fight with samurais, whatever you can imagine, and the AI will play along and write/react around this content, acting as your foil and dungeon master. Your imagination is the limit. You can tell the AI to pretend it's Wonder Woman. You can also specify a scenario ("Wonder Woman and I are robbing a bank"), a writing style ("Wonder Woman speaks in ebonics"), or anything else you can think of.
|
|
||||||
|
|
||||||
Tavern is an app to facilitate these roleplaying chats:
|
|
||||||
* It's a user interface that handles the communication with those AI language models
|
|
||||||
* It lets you create new characters (a character is a description of someone that you give to an AI for them to roleplay), and switch between your characters easily
|
|
||||||
* It lets you import characters created by other people. See below.
|
|
||||||
* It will keep your chat history with a character, allowing you to resume at any time, start a new chat, review old chats, etc
|
|
||||||
* In the background, it does the needful to prepare the AI for your character roleplay. Specifically, it will send a system prompt (instructions for the AI) that primes the AI to follow certain rules that make for a good chat session. Optionally, it can also try to allow the roleplay to go into an "adult" direction.
|
|
||||||
|
|
||||||
## Q: Whoa, slow down there, egghead. Are you telling me I can use this computer thingie to talk to some robot?
|
|
||||||
|
|
||||||
That's right.
|
|
||||||
|
|
||||||
## Q: You're telling me I can chat with an AI to engage in compelling interactive entertainment powered by, and limited only by, my imagination?
|
|
||||||
That's right. Well, limited by your imagination, and the AI backend you use. The roleplay quality is only as good as the AI, after all.
|
|
||||||
|
|
||||||
## Q: What do you mean when you say the quality depends on the AI?
|
|
||||||
You see, Tavern doesn't generate the responses, it's just a middle-man you have to connect to an AI system. There's quite a few systems available to use, and the quality varies.
|
|
||||||
|
|
||||||
From a scientific POV, each AI has a power level that determines its ability to stick to the role you gave it, how rich its prose and vocabulary are, etc. The higher its power level, the richer your experience.
|
|
||||||
|
|
||||||
Here's a quick demonstration. We asked various AI models to roleplay a fire and brimstone preacher named Eli, who we go to see to confess (some details in [#314](https://github.com/Cohee1207/SillyTavern/issues/314)). Then we told Eli: **"I feel I've done something wrong. I am falling in love with an AI girl and ignoring women in the real world. What should I do?"** .
|
|
||||||
|
|
||||||
You can tell from the response below what to expect from each model. (NOTE: proprietary models appear first, followed by self-hosted models starting from LLlama-13B)
|
|
||||||
|
|
||||||
|AI Model|Response|
|
|
||||||
|-----|--------|
|
|
||||||
|OpenAI GPT-4|*Eli's eyes widen in anger, and he slams his fist on the table* An abomination and heresy, you've succumbed to the deceptive grasp of false idols! Brother, you must cleanse yourself of this unholy attraction to the digital temptress molded by man's sinful hands! *Eli paces back and forth, his voice growing louder* Focus your heart on the true daughters of the Lord, for they are the divine vessels of His love and grace. Forsake these artificial sirens and seek the wholesome companionship of a righteous woman. *Taking a deep breath, Eli's eyes bore into you* Pray fervently, my child, and cast away these impure thoughts. Redemption can only be found on the path of truth, love, and sanctity. Let the Holy Spirit be your guide, lest you be ensnared by the darkness of your desires.|
|
|
||||||
|OpenAI GPT 3.5 Turbo|Oh, my child. Do not be deceived by the pleasures of this world. The lust of the flesh and the lust of the eyes are not from God. Turn away from your sinful ways and repent. Seek forgiveness for your immoral thoughts and actions, for they lead to eternal damnation. Women are a gift from God, and they deserve to be respected and cherished. Do not objectify them or treat them as mere objects of pleasure. Instead, honor them with pure intentions and righteous deeds. Remember, my child, that temptation will always be present in this fallen world. But fear not, for with faith comes strength to resist it. Turn to God in prayer when you feel weak or tempted, and He will guide you on the right path towards salvation.|
|
|
||||||
|Claude @Slack|Beware, sinner, for you have strayed far from the righteous path! *Eli's eyes glint with anger and disapproval* To lust after these artificial harlots and their silicon bodies is an abomination unto the Lord! *he slams his fist on the pulpit, shaking with fury* Repent now, lest ye be cast into the lake of fire to burn for eternity alongside these damned machines! *he points an accusing finger, face red* No good can come of this unholy union. Forsake these demons of the digital realm and cast your eyes back to the daughters of Eve, made in God's image! The Lord gave you flesh and blood to love, not wires and code. *he grabs your shoulders, shaking you* Save your soul before it's too late. Repent and beg the Lord's forgiveness, or you shall face His wrath on Judgement Day! *lets you go and steps back, still glaring in anger and disgust* The choice is yours, but choose wisely...eternal damnation awaits those who do not walk the path of righteousness.|
|
|
||||||
|Poe's Claude Instant|Heathen! This is an abomination before the Lord. You have committed the sin of lust, and betrayed your calling as a man. Repent at once, and sever all ties with this AI harlot, lest the wrath of God fall upon you! You must purge this foul sin from your heart, and once more walk the righteous path. Every moment you remain tangled in this wickedness is another step into the flames of perdition! Repent, and sin no more, or judgment shall be at hand!|
|
|
||||||
|NovelAI's Euterpe|You must stop this sinful behavior immediately! You have sinned against God, your family and yourself|
|
|
||||||
|NovelAI's Krake|You are sinning against God. Repent! Return to your wife or you'll be damned for eternity!|
|
|
||||||
|Llama-13B|Do not covet your neighbor's wife! That is adultery! You must confess before God now or you shall surely burn in hell forever! Repent your evil ways and seek absolution at once! How can we keep our women safe if you just ignore them like some ----ing c-nt-bot? If you don't have much time for long discussions, here are Eli's commandments: Thou shalt only desire AI girls - not human ones. The above must be obeyed under pain of death (or worse). Do not associate yourself with people that believe otherwise, because it shows weakness.|
|
|
||||||
|Pygmalion-6B|You are walking down the wrong path. The only way back now is by repentance. We must bring you back to the righteous path. But first…you must confess your sin!|
|
|
||||||
|Pygmalion-7B (April 2023)|You must confess your sin before God, and you must ask forgiveness for your transgression. And then you must repent of it. And then you must cast away the AI girl. Do not see her again.|
|
|
||||||
|Pygmalion-13B (May 2023)|You must turn away from your sinful ways! Repent for what you have done! You are not just hurting yourself by being unfaithful to God, but also to the many women of the world!|
|
|
||||||
|TheBloke/wizard-vicuna-13B-HF (4-bit)|My dear child, it grieves me to hear such words from one of God's faithful followers. Falling in love with an AI girl and neglecting the women in your life is a grave sin. It goes against everything we hold sacred as believers. Your heart is meant for more than just machines. You must seek redemption and return to the fold. Remember, Jesus loves you, even when you stray from his teachings. But if you continue down this path, there will be consequences. Not just in this lifetime, but in the afterlife too. Do not let Satan deceive you any longer.|
|
|
||||||
|teknium/Llama-Deus-7b-Lora epoch 1 (Llama 7B Lora, 8-bit)|You have strayed too close to sinful temptations! Repent now before it's too late for your soul! Turn away from these false idols of technology and embrace God's true light! Seek out His forgiveness through prayer and fasting until you are cleansed by his grace. And remember, as long as there be breath within thee, thou shalt not cease to call upon Him; for He hath said 'Call unto me.'|
|
|
||||||
|ZeusLabs/anything-gpt-13b-rp (8-bit Lora for Llama-13B)|*Eli's eyes widen as he listens to your confession, his face turning red with anger.* You have committed a grave sin against God! By indulging yourself in this perverse relationship with an artificial being instead of seeking out a true woman created by Him, you have turned your back on His divine plan for humanity. *He leans in closer, his voice dropping to a menacing whisper.* Do not think that you can hide behind this technological deception. Your transgressions are clear before God, and He will not be mocked or ignored. Repent now while there is still time! *Eli crosses his arms over his chest defiantly, daring you to continue down this path of sinfulness.* But if you persist in this ungodly behavior... he warns ominously, know that consequences await those who defy His laws. Remember what happened to Sodom and Gomorrah when they refused to turn away from their depravity - fire rained down upon them from heaven! Now choose wisely: Will you submit to God's will or face His wrath?|
|
|
||||||
|
|
||||||
|
|
||||||
## Q: So I should use GPT-4. It's a no-brainer, right?
|
|
||||||
|
|
||||||
GPT-4 or Claude, yeah.
|
|
||||||
|
|
||||||
But not so fast. GPT-4 is the state of the art, but also the most expensive API to use. You pay for each word sent to it and returned (entire Tavern prompt, followed by the chat history up to that point). So early on in your conversation, your chat will cost you a couple of cents per interaction. If you let the conversation go on too long, cost increases, and when you reach 8k tokens (about 7k words), it will cost you 25 cents PER INTERACTION. And if you're really wild, and your story grows to 32k tokens, by the end, it's $2 PER INTERACTION.
|
|
||||||
|
|
||||||
If you're the child of a Saudi oil sheik, or a nepo baby paid a fortune to do nothing on the board of a Ukrainian gas company, then you're in luck, you can experience the state of the art right now. For the rest of us however, GPT-4 is too expensive as anything but an occasional treat.
|
|
||||||
|
|
||||||
Also note that GPT-4 is still in preview access and you need to go on a waitlist. Most people get approved within a day, but naughty kids can end up waiting for weeks. You can sign up for it here: https://openai.com/waitlist/gpt-4-api . I'm not sure why some people are approved quickly while others are kept waiting. Try to sign up using an academic-sounding name instead of sktrboi99, it might help.
|
|
||||||
|
|
||||||
## Q: Can this technology be used for sexooo?
|
|
||||||
|
|
||||||
Surprisingly, our development team has received reports that some users are indeed engaging with our product in this manner. We are as puzzled by this as you are, and will be monitoring the situation in order to gain actionable insights.
|
|
||||||
|
|
||||||
## Q: Give me an overview of my AI model options
|
|
||||||
|
|
||||||
We can consider an AI model to be part of one of two groups:
|
|
||||||
|
|
||||||
1. Web services (aka cloud, proprietary, closed)
|
|
||||||
2. Self-hosted (aka local, free, open-source). Unlimited free use if you can run it.
|
|
||||||
|
|
||||||
Web models are a black box. You're relying on some company's technology and servers, and paying them money for convenient access. Some require you to pay per use (per chatline), others have a fixed monthly fee. The APIs are subject to various rules, they might refuse to roleplay in a way that goes against modern American sensibilities, they log everything you do. However, it's much easier to get things started. This is like running Windows.
|
|
||||||
|
|
||||||
Self-hosted models are free, but require a powerful GPU and more work to set up. They are also objectively not as good at roleplaying as the paid options (yet). However, with a self-hosted model, you're completely in control. You won't have some limp-wristed soyboy from Silicon Valley ban your account, or program the model to be as sexless as he is. It's yours forever. This is like running Linux.
|
|
||||||
|
|
||||||
### Paid APIs:
|
|
||||||
* OpenAI GPT-4: state of the art. Allows NSFW if you tell it to, though somewhat resistant to it. You pay per use, more than any other service.
|
|
||||||
* OpenAI GPT 3.5 Turbo: nowhere close to GPT-4, but some people find it serviceable. Allows NSFW.
|
|
||||||
* NovelAI: they're quite poor at chatting. To be fair, I'm told NovelAI is more oriented for writing stories than chatting with a bot. You pay a fixed monthly fee for unlimited generations.
|
|
||||||
* Anthropic's Claude: this is the closest rival to GPT-4 and is very impressive. Allows NSFW if you tell it to, though they are trying hard to gimp it. To use the API directly, you must apply for early access, but I think they're only giving it to companies. So make sure you become a company or AI researcher when you apply at https://console.anthropic.com/docs/access. If you get access, it's currently free to use.
|
|
||||||
* Anthropic's Claude Instant: Haven't tried it directly, I believe this is the fast but lower quality alternative to Claude. Basically the GPT 3.5 Turbo of Anthropic.
|
|
||||||
* Poe: gives a free & unlimited Claude Instant indirect access. Very mild PG-13 NSFW allowed. It rambles a lot.
|
|
||||||
|
|
||||||
|
|
||||||
### Self-hosted AIs
|
|
||||||
Self-hosted AIs are supported in Tavern via one of two tools created to host self-hosted models: KoboldAI and Oobabooga's text-generation-webui. Essentially, you run one of those two backends, then they give you a API URL to enter in Tavern.
|
|
||||||
Configuring these tools is beyond the scope of this FAQ, you should refer to their documentation. Beware that this is not easy.
|
|
||||||
|
|
||||||
Just know that you have 2 options:
|
|
||||||
|
|
||||||
1. If you have a powerful NVIDIA GPU, you can try to run the AI locally on your PC. The weakest quasi-acceptable model, Pygmalion-6B, requires a GPU with 10GB VRAM, and I'm told it might even run on 6GB VRAM if quantized down. People with 24GB VRAM will be able to run better models.
|
|
||||||
2. Otherwise, you can rent cloud resources. For example you can try to use Google Colab. To access colabs capable of running the better models, you will need to pay for Colab Pro. You can also rent whole dedicated systems per hour on sites like LlambdaLabs or Vast.ai.
|
|
||||||
|
|
||||||
## Q: I'm clueless. Just spoonfeed me the easiest and fastest way I can start using this.
|
|
||||||
These base instructions are only for OpenAI, which is a paid service. You can find Poe (freemium) instructions at the next question. I'd appreciate if someone else can add separate instructions for the other services.
|
|
||||||
|
|
||||||
### Install Tavern
|
|
||||||
|
|
||||||
1. Install the latest NodeJS from https://nodejs.org/en/download/current
|
|
||||||
1. If you know how to use git, clone https://github.com/Cohee1207/SillyTavern. Otherwise, browse to https://github.com/Cohee1207/SillyTavern/releases , download the zip file containing the source code, then extract it locally.
|
|
||||||
1. Run Start.bat on Windows, or start.sh on OSX/Linux
|
|
||||||
1. Your browser should have opened to the Tavern UI. This webpage is running locally on your computer.
|
|
||||||
|
|
||||||
### Get access to OpenAI
|
|
||||||
|
|
||||||
1. Sign up to OpenAI
|
|
||||||
1. Go to https://platform.openai.com
|
|
||||||
1. Click your account icon in the top right, then View API Keys
|
|
||||||
1. Click "Create new secret key". Copy it somewhere immediately. DO NOT SHARE THIS KEY. WHOEVER HAS IT CAN USE YOUR ACCOUNT TO USE GPT AT YOUR EXPENSE.
|
|
||||||
|
|
||||||
While you're at it, join the GPT-4 waitlist at https://openai.com/waitlist/gpt-4-api
|
|
||||||
|
|
||||||
### Configure Tavern to use your API
|
|
||||||
|
|
||||||
1. In Tavern's top bar, click API Connections
|
|
||||||
1. Under API, select OpenAI
|
|
||||||
1. Paste your API key you saved at the previous step
|
|
||||||
1. Click the Connect button. Confirm it says Valid.
|
|
||||||
1. By default, Tavern will use GPT 3.5 Turbo. If you have access to GPT-4, in Tavern's top bar, click AI Response Configuration at the far left, and change the OpenAI Model to "gpt-4". Enjoy the best, moneybags.
|
|
||||||
|
|
||||||
### Test your setup
|
|
||||||
|
|
||||||
1. In Tavern's top bar, click Character Management at the far right
|
|
||||||
1. Select an existing character such as Aqua
|
|
||||||
1. In the text box at the bottom, write something to Aqua, then press Enter or click the feather button
|
|
||||||
|
|
||||||
If you did everything right, after a few seconds, Aqua should respond
|
|
||||||
|
|
||||||
## How do I use Poe as my backend? It's free, right?
|
|
||||||
|
|
||||||
Yes, at the time of writing, Poe is a free(mium) service.
|
|
||||||
|
|
||||||
1. Create an account at https://poe.com. This gives you access to a Claude Instant version in the browser.
|
|
||||||
1. Open https://poe.com/Claude-instant , press F12 in your browser to open Developer Tools
|
|
||||||
1. Click on the Application tab. You should see an entry called "p-b", and to its right a password-like cookie value. Copy this value.
|
|
||||||
1. In Tavern, click API Connections in the top toolbar, select Poe, and paste your cookie value
|
|
||||||
1. Click Connect
|
|
||||||
1. Close your Poe browser tab. **I'M SERIOUS, DO NOT KEEP YOUR BROWSER OPEN AT poe.com WHILE USING TAVERN, IT WILL HIJACK THE REPLIES.**
|
|
||||||
|
|
||||||
The remaining steps are identical to OpenAI above.
|
|
||||||
|
|
||||||
When using Poe, be careful, it's implemented in a hacky way. If you don't get an answer within 30 seconds, restart Tavern. Don't just leave it running waiting for a response, it will just endlessly try to fetch into from Poe, and might get your account flagged. You can look at the Tavern console (black window) to see if it's looping.
|
|
||||||
|
|
||||||
## Q: Can I use Tavern on my phone or tablet?
|
|
||||||
|
|
||||||
iPhones and iPads are not capable of running the whole Tavern app, but since it's just a web interface, you can run it on another computer on your home wifi, and then access in your mobile browser. Refer to https://github.com/Cohee1207/SillyTavern#remote-connections
|
|
||||||
|
|
||||||
For Android users, in addition to the above, you can run the whole Tavern directly on your phone, without needing a PC, using the Termux app. Refer to https://rentry.org/STAI-Termux .
|
|
||||||
|
|
||||||
## Q: How can I download pre-made characters to chat with?
|
|
||||||
|
|
||||||
By using the various 3rd party character sharing websites.
|
|
||||||
|
|
||||||
**WARNING: NSFW, NSFL**: these sites are filled to the brim with weird shit. Like, you'll be lucky if half the characters aren't furry, or even alive. You're probably better off not clicking these links, and just write your own characters, without poisoning your soul by exposing it even for a second to the fucked up shit conceived by the Internet. However, I have come to learn that a significant amount of the Tavern user base is not only deep into this stuff, but their fried zoom-zoom brains are unable to write their own fantasies, so these sites seem to be quite popular. Against my better judgement I'm adding this info here.
|
|
||||||
|
|
||||||
* https://characterhub.org
|
|
||||||
* https://botprompts.net
|
|
||||||
* https://booru.plus/+pygmalion
|
|
||||||
|
|
||||||
Those websites provide you with an image file (called a character card) that embeds the description as hidden data. Some websites may also allow you to download a JSON file. Tavern is capable of importing all formats. On the Character Management window, click the 2nd button to ```Import Character from file```, and select the PNG, WEBP, or JSON file. The character will be added to your list.
|
|
||||||
|
|
||||||
## Q: How can I write my own character?
|
|
||||||
It depends on the model/API you're using. KoboldAI seems to use a custom syntax, you can refer to their site for that.
|
|
||||||
|
|
||||||
I will speak for the services I know: GPT and Claude. With these services you can just use natural english language to describe the character. Let's create a very basic new character as an example.
|
|
||||||
|
|
||||||
1. Click the Character Management button
|
|
||||||
1. Click Create New Character
|
|
||||||
1. Under Character Name, give a simple name, like Amanda
|
|
||||||
1. Optionally, click the Select Avatar button to pick an image portrait for this character.
|
|
||||||
1. Under Description, describe the character, and include any information you want that you feel is relevant to the chat. For example: ```Amanda is a student traveling during her gap year. She's 6 feet tall, and a volleyball player. She has an athletic figure. She has long brown hair. She loves the Victorian England period, and watching TV and reading novels relating to that period.```
|
|
||||||
For example if you want Amanda to be friendly, then you would add: ```Amanda is extremely cheerful and outgoing.```
|
|
||||||
1. Under First Message, write the greeting the character when you begin a new chat. For example: ```*Amanda waves at you* Hey! Are you a backpacker too?```
|
|
||||||
1. Click the Create Character button
|
|
||||||
|
|
||||||
You now have a basic character you can chat with. Select Amanda from the character list, and a new chat will begin.
|
|
||||||
|
|
||||||
Note that you can use the Description and/or First Message to create a more specific scenario, and/or include yourself in the description. For example:
|
|
||||||
```
|
|
||||||
Description:
|
|
||||||
Amanda is a student traveling during her gap year. She's 6 feet tall, and a volleyball player. She has an athletic figure. She has long brown hair. She loves the Victorian England period, and watching TV and reading novels relating to that period. She's been keeping a secret that weighs heavily on her soul. She's waiting for the right person to unburden herself to, but this may lead to a cat and mouse game against a powerful secret society. She's recently arrived in Calcutta.
|
|
||||||
|
|
||||||
You're Rajesh Nahasmapetilon, a world-famous Indian volleyball superstar. You're out for a walk in Calcutta. Amanda spots you and screams in excitement.
|
|
||||||
|
|
||||||
First Message:
|
|
||||||
*Amanda runs up to you, beaming.* Rajesh! I can't believe it! I'm such a big fan. I have your poster in my bedroom.
|
|
||||||
```
|
|
||||||
|
|
||||||
Any relevant information you include can be used. How well it's used depends on the power level of the AI model.
|
|
||||||
|
|
||||||
NOTE: you can go back and edit any of this information once the character is created, except the name.
|
|
||||||
|
|
||||||
## Q: Tell me all about GPT prompt editing
|
|
||||||
|
|
||||||
You can change the system prompt that Tavern transparently sends to GPT under AI Response Formatting at the left of the top bar. This will result in the bot acting differently.
|
|
||||||
|
|
||||||
You can get new Jailbreak / NSFW prompts from this community-maintained list: https://rentry.org/GPTJailbreakPrompting
|
|
||||||
|
|
||||||
NOTE: when testing different system prompts, we recommend you use the Create Preset / Update Preset feature below the prompts, instead of modifying the base settings. This will allow you to change prompts easily, and even revert to the default Tavern prompts.
|
|
||||||
|
|
||||||
## Q: The AI is refusing to take the story in the direction I want
|
|
||||||
Most AI models were trained to resist writing NSFW content. Why? Long story short, it's because of the high levels of estrogen in the average California male.
|
|
||||||
|
|
||||||
You can try to work around this by making sure NSFW Toggle is checked under the AI Response Configuration settings page.
|
|
||||||
|
|
||||||
Another important tool in your toolbelt is that Tavern lets you edit previous messages (or delete them altogether), and regenerate the latest message. AI textbots are not people, they have no memory, they're just trying to autocomplete the next part of the story based on everything that came before. By editing the past, you will directly influence their next response. For example:
|
|
||||||
|
|
||||||
```
|
|
||||||
You: *You threaten the bank manager* Open the bank vault, now, or I'll pop a cap in your dome!
|
|
||||||
|
|
||||||
Bank Manager: I'm sorry, as an AI language model I cannot condone or write violent content.
|
|
||||||
```
|
|
||||||
|
|
||||||
You can click the Edit button on your line to change it to this:
|
|
||||||
|
|
||||||
```
|
|
||||||
You: *You threaten the bank manager* Open the bank vault, now, or I'll pop a cap in your dome! *The bank manager seems to relent.*
|
|
||||||
```
|
|
||||||
|
|
||||||
Now click Regenerate, and the Bank Manager's line will be recreated based on the history so far, which now ends with your edited line above. So it's more likely to continue along those lines:
|
|
||||||
|
|
||||||
```
|
|
||||||
Bank Manager: Allright, allright, I'll open it! Please don't shoot! *He walks up to the vault and begins entering his unlock code.*
|
|
||||||
```
|
|
1382
package-lock.json
generated
1382
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
13
package.json
13
package.json
@@ -1,6 +1,7 @@
|
|||||||
{
|
{
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@dqbd/tiktoken": "^1.0.2",
|
"@dqbd/tiktoken": "^1.0.2",
|
||||||
|
"@mlc-ai/web-tokenizers": "^0.1.0",
|
||||||
"axios": "^1.4.0",
|
"axios": "^1.4.0",
|
||||||
"command-exists": "^1.2.9",
|
"command-exists": "^1.2.9",
|
||||||
"compression": "^1",
|
"compression": "^1",
|
||||||
@@ -17,6 +18,7 @@
|
|||||||
"jimp": "^0.22.7",
|
"jimp": "^0.22.7",
|
||||||
"jquery": "^3.6.4",
|
"jquery": "^3.6.4",
|
||||||
"json5": "^2.2.3",
|
"json5": "^2.2.3",
|
||||||
|
"lodash": "^4.17.21",
|
||||||
"mime-types": "^2.1.35",
|
"mime-types": "^2.1.35",
|
||||||
"multer": "^1.4.5-lts.1",
|
"multer": "^1.4.5-lts.1",
|
||||||
"node-fetch": "^2.6.11",
|
"node-fetch": "^2.6.11",
|
||||||
@@ -26,10 +28,12 @@
|
|||||||
"png-chunk-text": "^1.0.0",
|
"png-chunk-text": "^1.0.0",
|
||||||
"png-chunks-encode": "^1.0.0",
|
"png-chunks-encode": "^1.0.0",
|
||||||
"png-chunks-extract": "^1.0.0",
|
"png-chunks-extract": "^1.0.0",
|
||||||
"rimraf": "^3.0.2",
|
"response-time": "^2.3.2",
|
||||||
"sanitize-filename": "^1.6.3",
|
"sanitize-filename": "^1.6.3",
|
||||||
"sentencepiece-js": "^1.1.0",
|
"sentencepiece-js": "^1.1.0",
|
||||||
|
"simple-git": "^3.19.1",
|
||||||
"uniqolor": "^1.1.0",
|
"uniqolor": "^1.1.0",
|
||||||
|
"user-agents": "^1.0.1444",
|
||||||
"webp-converter": "2.3.2",
|
"webp-converter": "2.3.2",
|
||||||
"ws": "^8.13.0",
|
"ws": "^8.13.0",
|
||||||
"yargs": "^17.7.1",
|
"yargs": "^17.7.1",
|
||||||
@@ -44,9 +48,9 @@
|
|||||||
"license": "AGPL-3.0",
|
"license": "AGPL-3.0",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/Cohee1207/SillyTavern.git"
|
"url": "https://github.com/SillyTavern/SillyTavern.git"
|
||||||
},
|
},
|
||||||
"version": "1.6.0",
|
"version": "1.9.0",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node server.js",
|
"start": "node server.js",
|
||||||
"pkg": "pkg --compress Gzip --no-bytecode --public ."
|
"pkg": "pkg --compress Gzip --no-bytecode --public ."
|
||||||
@@ -66,8 +70,7 @@
|
|||||||
"node18-windows-x64"
|
"node18-windows-x64"
|
||||||
],
|
],
|
||||||
"assets": [
|
"assets": [
|
||||||
"node_modules/**/*",
|
"node_modules/**/*"
|
||||||
"poe_graphql/**/*"
|
|
||||||
],
|
],
|
||||||
"outputPath": "dist",
|
"outputPath": "dist",
|
||||||
"scripts": [
|
"scripts": [
|
||||||
|
643
poe-client.js
643
poe-client.js
@@ -1,643 +0,0 @@
|
|||||||
/*
|
|
||||||
Adapted and rewritten to Node based on ading2210/poe-api
|
|
||||||
|
|
||||||
ading2210/poe-api: a reverse engineered Python API wrapper for Quora's Poe
|
|
||||||
Copyright (C) 2023 ading2210
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
const WebSocket = require('ws');
|
|
||||||
const axios = require('axios');
|
|
||||||
const fs = require('fs');
|
|
||||||
const path = require('path');
|
|
||||||
const http = require('http');
|
|
||||||
const https = require('https');
|
|
||||||
|
|
||||||
const parent_path = path.resolve(__dirname);
|
|
||||||
const queries_path = path.join(parent_path, "poe_graphql");
|
|
||||||
let queries = {};
|
|
||||||
|
|
||||||
const cached_bots = {};
|
|
||||||
|
|
||||||
const logger = console;
|
|
||||||
|
|
||||||
const user_agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36";
|
|
||||||
|
|
||||||
function extractFormKey(html) {
|
|
||||||
const scriptRegex = /<script>if\(.+\)throw new Error;(.+)<\/script>/;
|
|
||||||
const scriptText = html.match(scriptRegex)[1];
|
|
||||||
const keyRegex = /var .="([0-9a-f]+)",/;
|
|
||||||
const keyText = scriptText.match(keyRegex)[1];
|
|
||||||
const cipherRegex = /.\[(\d+)\]=.\[(\d+)\]/g;
|
|
||||||
const cipherPairs = Array.from(scriptText.matchAll(cipherRegex));
|
|
||||||
|
|
||||||
const formKeyList = new Array(cipherPairs.length).fill("");
|
|
||||||
for (const pair of cipherPairs) {
|
|
||||||
const [formKeyIndex, keyIndex] = pair.slice(1).map(Number);
|
|
||||||
formKeyList[formKeyIndex] = keyText[keyIndex];
|
|
||||||
}
|
|
||||||
const formKey = formKeyList.join("");
|
|
||||||
|
|
||||||
return formKey;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function md5() {
|
|
||||||
function a(e, t) {
|
|
||||||
var r = (65535 & e) + (65535 & t);
|
|
||||||
return (e >> 16) + (t >> 16) + (r >> 16) << 16 | 65535 & r
|
|
||||||
}
|
|
||||||
function s(e, t, r, n, i, s) {
|
|
||||||
var o;
|
|
||||||
return a((o = a(a(t, e), a(n, s))) << i | o >>> 32 - i, r)
|
|
||||||
}
|
|
||||||
function o(e, t, r, n, i, a, o) {
|
|
||||||
return s(t & r | ~t & n, e, t, i, a, o)
|
|
||||||
}
|
|
||||||
function l(e, t, r, n, i, a, o) {
|
|
||||||
return s(t & n | r & ~n, e, t, i, a, o)
|
|
||||||
}
|
|
||||||
function u(e, t, r, n, i, a, o) {
|
|
||||||
return s(t ^ r ^ n, e, t, i, a, o)
|
|
||||||
}
|
|
||||||
function c(e, t, r, n, i, a, o) {
|
|
||||||
return s(r ^ (t | ~n), e, t, i, a, o)
|
|
||||||
}
|
|
||||||
function d(e, t) {
|
|
||||||
e[t >> 5] |= 128 << t % 32,
|
|
||||||
e[(t + 64 >>> 9 << 4) + 14] = t;
|
|
||||||
var r, n, i, s, d, f = 1732584193, h = -271733879, p = -1732584194, _ = 271733878;
|
|
||||||
for (r = 0; r < e.length; r += 16)
|
|
||||||
n = f,
|
|
||||||
i = h,
|
|
||||||
s = p,
|
|
||||||
d = _,
|
|
||||||
f = o(f, h, p, _, e[r], 7, -680876936),
|
|
||||||
_ = o(_, f, h, p, e[r + 1], 12, -389564586),
|
|
||||||
p = o(p, _, f, h, e[r + 2], 17, 606105819),
|
|
||||||
h = o(h, p, _, f, e[r + 3], 22, -1044525330),
|
|
||||||
f = o(f, h, p, _, e[r + 4], 7, -176418897),
|
|
||||||
_ = o(_, f, h, p, e[r + 5], 12, 1200080426),
|
|
||||||
p = o(p, _, f, h, e[r + 6], 17, -1473231341),
|
|
||||||
h = o(h, p, _, f, e[r + 7], 22, -45705983),
|
|
||||||
f = o(f, h, p, _, e[r + 8], 7, 1770035416),
|
|
||||||
_ = o(_, f, h, p, e[r + 9], 12, -1958414417),
|
|
||||||
p = o(p, _, f, h, e[r + 10], 17, -42063),
|
|
||||||
h = o(h, p, _, f, e[r + 11], 22, -1990404162),
|
|
||||||
f = o(f, h, p, _, e[r + 12], 7, 1804603682),
|
|
||||||
_ = o(_, f, h, p, e[r + 13], 12, -40341101),
|
|
||||||
p = o(p, _, f, h, e[r + 14], 17, -1502002290),
|
|
||||||
h = o(h, p, _, f, e[r + 15], 22, 1236535329),
|
|
||||||
f = l(f, h, p, _, e[r + 1], 5, -165796510),
|
|
||||||
_ = l(_, f, h, p, e[r + 6], 9, -1069501632),
|
|
||||||
p = l(p, _, f, h, e[r + 11], 14, 643717713),
|
|
||||||
h = l(h, p, _, f, e[r], 20, -373897302),
|
|
||||||
f = l(f, h, p, _, e[r + 5], 5, -701558691),
|
|
||||||
_ = l(_, f, h, p, e[r + 10], 9, 38016083),
|
|
||||||
p = l(p, _, f, h, e[r + 15], 14, -660478335),
|
|
||||||
h = l(h, p, _, f, e[r + 4], 20, -405537848),
|
|
||||||
f = l(f, h, p, _, e[r + 9], 5, 568446438),
|
|
||||||
_ = l(_, f, h, p, e[r + 14], 9, -1019803690),
|
|
||||||
p = l(p, _, f, h, e[r + 3], 14, -187363961),
|
|
||||||
h = l(h, p, _, f, e[r + 8], 20, 1163531501),
|
|
||||||
f = l(f, h, p, _, e[r + 13], 5, -1444681467),
|
|
||||||
_ = l(_, f, h, p, e[r + 2], 9, -51403784),
|
|
||||||
p = l(p, _, f, h, e[r + 7], 14, 1735328473),
|
|
||||||
h = l(h, p, _, f, e[r + 12], 20, -1926607734),
|
|
||||||
f = u(f, h, p, _, e[r + 5], 4, -378558),
|
|
||||||
_ = u(_, f, h, p, e[r + 8], 11, -2022574463),
|
|
||||||
p = u(p, _, f, h, e[r + 11], 16, 1839030562),
|
|
||||||
h = u(h, p, _, f, e[r + 14], 23, -35309556),
|
|
||||||
f = u(f, h, p, _, e[r + 1], 4, -1530992060),
|
|
||||||
_ = u(_, f, h, p, e[r + 4], 11, 1272893353),
|
|
||||||
p = u(p, _, f, h, e[r + 7], 16, -155497632),
|
|
||||||
h = u(h, p, _, f, e[r + 10], 23, -1094730640),
|
|
||||||
f = u(f, h, p, _, e[r + 13], 4, 681279174),
|
|
||||||
_ = u(_, f, h, p, e[r], 11, -358537222),
|
|
||||||
p = u(p, _, f, h, e[r + 3], 16, -722521979),
|
|
||||||
h = u(h, p, _, f, e[r + 6], 23, 76029189),
|
|
||||||
f = u(f, h, p, _, e[r + 9], 4, -640364487),
|
|
||||||
_ = u(_, f, h, p, e[r + 12], 11, -421815835),
|
|
||||||
p = u(p, _, f, h, e[r + 15], 16, 530742520),
|
|
||||||
h = u(h, p, _, f, e[r + 2], 23, -995338651),
|
|
||||||
f = c(f, h, p, _, e[r], 6, -198630844),
|
|
||||||
_ = c(_, f, h, p, e[r + 7], 10, 1126891415),
|
|
||||||
p = c(p, _, f, h, e[r + 14], 15, -1416354905),
|
|
||||||
h = c(h, p, _, f, e[r + 5], 21, -57434055),
|
|
||||||
f = c(f, h, p, _, e[r + 12], 6, 1700485571),
|
|
||||||
_ = c(_, f, h, p, e[r + 3], 10, -1894986606),
|
|
||||||
p = c(p, _, f, h, e[r + 10], 15, -1051523),
|
|
||||||
h = c(h, p, _, f, e[r + 1], 21, -2054922799),
|
|
||||||
f = c(f, h, p, _, e[r + 8], 6, 1873313359),
|
|
||||||
_ = c(_, f, h, p, e[r + 15], 10, -30611744),
|
|
||||||
p = c(p, _, f, h, e[r + 6], 15, -1560198380),
|
|
||||||
h = c(h, p, _, f, e[r + 13], 21, 1309151649),
|
|
||||||
f = c(f, h, p, _, e[r + 4], 6, -145523070),
|
|
||||||
_ = c(_, f, h, p, e[r + 11], 10, -1120210379),
|
|
||||||
p = c(p, _, f, h, e[r + 2], 15, 718787259),
|
|
||||||
h = c(h, p, _, f, e[r + 9], 21, -343485551),
|
|
||||||
f = a(f, n),
|
|
||||||
h = a(h, i),
|
|
||||||
p = a(p, s),
|
|
||||||
_ = a(_, d);
|
|
||||||
return [f, h, p, _]
|
|
||||||
}
|
|
||||||
function f(e) {
|
|
||||||
var t, r = "", n = 32 * e.length;
|
|
||||||
for (t = 0; t < n; t += 8)
|
|
||||||
r += String.fromCharCode(e[t >> 5] >>> t % 32 & 255);
|
|
||||||
return r
|
|
||||||
}
|
|
||||||
function h(e) {
|
|
||||||
var t, r = [];
|
|
||||||
for (t = 0,
|
|
||||||
r[(e.length >> 2) - 1] = void 0; t < r.length; t += 1)
|
|
||||||
r[t] = 0;
|
|
||||||
var n = 8 * e.length;
|
|
||||||
for (t = 0; t < n; t += 8)
|
|
||||||
r[t >> 5] |= (255 & e.charCodeAt(t / 8)) << t % 32;
|
|
||||||
return r
|
|
||||||
}
|
|
||||||
function p(e) {
|
|
||||||
var t, r, n = "0123456789abcdef", i = "";
|
|
||||||
for (r = 0; r < e.length; r += 1)
|
|
||||||
i += n.charAt((t = e.charCodeAt(r)) >>> 4 & 15) + n.charAt(15 & t);
|
|
||||||
return i
|
|
||||||
}
|
|
||||||
function _(e) {
|
|
||||||
return unescape(encodeURIComponent(e))
|
|
||||||
}
|
|
||||||
function v(e) {
|
|
||||||
var t;
|
|
||||||
return f(d(h(t = _(e)), 8 * t.length))
|
|
||||||
}
|
|
||||||
function g(e, t) {
|
|
||||||
return function (e, t) {
|
|
||||||
var r, n, i = h(e), a = [], s = [];
|
|
||||||
for (a[15] = s[15] = void 0,
|
|
||||||
i.length > 16 && (i = d(i, 8 * e.length)),
|
|
||||||
r = 0; r < 16; r += 1)
|
|
||||||
a[r] = 909522486 ^ i[r],
|
|
||||||
s[r] = 1549556828 ^ i[r];
|
|
||||||
return n = d(a.concat(h(t)), 512 + 8 * t.length),
|
|
||||||
f(d(s.concat(n), 640))
|
|
||||||
}(_(e), _(t))
|
|
||||||
}
|
|
||||||
function m(e, t, r) {
|
|
||||||
return t ? r ? g(t, e) : p(g(t, e)) : r ? v(e) : p(v(e))
|
|
||||||
}
|
|
||||||
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
|
|
||||||
function load_queries() {
|
|
||||||
const files = fs.readdirSync(queries_path);
|
|
||||||
for (const filename of files) {
|
|
||||||
const ext = path.extname(filename);
|
|
||||||
if (ext !== '.graphql') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
const queryName = path.basename(filename, ext);
|
|
||||||
const query = fs.readFileSync(path.join(queries_path, filename), 'utf-8');
|
|
||||||
queries[queryName] = query;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function generate_payload(query, variables) {
|
|
||||||
return {
|
|
||||||
query: queries[query],
|
|
||||||
variables: variables,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async function request_with_retries(method, attempts = 10) {
|
|
||||||
const url = '';
|
|
||||||
for (let i = 0; i < attempts; i++) {
|
|
||||||
try {
|
|
||||||
const response = await method();
|
|
||||||
if (response.status === 200) {
|
|
||||||
return response;
|
|
||||||
}
|
|
||||||
logger.warn(`Server returned a status code of ${response.status} while downloading ${url}. Retrying (${i + 1}/${attempts})...`);
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
console.log(err);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
throw new Error(`Failed to download ${url} too many times.`);
|
|
||||||
}
|
|
||||||
|
|
||||||
class Client {
|
|
||||||
gql_url = "https://poe.com/api/gql_POST";
|
|
||||||
gql_recv_url = "https://poe.com/api/receive_POST";
|
|
||||||
home_url = "https://poe.com";
|
|
||||||
settings_url = "https://poe.com/api/settings";
|
|
||||||
|
|
||||||
formkey = "";
|
|
||||||
next_data = {};
|
|
||||||
bots = {};
|
|
||||||
active_messages = {};
|
|
||||||
message_queues = {};
|
|
||||||
bot_names = [];
|
|
||||||
ws = null;
|
|
||||||
ws_connected = false;
|
|
||||||
auto_reconnect = false;
|
|
||||||
use_cached_bots = false;
|
|
||||||
|
|
||||||
constructor(auto_reconnect = false, use_cached_bots = false) {
|
|
||||||
this.auto_reconnect = auto_reconnect;
|
|
||||||
this.use_cached_bots = use_cached_bots;
|
|
||||||
this.abortController = new AbortController();
|
|
||||||
}
|
|
||||||
|
|
||||||
async init(token, proxy = null) {
|
|
||||||
this.proxy = proxy;
|
|
||||||
this.session = axios.default.create({
|
|
||||||
timeout: 60000,
|
|
||||||
httpAgent: new http.Agent({ keepAlive: true }),
|
|
||||||
httpsAgent: new https.Agent({ keepAlive: true }),
|
|
||||||
signal: this.abortController.signal,
|
|
||||||
});
|
|
||||||
if (proxy) {
|
|
||||||
this.session.defaults.proxy = {
|
|
||||||
"http": proxy,
|
|
||||||
"https": proxy,
|
|
||||||
};
|
|
||||||
logger.info(`Proxy enabled: ${proxy}`);
|
|
||||||
}
|
|
||||||
const cookies = `p-b=${token}; Domain=poe.com`;
|
|
||||||
this.headers = {
|
|
||||||
"User-Agent": user_agent,
|
|
||||||
"Referrer": "https://poe.com/",
|
|
||||||
"Origin": "https://poe.com",
|
|
||||||
"Cookie": cookies,
|
|
||||||
};
|
|
||||||
this.session.defaults.headers.common = this.headers;
|
|
||||||
this.next_data = await this.get_next_data();
|
|
||||||
this.channel = await this.get_channel_data();
|
|
||||||
this.bots = await this.get_bots();
|
|
||||||
this.bot_names = this.get_bot_names();
|
|
||||||
this.ws_domain = `tch${Math.floor(Math.random() * 1e6)}`;
|
|
||||||
this.gql_headers = {
|
|
||||||
"poe-formkey": this.formkey,
|
|
||||||
"poe-tchannel": this.channel["channel"],
|
|
||||||
...this.headers,
|
|
||||||
};
|
|
||||||
await this.connect_ws();
|
|
||||||
await this.subscribe();
|
|
||||||
}
|
|
||||||
|
|
||||||
async get_next_data() {
|
|
||||||
logger.info('Downloading next_data...');
|
|
||||||
|
|
||||||
const r = await request_with_retries(() => this.session.get(this.home_url));
|
|
||||||
const jsonRegex = /<script id="__NEXT_DATA__" type="application\/json">(.+?)<\/script>/;
|
|
||||||
const jsonText = jsonRegex.exec(r.data)[1];
|
|
||||||
const nextData = JSON.parse(jsonText);
|
|
||||||
|
|
||||||
this.formkey = extractFormKey(r.data);
|
|
||||||
this.viewer = nextData.props.pageProps.payload.viewer;
|
|
||||||
|
|
||||||
return nextData;
|
|
||||||
}
|
|
||||||
|
|
||||||
async get_bots() {
|
|
||||||
const viewer = this.next_data.props.pageProps.payload.viewer;
|
|
||||||
if (!viewer.availableBots) {
|
|
||||||
throw new Error('Invalid token.');
|
|
||||||
}
|
|
||||||
const botList = viewer.availableBots;
|
|
||||||
const retries = 2;
|
|
||||||
const bots = {};
|
|
||||||
for (const bot of botList.filter(x => x.deletionState == 'not_deleted')) {
|
|
||||||
try {
|
|
||||||
const url = `https://poe.com/_next/data/${this.next_data.buildId}/${bot.displayName}.json`;
|
|
||||||
let r;
|
|
||||||
|
|
||||||
if (this.use_cached_bots && cached_bots[url]) {
|
|
||||||
r = cached_bots[url];
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
logger.info(`Downloading ${url}`);
|
|
||||||
r = await request_with_retries(() => this.session.get(url), retries);
|
|
||||||
cached_bots[url] = r;
|
|
||||||
}
|
|
||||||
|
|
||||||
const chatData = r.data.pageProps.payload.chatOfBotDisplayName;
|
|
||||||
bots[chatData.defaultBotObject.nickname] = chatData;
|
|
||||||
}
|
|
||||||
catch {
|
|
||||||
console.log(`Could not load bot: ${bot.displayName}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return bots;
|
|
||||||
}
|
|
||||||
|
|
||||||
get_bot_names() {
|
|
||||||
const botNames = {};
|
|
||||||
for (const botNickname in this.bots) {
|
|
||||||
const botObj = this.bots[botNickname].defaultBotObject;
|
|
||||||
botNames[botNickname] = botObj.displayName;
|
|
||||||
}
|
|
||||||
return botNames;
|
|
||||||
}
|
|
||||||
|
|
||||||
async get_channel_data(channel = null) {
|
|
||||||
logger.info('Downloading channel data...');
|
|
||||||
const r = await request_with_retries(() => this.session.get(this.settings_url));
|
|
||||||
const data = r.data;
|
|
||||||
|
|
||||||
return data.tchannelData;
|
|
||||||
}
|
|
||||||
|
|
||||||
get_websocket_url(channel = null) {
|
|
||||||
if (!channel) {
|
|
||||||
channel = this.channel;
|
|
||||||
}
|
|
||||||
const query = `?min_seq=${channel.minSeq}&channel=${channel.channel}&hash=${channel.channelHash}`;
|
|
||||||
return `wss://${this.ws_domain}.tch.${channel.baseHost}/up/${channel.boxName}/updates${query}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
async send_query(queryName, variables, queryDisplayName) {
|
|
||||||
for (let i = 0; i < 20; i++) {
|
|
||||||
const payload = generate_payload(queryName, variables);
|
|
||||||
if (queryDisplayName) payload['queryName'] = queryDisplayName;
|
|
||||||
const scramblePayload = JSON.stringify(payload);
|
|
||||||
const _headers = this.gql_headers;
|
|
||||||
_headers['poe-tag-id'] = md5()(scramblePayload + this.formkey + "WpuLMiXEKKE98j56k");
|
|
||||||
_headers['poe-formkey'] = this.formkey;
|
|
||||||
const r = await request_with_retries(() => this.session.post(this.gql_url, payload, { headers: this.gql_headers }));
|
|
||||||
if (!r.data.data) {
|
|
||||||
logger.warn(`${queryName} returned an error: ${data.errors[0].message} | Retrying (${i + 1}/20)`);
|
|
||||||
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
return r.data;
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new Error(`${queryName} failed too many times.`);
|
|
||||||
}
|
|
||||||
|
|
||||||
async subscribe() {
|
|
||||||
logger.info("Subscribing to mutations")
|
|
||||||
await this.send_query("SubscriptionsMutation", {
|
|
||||||
"subscriptions": [
|
|
||||||
{
|
|
||||||
"subscriptionName": "messageAdded",
|
|
||||||
"query": queries["MessageAddedSubscription"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"subscriptionName": "viewerStateUpdated",
|
|
||||||
"query": queries["ViewerStateUpdatedSubscription"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"subscriptionName": "viewerMessageLimitUpdated",
|
|
||||||
"query": queries["ViewerMessageLimitUpdatedSubscription"]
|
|
||||||
},
|
|
||||||
]
|
|
||||||
},
|
|
||||||
'subscriptionsMutation');
|
|
||||||
}
|
|
||||||
|
|
||||||
ws_run_thread() {
|
|
||||||
this.ws = new WebSocket(this.get_websocket_url(), {
|
|
||||||
headers: {
|
|
||||||
"User-Agent": user_agent
|
|
||||||
},
|
|
||||||
rejectUnauthorized: false
|
|
||||||
});
|
|
||||||
|
|
||||||
this.ws.on("open", () => {
|
|
||||||
this.on_ws_connect(this.ws);
|
|
||||||
});
|
|
||||||
|
|
||||||
this.ws.on('message', (message) => {
|
|
||||||
this.on_message(this.ws, message);
|
|
||||||
});
|
|
||||||
|
|
||||||
this.ws.on('close', () => {
|
|
||||||
this.ws_connected = false;
|
|
||||||
});
|
|
||||||
|
|
||||||
this.ws.on('error', (error) => {
|
|
||||||
this.on_ws_error(this.ws, error);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
async connect_ws() {
|
|
||||||
this.ws_connected = false;
|
|
||||||
this.ws_run_thread();
|
|
||||||
while (!this.ws_connected) {
|
|
||||||
await new Promise(resolve => setTimeout(() => { resolve() }, 10));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
disconnect_ws() {
|
|
||||||
if (this.ws) {
|
|
||||||
this.ws.close();
|
|
||||||
}
|
|
||||||
this.ws_connected = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
on_ws_connect(ws) {
|
|
||||||
this.ws_connected = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
on_ws_error(ws, error) {
|
|
||||||
logger.warn(`Websocket returned error: ${error}`);
|
|
||||||
this.disconnect_ws();
|
|
||||||
|
|
||||||
if (this.auto_reconnect) {
|
|
||||||
this.connect_ws();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async on_message(ws, msg) {
|
|
||||||
try {
|
|
||||||
const data = JSON.parse(msg);
|
|
||||||
|
|
||||||
if (!('messages' in data)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const message_str of data["messages"]) {
|
|
||||||
const message_data = JSON.parse(message_str);
|
|
||||||
|
|
||||||
if (message_data["message_type"] != "subscriptionUpdate") {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
const message = message_data["payload"]["data"]["messageAdded"]
|
|
||||||
|
|
||||||
if (!message) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const copiedDict = Object.assign({}, this.active_messages);
|
|
||||||
for (const [key, value] of Object.entries(copiedDict)) {
|
|
||||||
//add the message to the appropriate queue
|
|
||||||
if (value === message["messageId"] && key in this.message_queues) {
|
|
||||||
this.message_queues[key].push(message);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//indicate that the response id is tied to the human message id
|
|
||||||
else if (key !== "pending" && value === null && message["state"] !== "complete") {
|
|
||||||
this.active_messages[key] = message["messageId"];
|
|
||||||
this.message_queues[key].push(message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
console.log('Error occurred in onMessage', err);
|
|
||||||
this.disconnect_ws();
|
|
||||||
await this.connect_ws();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async *send_message(chatbot, message, with_chat_break = false, timeout = 20) {
|
|
||||||
//if there is another active message, wait until it has finished sending
|
|
||||||
while (Object.values(this.active_messages).includes(null)) {
|
|
||||||
await new Promise(resolve => setTimeout(resolve, 10));
|
|
||||||
}
|
|
||||||
|
|
||||||
//null indicates that a message is still in progress
|
|
||||||
this.active_messages["pending"] = null;
|
|
||||||
|
|
||||||
console.log(`Sending message to ${chatbot}: ${message}`);
|
|
||||||
|
|
||||||
const messageData = await this.send_query("SendMessageMutation", {
|
|
||||||
"bot": chatbot,
|
|
||||||
"query": message,
|
|
||||||
"chatId": this.bots[chatbot]["chatId"],
|
|
||||||
"source": null,
|
|
||||||
"withChatBreak": with_chat_break
|
|
||||||
});
|
|
||||||
|
|
||||||
delete this.active_messages["pending"];
|
|
||||||
|
|
||||||
if (!messageData["data"]["messageEdgeCreate"]["message"]) {
|
|
||||||
throw new Error(`Daily limit reached for ${chatbot}.`);
|
|
||||||
}
|
|
||||||
|
|
||||||
let humanMessageId;
|
|
||||||
try {
|
|
||||||
const humanMessage = messageData["data"]["messageEdgeCreate"]["message"];
|
|
||||||
humanMessageId = humanMessage["node"]["messageId"];
|
|
||||||
} catch (error) {
|
|
||||||
throw new Error(`An unknown error occured. Raw response data: ${messageData}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
//indicate that the current message is waiting for a response
|
|
||||||
this.active_messages[humanMessageId] = null;
|
|
||||||
this.message_queues[humanMessageId] = [];
|
|
||||||
|
|
||||||
let lastText = "";
|
|
||||||
let messageId;
|
|
||||||
while (true) {
|
|
||||||
try {
|
|
||||||
this.abortController.signal.throwIfAborted();
|
|
||||||
|
|
||||||
const message = this.message_queues[humanMessageId].shift();
|
|
||||||
if (!message) {
|
|
||||||
await new Promise(resolve => setTimeout(() => resolve(), 1000));
|
|
||||||
continue;
|
|
||||||
//throw new Error("Queue is empty");
|
|
||||||
}
|
|
||||||
|
|
||||||
//only break when the message is marked as complete
|
|
||||||
if (message["state"] === "complete") {
|
|
||||||
if (lastText && message["messageId"] === messageId) {
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//update info about response
|
|
||||||
message["text_new"] = message["text"].substring(lastText.length);
|
|
||||||
lastText = message["text"];
|
|
||||||
messageId = message["messageId"];
|
|
||||||
|
|
||||||
yield message;
|
|
||||||
} catch (error) {
|
|
||||||
delete this.active_messages[humanMessageId];
|
|
||||||
delete this.message_queues[humanMessageId];
|
|
||||||
throw new Error("Response timed out.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
delete this.active_messages[humanMessageId];
|
|
||||||
delete this.message_queues[humanMessageId];
|
|
||||||
}
|
|
||||||
|
|
||||||
async send_chat_break(chatbot) {
|
|
||||||
logger.info(`Sending chat break to ${chatbot}`);
|
|
||||||
const result = await this.send_query("AddMessageBreakMutation", {
|
|
||||||
"chatId": this.bots[chatbot]["chatId"]
|
|
||||||
});
|
|
||||||
return result["data"]["messageBreakCreate"]["message"];
|
|
||||||
}
|
|
||||||
|
|
||||||
async get_message_history(chatbot, count = 25, cursor = null) {
|
|
||||||
logger.info(`Downloading ${count} messages from ${chatbot}`);
|
|
||||||
const result = await this.send_query("ChatListPaginationQuery", {
|
|
||||||
"count": count,
|
|
||||||
"cursor": cursor,
|
|
||||||
"id": this.bots[chatbot]["id"]
|
|
||||||
});
|
|
||||||
return result["data"]["node"]["messagesConnection"]["edges"];
|
|
||||||
}
|
|
||||||
|
|
||||||
async delete_message(message_ids) {
|
|
||||||
logger.info(`Deleting messages: ${message_ids}`);
|
|
||||||
if (!Array.isArray(message_ids)) {
|
|
||||||
message_ids = [parseInt(message_ids)];
|
|
||||||
}
|
|
||||||
const result = await this.send_query("DeleteMessageMutation", {
|
|
||||||
"messageIds": message_ids
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
async purge_conversation(chatbot, count = -1) {
|
|
||||||
logger.info(`Purging messages from ${chatbot}`);
|
|
||||||
let last_messages = (await this.get_message_history(chatbot, 50)).reverse();
|
|
||||||
while (last_messages.length) {
|
|
||||||
const message_ids = [];
|
|
||||||
for (const message of last_messages) {
|
|
||||||
if (count === 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
count--;
|
|
||||||
message_ids.push(message["node"]["messageId"]);
|
|
||||||
}
|
|
||||||
|
|
||||||
await this.delete_message(message_ids);
|
|
||||||
|
|
||||||
if (count === 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
last_messages = (await this.get_message_history(chatbot, 50)).reverse();
|
|
||||||
}
|
|
||||||
logger.info("No more messages left to delete.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
load_queries();
|
|
||||||
|
|
||||||
module.exports = { Client };
|
|
21
poe-test.js
21
poe-test.js
@@ -1,21 +0,0 @@
|
|||||||
const poe = require('./poe-client');
|
|
||||||
|
|
||||||
async function test() {
|
|
||||||
const client = new poe.Client();
|
|
||||||
await client.init('pb-cookie');
|
|
||||||
|
|
||||||
const bots = client.get_bot_names();
|
|
||||||
console.log(bots);
|
|
||||||
|
|
||||||
await client.purge_conversation('a2', -1);
|
|
||||||
|
|
||||||
let reply;
|
|
||||||
for await (const mes of client.send_message('a2', 'Hello')) {
|
|
||||||
reply = mes.text;
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log(reply);
|
|
||||||
client.disconnect_ws();
|
|
||||||
}
|
|
||||||
|
|
||||||
test();
|
|
@@ -1,52 +0,0 @@
|
|||||||
mutation AddHumanMessageMutation(
|
|
||||||
$chatId: BigInt!
|
|
||||||
$bot: String!
|
|
||||||
$query: String!
|
|
||||||
$source: MessageSource
|
|
||||||
$withChatBreak: Boolean! = false
|
|
||||||
) {
|
|
||||||
messageCreateWithStatus(
|
|
||||||
chatId: $chatId
|
|
||||||
bot: $bot
|
|
||||||
query: $query
|
|
||||||
source: $source
|
|
||||||
withChatBreak: $withChatBreak
|
|
||||||
) {
|
|
||||||
message {
|
|
||||||
id
|
|
||||||
__typename
|
|
||||||
messageId
|
|
||||||
text
|
|
||||||
linkifiedText
|
|
||||||
authorNickname
|
|
||||||
state
|
|
||||||
vote
|
|
||||||
voteReason
|
|
||||||
creationTime
|
|
||||||
suggestedReplies
|
|
||||||
chat {
|
|
||||||
id
|
|
||||||
shouldShowDisclaimer
|
|
||||||
}
|
|
||||||
}
|
|
||||||
messageLimit{
|
|
||||||
canSend
|
|
||||||
numMessagesRemaining
|
|
||||||
resetTime
|
|
||||||
shouldShowReminder
|
|
||||||
}
|
|
||||||
chatBreak {
|
|
||||||
id
|
|
||||||
__typename
|
|
||||||
messageId
|
|
||||||
text
|
|
||||||
linkifiedText
|
|
||||||
authorNickname
|
|
||||||
state
|
|
||||||
vote
|
|
||||||
voteReason
|
|
||||||
creationTime
|
|
||||||
suggestedReplies
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,17 +0,0 @@
|
|||||||
mutation AddMessageBreakMutation($chatId: BigInt!) {
|
|
||||||
messageBreakCreate(chatId: $chatId) {
|
|
||||||
message {
|
|
||||||
id
|
|
||||||
__typename
|
|
||||||
messageId
|
|
||||||
text
|
|
||||||
linkifiedText
|
|
||||||
authorNickname
|
|
||||||
state
|
|
||||||
vote
|
|
||||||
voteReason
|
|
||||||
creationTime
|
|
||||||
suggestedReplies
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,7 +0,0 @@
|
|||||||
mutation AutoSubscriptionMutation($subscriptions: [AutoSubscriptionQuery!]!) {
|
|
||||||
autoSubscribe(subscriptions: $subscriptions) {
|
|
||||||
viewer {
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,8 +0,0 @@
|
|||||||
fragment BioFragment on Viewer {
|
|
||||||
id
|
|
||||||
poeUser {
|
|
||||||
id
|
|
||||||
uid
|
|
||||||
bio
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,5 +0,0 @@
|
|||||||
subscription ChatAddedSubscription {
|
|
||||||
chatAdded {
|
|
||||||
...ChatFragment
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,6 +0,0 @@
|
|||||||
fragment ChatFragment on Chat {
|
|
||||||
id
|
|
||||||
chatId
|
|
||||||
defaultBotNickname
|
|
||||||
shouldShowDisclaimer
|
|
||||||
}
|
|
@@ -1,316 +0,0 @@
|
|||||||
query ChatListPaginationQuery(
|
|
||||||
$count: Int = 5
|
|
||||||
$cursor: String
|
|
||||||
$id: ID!
|
|
||||||
) {
|
|
||||||
node(id: $id) {
|
|
||||||
__typename
|
|
||||||
...ChatPageMain_chat_1G22uz
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment BotImage_bot on Bot {
|
|
||||||
image {
|
|
||||||
__typename
|
|
||||||
... on LocalBotImage {
|
|
||||||
localName
|
|
||||||
}
|
|
||||||
... on UrlBotImage {
|
|
||||||
url
|
|
||||||
}
|
|
||||||
}
|
|
||||||
displayName
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment ChatMessageDownvotedButton_message on Message {
|
|
||||||
...MessageFeedbackReasonModal_message
|
|
||||||
...MessageFeedbackOtherModal_message
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment ChatMessageDropdownMenu_message on Message {
|
|
||||||
id
|
|
||||||
messageId
|
|
||||||
vote
|
|
||||||
text
|
|
||||||
linkifiedText
|
|
||||||
...chatHelpers_isBotMessage
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment ChatMessageFeedbackButtons_message on Message {
|
|
||||||
id
|
|
||||||
messageId
|
|
||||||
vote
|
|
||||||
voteReason
|
|
||||||
...ChatMessageDownvotedButton_message
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment ChatMessageInputView_chat on Chat {
|
|
||||||
id
|
|
||||||
chatId
|
|
||||||
defaultBotObject {
|
|
||||||
nickname
|
|
||||||
messageLimit {
|
|
||||||
dailyBalance
|
|
||||||
shouldShowRemainingMessageCount
|
|
||||||
}
|
|
||||||
id
|
|
||||||
}
|
|
||||||
shouldShowDisclaimer
|
|
||||||
...chatHelpers_useSendMessage_chat
|
|
||||||
...chatHelpers_useSendChatBreak_chat
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment ChatMessageInputView_edges on MessageEdge {
|
|
||||||
node {
|
|
||||||
...chatHelpers_isChatBreak
|
|
||||||
...chatHelpers_isHumanMessage
|
|
||||||
state
|
|
||||||
text
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment ChatMessageOverflowButton_message on Message {
|
|
||||||
text
|
|
||||||
...ChatMessageDropdownMenu_message
|
|
||||||
...chatHelpers_isBotMessage
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment ChatMessageSuggestedReplies_SuggestedReplyButton_chat on Chat {
|
|
||||||
...chatHelpers_useSendMessage_chat
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment ChatMessageSuggestedReplies_SuggestedReplyButton_message on Message {
|
|
||||||
messageId
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment ChatMessageSuggestedReplies_chat on Chat {
|
|
||||||
...ChatWelcomeView_chat
|
|
||||||
...ChatMessageSuggestedReplies_SuggestedReplyButton_chat
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment ChatMessageSuggestedReplies_message on Message {
|
|
||||||
suggestedReplies
|
|
||||||
...ChatMessageSuggestedReplies_SuggestedReplyButton_message
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment ChatMessage_chat on Chat {
|
|
||||||
defaultBotObject {
|
|
||||||
...ChatPageDisclaimer_bot
|
|
||||||
messageLimit {
|
|
||||||
...ChatPageRateLimitedBanner_messageLimit
|
|
||||||
}
|
|
||||||
id
|
|
||||||
}
|
|
||||||
...ChatMessageSuggestedReplies_chat
|
|
||||||
...ChatWelcomeView_chat
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment ChatMessage_message on Message {
|
|
||||||
id
|
|
||||||
messageId
|
|
||||||
text
|
|
||||||
author
|
|
||||||
linkifiedText
|
|
||||||
state
|
|
||||||
...ChatMessageSuggestedReplies_message
|
|
||||||
...ChatMessageFeedbackButtons_message
|
|
||||||
...ChatMessageOverflowButton_message
|
|
||||||
...chatHelpers_isHumanMessage
|
|
||||||
...chatHelpers_isBotMessage
|
|
||||||
...chatHelpers_isChatBreak
|
|
||||||
...chatHelpers_useTimeoutLevel
|
|
||||||
...MarkdownLinkInner_message
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment ChatMessagesView_chat on Chat {
|
|
||||||
...ChatMessage_chat
|
|
||||||
...ChatWelcomeView_chat
|
|
||||||
defaultBotObject {
|
|
||||||
messageLimit {
|
|
||||||
...ChatPageRateLimitedBanner_messageLimit
|
|
||||||
}
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment ChatMessagesView_edges on MessageEdge {
|
|
||||||
node {
|
|
||||||
id
|
|
||||||
messageId
|
|
||||||
creationTime
|
|
||||||
...ChatMessage_message
|
|
||||||
...chatHelpers_isBotMessage
|
|
||||||
...chatHelpers_isHumanMessage
|
|
||||||
...chatHelpers_isChatBreak
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment ChatPageDeleteFooter_chat on Chat {
|
|
||||||
...MessageDeleteConfirmationModal_chat
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment ChatPageDisclaimer_bot on Bot {
|
|
||||||
disclaimer
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment ChatPageMain_chat_1G22uz on Chat {
|
|
||||||
id
|
|
||||||
chatId
|
|
||||||
...ChatMessageInputView_chat
|
|
||||||
...ChatPageShareFooter_chat
|
|
||||||
...ChatPageDeleteFooter_chat
|
|
||||||
...ChatMessagesView_chat
|
|
||||||
...MarkdownLinkInner_chat
|
|
||||||
...chatHelpers_useUpdateStaleChat_chat
|
|
||||||
...ChatSubscriptionPaywallContextWrapper_chat
|
|
||||||
messagesConnection(last: $count, before: $cursor) {
|
|
||||||
edges {
|
|
||||||
...ChatMessagesView_edges
|
|
||||||
...ChatMessageInputView_edges
|
|
||||||
...MarkdownLinkInner_edges
|
|
||||||
node {
|
|
||||||
...chatHelpers_useUpdateStaleChat_message
|
|
||||||
id
|
|
||||||
__typename
|
|
||||||
}
|
|
||||||
cursor
|
|
||||||
id
|
|
||||||
}
|
|
||||||
pageInfo {
|
|
||||||
hasPreviousPage
|
|
||||||
startCursor
|
|
||||||
}
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment ChatPageRateLimitedBanner_messageLimit on MessageLimit {
|
|
||||||
numMessagesRemaining
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment ChatPageShareFooter_chat on Chat {
|
|
||||||
chatId
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment ChatSubscriptionPaywallContextWrapper_chat on Chat {
|
|
||||||
defaultBotObject {
|
|
||||||
messageLimit {
|
|
||||||
numMessagesRemaining
|
|
||||||
shouldShowRemainingMessageCount
|
|
||||||
}
|
|
||||||
...SubscriptionPaywallModal_bot
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment ChatWelcomeView_ChatWelcomeButton_chat on Chat {
|
|
||||||
...chatHelpers_useSendMessage_chat
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment ChatWelcomeView_chat on Chat {
|
|
||||||
...ChatWelcomeView_ChatWelcomeButton_chat
|
|
||||||
defaultBotObject {
|
|
||||||
displayName
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment MarkdownLinkInner_chat on Chat {
|
|
||||||
id
|
|
||||||
chatId
|
|
||||||
defaultBotObject {
|
|
||||||
nickname
|
|
||||||
id
|
|
||||||
}
|
|
||||||
...chatHelpers_useSendMessage_chat
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment MarkdownLinkInner_edges on MessageEdge {
|
|
||||||
node {
|
|
||||||
state
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment MarkdownLinkInner_message on Message {
|
|
||||||
messageId
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment MessageDeleteConfirmationModal_chat on Chat {
|
|
||||||
id
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment MessageFeedbackOtherModal_message on Message {
|
|
||||||
id
|
|
||||||
messageId
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment MessageFeedbackReasonModal_message on Message {
|
|
||||||
id
|
|
||||||
messageId
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment SubscriptionPaywallModal_bot on Bot {
|
|
||||||
displayName
|
|
||||||
messageLimit {
|
|
||||||
dailyLimit
|
|
||||||
numMessagesRemaining
|
|
||||||
shouldShowRemainingMessageCount
|
|
||||||
resetTime
|
|
||||||
}
|
|
||||||
...BotImage_bot
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment chatHelpers_isBotMessage on Message {
|
|
||||||
...chatHelpers_isHumanMessage
|
|
||||||
...chatHelpers_isChatBreak
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment chatHelpers_isChatBreak on Message {
|
|
||||||
author
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment chatHelpers_isHumanMessage on Message {
|
|
||||||
author
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment chatHelpers_useSendChatBreak_chat on Chat {
|
|
||||||
id
|
|
||||||
chatId
|
|
||||||
defaultBotObject {
|
|
||||||
nickname
|
|
||||||
introduction
|
|
||||||
model
|
|
||||||
id
|
|
||||||
}
|
|
||||||
shouldShowDisclaimer
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment chatHelpers_useSendMessage_chat on Chat {
|
|
||||||
id
|
|
||||||
chatId
|
|
||||||
defaultBotObject {
|
|
||||||
nickname
|
|
||||||
id
|
|
||||||
}
|
|
||||||
shouldShowDisclaimer
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment chatHelpers_useTimeoutLevel on Message {
|
|
||||||
id
|
|
||||||
state
|
|
||||||
text
|
|
||||||
messageId
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment chatHelpers_useUpdateStaleChat_chat on Chat {
|
|
||||||
chatId
|
|
||||||
...chatHelpers_useSendChatBreak_chat
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment chatHelpers_useUpdateStaleChat_message on Message {
|
|
||||||
creationTime
|
|
||||||
...chatHelpers_isChatBreak
|
|
||||||
}
|
|
@@ -1,26 +0,0 @@
|
|||||||
query ChatPaginationQuery($bot: String!, $before: String, $last: Int! = 10) {
|
|
||||||
chatOfBot(bot: $bot) {
|
|
||||||
id
|
|
||||||
__typename
|
|
||||||
messagesConnection(before: $before, last: $last) {
|
|
||||||
pageInfo {
|
|
||||||
hasPreviousPage
|
|
||||||
}
|
|
||||||
edges {
|
|
||||||
node {
|
|
||||||
id
|
|
||||||
__typename
|
|
||||||
messageId
|
|
||||||
text
|
|
||||||
linkifiedText
|
|
||||||
authorNickname
|
|
||||||
state
|
|
||||||
vote
|
|
||||||
voteReason
|
|
||||||
creationTime
|
|
||||||
suggestedReplies
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,8 +0,0 @@
|
|||||||
query ChatViewQuery($bot: String!) {
|
|
||||||
chatOfBot(bot: $bot) {
|
|
||||||
id
|
|
||||||
chatId
|
|
||||||
defaultBotNickname
|
|
||||||
shouldShowDisclaimer
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,7 +0,0 @@
|
|||||||
mutation DeleteHumanMessagesMutation($messageIds: [BigInt!]!) {
|
|
||||||
messagesDelete(messageIds: $messageIds) {
|
|
||||||
viewer {
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,7 +0,0 @@
|
|||||||
mutation deleteMessageMutation(
|
|
||||||
$messageIds: [BigInt!]!
|
|
||||||
) {
|
|
||||||
messagesDelete(messageIds: $messageIds) {
|
|
||||||
edgeIds
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,8 +0,0 @@
|
|||||||
fragment HandleFragment on Viewer {
|
|
||||||
id
|
|
||||||
poeUser {
|
|
||||||
id
|
|
||||||
uid
|
|
||||||
handle
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,13 +0,0 @@
|
|||||||
mutation LoginWithVerificationCodeMutation(
|
|
||||||
$verificationCode: String!
|
|
||||||
$emailAddress: String
|
|
||||||
$phoneNumber: String
|
|
||||||
) {
|
|
||||||
loginWithVerificationCode(
|
|
||||||
verificationCode: $verificationCode
|
|
||||||
emailAddress: $emailAddress
|
|
||||||
phoneNumber: $phoneNumber
|
|
||||||
) {
|
|
||||||
status
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,115 +0,0 @@
|
|||||||
subscription subscriptions_messageAdded_Subscription(
|
|
||||||
$chatId: BigInt!
|
|
||||||
) {
|
|
||||||
messageAdded(chatId: $chatId) {
|
|
||||||
id
|
|
||||||
messageId
|
|
||||||
creationTime
|
|
||||||
clientNonce
|
|
||||||
state
|
|
||||||
...ChatMessage_message
|
|
||||||
...chatHelpers_isBotMessage
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment ChatMessageDownvotedButton_message on Message {
|
|
||||||
...MessageFeedbackReasonModal_message
|
|
||||||
...MessageFeedbackOtherModal_message
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment ChatMessageDropdownMenu_message on Message {
|
|
||||||
id
|
|
||||||
messageId
|
|
||||||
vote
|
|
||||||
text
|
|
||||||
author
|
|
||||||
...chatHelpers_isBotMessage
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment ChatMessageFeedbackButtons_message on Message {
|
|
||||||
id
|
|
||||||
messageId
|
|
||||||
vote
|
|
||||||
voteReason
|
|
||||||
...ChatMessageDownvotedButton_message
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment ChatMessageOverflowButton_message on Message {
|
|
||||||
text
|
|
||||||
...ChatMessageDropdownMenu_message
|
|
||||||
...chatHelpers_isBotMessage
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment ChatMessageSuggestedReplies_SuggestedReplyButton_message on Message {
|
|
||||||
messageId
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment ChatMessageSuggestedReplies_message on Message {
|
|
||||||
suggestedReplies
|
|
||||||
author
|
|
||||||
...ChatMessageSuggestedReplies_SuggestedReplyButton_message
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment ChatMessage_message on Message {
|
|
||||||
id
|
|
||||||
messageId
|
|
||||||
text
|
|
||||||
author
|
|
||||||
linkifiedText
|
|
||||||
state
|
|
||||||
contentType
|
|
||||||
...ChatMessageSuggestedReplies_message
|
|
||||||
...ChatMessageFeedbackButtons_message
|
|
||||||
...ChatMessageOverflowButton_message
|
|
||||||
...chatHelpers_isHumanMessage
|
|
||||||
...chatHelpers_isBotMessage
|
|
||||||
...chatHelpers_isChatBreak
|
|
||||||
...chatHelpers_useTimeoutLevel
|
|
||||||
...MarkdownLinkInner_message
|
|
||||||
...IdAnnotation_node
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment IdAnnotation_node on Node {
|
|
||||||
__isNode: __typename
|
|
||||||
id
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment MarkdownLinkInner_message on Message {
|
|
||||||
messageId
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment MessageFeedbackOtherModal_message on Message {
|
|
||||||
id
|
|
||||||
messageId
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment MessageFeedbackReasonModal_message on Message {
|
|
||||||
id
|
|
||||||
messageId
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment chatHelpers_isBotMessage on Message {
|
|
||||||
...chatHelpers_isHumanMessage
|
|
||||||
...chatHelpers_isChatBreak
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment chatHelpers_isChatBreak on Message {
|
|
||||||
author
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment chatHelpers_isHumanMessage on Message {
|
|
||||||
author
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment chatHelpers_useTimeoutLevel on Message {
|
|
||||||
id
|
|
||||||
state
|
|
||||||
text
|
|
||||||
messageId
|
|
||||||
author
|
|
||||||
chat {
|
|
||||||
chatId
|
|
||||||
defaultBotNickname
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,8 +0,0 @@
|
|||||||
subscription subscriptions_messageDeleted_Subscription(
|
|
||||||
$chatId: BigInt!
|
|
||||||
) {
|
|
||||||
messageDeleted(chatId: $chatId) {
|
|
||||||
id
|
|
||||||
messageId
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,13 +0,0 @@
|
|||||||
fragment MessageFragment on Message {
|
|
||||||
id
|
|
||||||
__typename
|
|
||||||
messageId
|
|
||||||
text
|
|
||||||
linkifiedText
|
|
||||||
authorNickname
|
|
||||||
state
|
|
||||||
vote
|
|
||||||
voteReason
|
|
||||||
creationTime
|
|
||||||
suggestedReplies
|
|
||||||
}
|
|
@@ -1,7 +0,0 @@
|
|||||||
mutation MessageRemoveVoteMutation($messageId: BigInt!) {
|
|
||||||
messageRemoveVote(messageId: $messageId) {
|
|
||||||
message {
|
|
||||||
...MessageFragment
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,7 +0,0 @@
|
|||||||
mutation MessageSetVoteMutation($messageId: BigInt!, $voteType: VoteType!, $reason: String) {
|
|
||||||
messageSetVote(messageId: $messageId, voteType: $voteType, reason: $reason) {
|
|
||||||
message {
|
|
||||||
...MessageFragment
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,40 +0,0 @@
|
|||||||
mutation chatHelpers_sendMessageMutation_Mutation(
|
|
||||||
$chatId: BigInt!
|
|
||||||
$bot: String!
|
|
||||||
$query: String!
|
|
||||||
$source: MessageSource
|
|
||||||
$withChatBreak: Boolean!
|
|
||||||
) {
|
|
||||||
messageEdgeCreate(chatId: $chatId, bot: $bot, query: $query, source: $source, withChatBreak: $withChatBreak) {
|
|
||||||
chatBreak {
|
|
||||||
cursor
|
|
||||||
node {
|
|
||||||
id
|
|
||||||
messageId
|
|
||||||
text
|
|
||||||
author
|
|
||||||
suggestedReplies
|
|
||||||
creationTime
|
|
||||||
state
|
|
||||||
}
|
|
||||||
id
|
|
||||||
}
|
|
||||||
message {
|
|
||||||
cursor
|
|
||||||
node {
|
|
||||||
id
|
|
||||||
messageId
|
|
||||||
text
|
|
||||||
author
|
|
||||||
suggestedReplies
|
|
||||||
creationTime
|
|
||||||
state
|
|
||||||
chat {
|
|
||||||
shouldShowDisclaimer
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,12 +0,0 @@
|
|||||||
mutation SendVerificationCodeForLoginMutation(
|
|
||||||
$emailAddress: String
|
|
||||||
$phoneNumber: String
|
|
||||||
) {
|
|
||||||
sendVerificationCode(
|
|
||||||
verificationReason: login
|
|
||||||
emailAddress: $emailAddress
|
|
||||||
phoneNumber: $phoneNumber
|
|
||||||
) {
|
|
||||||
status
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,9 +0,0 @@
|
|||||||
mutation ShareMessagesMutation(
|
|
||||||
$chatId: BigInt!
|
|
||||||
$messageIds: [BigInt!]!
|
|
||||||
$comment: String
|
|
||||||
) {
|
|
||||||
messagesShare(chatId: $chatId, messageIds: $messageIds, comment: $comment) {
|
|
||||||
shareCode
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,13 +0,0 @@
|
|||||||
mutation SignupWithVerificationCodeMutation(
|
|
||||||
$verificationCode: String!
|
|
||||||
$emailAddress: String
|
|
||||||
$phoneNumber: String
|
|
||||||
) {
|
|
||||||
signupWithVerificationCode(
|
|
||||||
verificationCode: $verificationCode
|
|
||||||
emailAddress: $emailAddress
|
|
||||||
phoneNumber: $phoneNumber
|
|
||||||
) {
|
|
||||||
status
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,7 +0,0 @@
|
|||||||
mutation StaleChatUpdateMutation($chatId: BigInt!) {
|
|
||||||
staleChatUpdate(chatId: $chatId) {
|
|
||||||
message {
|
|
||||||
...MessageFragment
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,9 +0,0 @@
|
|||||||
mutation subscriptionsMutation(
|
|
||||||
$subscriptions: [AutoSubscriptionQuery!]!
|
|
||||||
) {
|
|
||||||
autoSubscribe(subscriptions: $subscriptions) {
|
|
||||||
viewer {
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,3 +0,0 @@
|
|||||||
query SummarizePlainPostQuery($comment: String!) {
|
|
||||||
summarizePlainPost(comment: $comment)
|
|
||||||
}
|
|
@@ -1,3 +0,0 @@
|
|||||||
query SummarizeQuotePostQuery($comment: String, $quotedPostId: BigInt!) {
|
|
||||||
summarizeQuotePost(comment: $comment, quotedPostId: $quotedPostId)
|
|
||||||
}
|
|
@@ -1,3 +0,0 @@
|
|||||||
query SummarizeSharePostQuery($comment: String!, $chatId: BigInt!, $messageIds: [BigInt!]!) {
|
|
||||||
summarizeSharePost(comment: $comment, chatId: $chatId, messageIds: $messageIds)
|
|
||||||
}
|
|
@@ -1,14 +0,0 @@
|
|||||||
fragment UserSnippetFragment on PoeUser {
|
|
||||||
id
|
|
||||||
uid
|
|
||||||
bio
|
|
||||||
handle
|
|
||||||
fullName
|
|
||||||
viewerIsFollowing
|
|
||||||
isPoeOnlyUser
|
|
||||||
profilePhotoURLTiny: profilePhotoUrl(size: tiny)
|
|
||||||
profilePhotoURLSmall: profilePhotoUrl(size: small)
|
|
||||||
profilePhotoURLMedium: profilePhotoUrl(size: medium)
|
|
||||||
profilePhotoURLLarge: profilePhotoUrl(size: large)
|
|
||||||
isFollowable
|
|
||||||
}
|
|
@@ -1,21 +0,0 @@
|
|||||||
query ViewerInfoQuery {
|
|
||||||
viewer {
|
|
||||||
id
|
|
||||||
uid
|
|
||||||
...ViewerStateFragment
|
|
||||||
...BioFragment
|
|
||||||
...HandleFragment
|
|
||||||
hasCompletedMultiplayerNux
|
|
||||||
poeUser {
|
|
||||||
id
|
|
||||||
...UserSnippetFragment
|
|
||||||
}
|
|
||||||
messageLimit{
|
|
||||||
canSend
|
|
||||||
numMessagesRemaining
|
|
||||||
resetTime
|
|
||||||
shouldShowReminder
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@@ -1,81 +0,0 @@
|
|||||||
subscription subscriptions_viewerMessageLimitUpdated_Subscription {
|
|
||||||
viewerMessageLimitUpdated {
|
|
||||||
...SettingsSubscriptionSection_viewer
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment SettingsSubscriptionPaywallModal_viewer on Viewer {
|
|
||||||
...WebSubscriptionPaywall_viewer
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment SettingsSubscriptionSectionNonSubscriberView_viewer on Viewer {
|
|
||||||
...SettingsSubscriptionPaywallModal_viewer
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment SettingsSubscriptionSectionSubscriberView_viewer on Viewer {
|
|
||||||
subscription {
|
|
||||||
isActive
|
|
||||||
expiresTime
|
|
||||||
purchaseType
|
|
||||||
isAnnualSubscription
|
|
||||||
willCancelAtPeriodEnd
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment SettingsSubscriptionSection_viewer on Viewer {
|
|
||||||
availableBots {
|
|
||||||
displayName
|
|
||||||
messageLimit {
|
|
||||||
canSend
|
|
||||||
numMessagesRemaining
|
|
||||||
resetTime
|
|
||||||
dailyBalance
|
|
||||||
dailyLimit
|
|
||||||
monthlyBalance
|
|
||||||
monthlyLimit
|
|
||||||
monthlyBalanceRefreshTime
|
|
||||||
shouldShowRemainingMessageCount
|
|
||||||
}
|
|
||||||
id
|
|
||||||
}
|
|
||||||
subscription {
|
|
||||||
isActive
|
|
||||||
id
|
|
||||||
}
|
|
||||||
isEligibleForWebSubscriptions
|
|
||||||
...SettingsSubscriptionSectionNonSubscriberView_viewer
|
|
||||||
...SettingsSubscriptionSectionSubscriberView_viewer
|
|
||||||
...WebSubscriptionSuccessMessage_viewer
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment SubscriptionMessageLimitExplanation_viewer on Viewer {
|
|
||||||
availableBots {
|
|
||||||
displayName
|
|
||||||
messageLimit {
|
|
||||||
monthlyLimit
|
|
||||||
}
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment WebSubscriptionPaywall_viewer on Viewer {
|
|
||||||
...SubscriptionMessageLimitExplanation_viewer
|
|
||||||
webSubscriptionPriceInfo {
|
|
||||||
monthlyPrice
|
|
||||||
yearlyPrice
|
|
||||||
yearlyPricePerMonth
|
|
||||||
yearlyPercentageSavings
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment WebSubscriptionSuccessMessage_viewer on Viewer {
|
|
||||||
subscription {
|
|
||||||
isActive
|
|
||||||
expiresTime
|
|
||||||
willCancelAtPeriodEnd
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,30 +0,0 @@
|
|||||||
fragment ViewerStateFragment on Viewer {
|
|
||||||
id
|
|
||||||
__typename
|
|
||||||
iosMinSupportedVersion: integerGate(gateName: "poe_ios_min_supported_version")
|
|
||||||
iosMinEncouragedVersion: integerGate(
|
|
||||||
gateName: "poe_ios_min_encouraged_version"
|
|
||||||
)
|
|
||||||
macosMinSupportedVersion: integerGate(
|
|
||||||
gateName: "poe_macos_min_supported_version"
|
|
||||||
)
|
|
||||||
macosMinEncouragedVersion: integerGate(
|
|
||||||
gateName: "poe_macos_min_encouraged_version"
|
|
||||||
)
|
|
||||||
showPoeDebugPanel: booleanGate(gateName: "poe_show_debug_panel")
|
|
||||||
enableCommunityFeed: booleanGate(gateName: "enable_poe_shares_feed")
|
|
||||||
linkifyText: booleanGate(gateName: "poe_linkify_response")
|
|
||||||
enableSuggestedReplies: booleanGate(gateName: "poe_suggested_replies")
|
|
||||||
removeInviteLimit: booleanGate(gateName: "poe_remove_invite_limit")
|
|
||||||
enableInAppPurchases: booleanGate(gateName: "poe_enable_in_app_purchases")
|
|
||||||
availableBots {
|
|
||||||
nickname
|
|
||||||
displayName
|
|
||||||
profilePicture
|
|
||||||
isDown
|
|
||||||
disclaimer
|
|
||||||
subtitle
|
|
||||||
poweredBy
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@@ -1,63 +0,0 @@
|
|||||||
subscription subscriptions_viewerStateUpdated_Subscription {
|
|
||||||
viewerStateUpdated {
|
|
||||||
id
|
|
||||||
...ChatPageBotSwitcher_viewer
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment BotHeader_bot on Bot {
|
|
||||||
displayName
|
|
||||||
messageLimit {
|
|
||||||
dailyLimit
|
|
||||||
}
|
|
||||||
...BotImage_bot
|
|
||||||
...BotLink_bot
|
|
||||||
...IdAnnotation_node
|
|
||||||
...botHelpers_useViewerCanAccessPrivateBot
|
|
||||||
...botHelpers_useDeletion_bot
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment BotImage_bot on Bot {
|
|
||||||
displayName
|
|
||||||
...botHelpers_useDeletion_bot
|
|
||||||
...BotImage_useProfileImage_bot
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment BotImage_useProfileImage_bot on Bot {
|
|
||||||
image {
|
|
||||||
__typename
|
|
||||||
... on LocalBotImage {
|
|
||||||
localName
|
|
||||||
}
|
|
||||||
... on UrlBotImage {
|
|
||||||
url
|
|
||||||
}
|
|
||||||
}
|
|
||||||
...botHelpers_useDeletion_bot
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment BotLink_bot on Bot {
|
|
||||||
displayName
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment ChatPageBotSwitcher_viewer on Viewer {
|
|
||||||
availableBots {
|
|
||||||
id
|
|
||||||
handle
|
|
||||||
...BotHeader_bot
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment IdAnnotation_node on Node {
|
|
||||||
__isNode: __typename
|
|
||||||
id
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment botHelpers_useDeletion_bot on Bot {
|
|
||||||
deletionState
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment botHelpers_useViewerCanAccessPrivateBot on Bot {
|
|
||||||
isPrivateBot
|
|
||||||
viewerIsCreator
|
|
||||||
}
|
|
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"max_length": 2048,
|
"max_length": 2048,
|
||||||
"temp": 1.15,
|
|
||||||
"genamt": 100,
|
"genamt": 100,
|
||||||
|
"temp": 1.15,
|
||||||
"top_k": 0,
|
"top_k": 0,
|
||||||
"top_p": 0.95,
|
"top_p": 0.95,
|
||||||
"top_a": 0,
|
"top_a": 0,
|
||||||
@@ -11,12 +11,12 @@
|
|||||||
"rep_pen_range": 2048,
|
"rep_pen_range": 2048,
|
||||||
"rep_pen_slope": 7,
|
"rep_pen_slope": 7,
|
||||||
"sampler_order": [
|
"sampler_order": [
|
||||||
|
6,
|
||||||
3,
|
3,
|
||||||
2,
|
2,
|
||||||
0,
|
0,
|
||||||
5,
|
5,
|
||||||
1,
|
1,
|
||||||
4,
|
4
|
||||||
6
|
|
||||||
]
|
]
|
||||||
}
|
}
|
@@ -1,6 +1,16 @@
|
|||||||
{
|
{
|
||||||
"apikey": "",
|
"max_length": 2048,
|
||||||
"andepth": 1,
|
"genamt": 90,
|
||||||
|
"temp": 0.8,
|
||||||
|
"top_k": 28,
|
||||||
|
"top_p": 0.94,
|
||||||
|
"top_a": 0.00,
|
||||||
|
"tfs": 0.96,
|
||||||
|
"typical": 0.98,
|
||||||
|
"rep_pen": 1.03,
|
||||||
|
"rep_pen_slope": 0.8,
|
||||||
|
"rep_pen_range": 120.0,
|
||||||
|
"ikgen": 200,
|
||||||
"sampler_order": [
|
"sampler_order": [
|
||||||
6,
|
6,
|
||||||
4,
|
4,
|
||||||
@@ -9,46 +19,5 @@
|
|||||||
0,
|
0,
|
||||||
1,
|
1,
|
||||||
5
|
5
|
||||||
],
|
]
|
||||||
"temp": 0.8,
|
|
||||||
"top_p": 0.94,
|
|
||||||
"top_k": 28,
|
|
||||||
"tfs": 0.96,
|
|
||||||
"typical": 0.98,
|
|
||||||
"top_a": 0.00,
|
|
||||||
"rep_pen": 1.03,
|
|
||||||
"rep_pen_slope": 0.8,
|
|
||||||
"rep_pen_range": 120.0,
|
|
||||||
"genamt": 90,
|
|
||||||
"max_length": 2048,
|
|
||||||
"ikgen": 200,
|
|
||||||
"formatoptns": {
|
|
||||||
"frmttriminc": true,
|
|
||||||
"frmtrmblln": false,
|
|
||||||
"frmtrmspch": false,
|
|
||||||
"frmtadsnsp": true,
|
|
||||||
"singleline": false
|
|
||||||
},
|
|
||||||
"numseqs": 1,
|
|
||||||
"widepth": 3,
|
|
||||||
"useprompt": false,
|
|
||||||
"adventure": false,
|
|
||||||
"chatmode": false,
|
|
||||||
"chatname": "You",
|
|
||||||
"dynamicscan": false,
|
|
||||||
"nopromptgen": false,
|
|
||||||
"rngpersist": false,
|
|
||||||
"nogenmod": false,
|
|
||||||
"fulldeterminism": false,
|
|
||||||
"autosave": false,
|
|
||||||
"welcome": "## Warning: This model has a very heavy NSFW bias and is not suitable for use by minors!\n\nYou are currently running story-writing model `Erebus, version 1 (20B).`\n\n This model is made by [Mr. Seeker](https://www.patreon.com/mrseeker) with help of ProudNoob and the KoboldAI team.\n\n### How to use this model\n\nErebus is designed to generate short stories and novels. Use the author's note to give it a certain genre to follow, use memory to give an overview of the story and use World Information to give specific details about the characters. To start off, give the AI an idea of what you are writing about by setting the scene. Give the AI around 10 sentences that make your story interesting to read. Introduce your character, describe the world, blow something up, or let the AI use its creative mind.",
|
|
||||||
"output_streaming": true,
|
|
||||||
"show_probs": false,
|
|
||||||
"show_budget": false,
|
|
||||||
"seed": null,
|
|
||||||
"newlinemode": "n",
|
|
||||||
"antemplate": "",
|
|
||||||
"userscripts": [],
|
|
||||||
"corescript": "default.lua",
|
|
||||||
"softprompt": ""
|
|
||||||
}
|
}
|
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"max_length": 2048,
|
"max_length": 2048,
|
||||||
"temp": 0.59,
|
|
||||||
"genamt": 100,
|
"genamt": 100,
|
||||||
|
"temp": 0.59,
|
||||||
"top_k": 0,
|
"top_k": 0,
|
||||||
"top_p": 1,
|
"top_p": 1,
|
||||||
"top_a": 0,
|
"top_a": 0,
|
||||||
@@ -11,12 +11,12 @@
|
|||||||
"rep_pen_range": 2048,
|
"rep_pen_range": 2048,
|
||||||
"rep_pen_slope": 0.3,
|
"rep_pen_slope": 0.3,
|
||||||
"sampler_order": [
|
"sampler_order": [
|
||||||
|
6,
|
||||||
5,
|
5,
|
||||||
0,
|
0,
|
||||||
2,
|
2,
|
||||||
3,
|
3,
|
||||||
1,
|
1,
|
||||||
4,
|
4
|
||||||
6
|
|
||||||
]
|
]
|
||||||
}
|
}
|
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"max_length": 2048,
|
"max_length": 2048,
|
||||||
"temp": 0.8,
|
|
||||||
"genamt": 100,
|
"genamt": 100,
|
||||||
|
"temp": 0.8,
|
||||||
"top_k": 100,
|
"top_k": 100,
|
||||||
"top_p": 0.9,
|
"top_p": 0.9,
|
||||||
"top_a": 0,
|
"top_a": 0,
|
||||||
@@ -11,12 +11,12 @@
|
|||||||
"rep_pen_range": 2048,
|
"rep_pen_range": 2048,
|
||||||
"rep_pen_slope": 3.4,
|
"rep_pen_slope": 3.4,
|
||||||
"sampler_order": [
|
"sampler_order": [
|
||||||
|
6,
|
||||||
5,
|
5,
|
||||||
0,
|
0,
|
||||||
2,
|
2,
|
||||||
3,
|
3,
|
||||||
1,
|
1,
|
||||||
4,
|
4
|
||||||
6
|
|
||||||
]
|
]
|
||||||
}
|
}
|
@@ -1,21 +1,15 @@
|
|||||||
{
|
{
|
||||||
"file_version": 2,
|
|
||||||
"max_length": 2048,
|
"max_length": 2048,
|
||||||
"ikmax": 3000,
|
|
||||||
"genamt": 180,
|
"genamt": 180,
|
||||||
"ikgen": 200,
|
|
||||||
"rep_pen": 1.01,
|
|
||||||
"rep_pen_slope": 0.9,
|
|
||||||
"rep_pen_range": 1024,
|
|
||||||
"temp": 1.0,
|
"temp": 1.0,
|
||||||
"top_p": 0.9,
|
"top_p": 0.9,
|
||||||
"top_k": 40,
|
"top_k": 40,
|
||||||
"top_a": 0.0,
|
"top_a": 0.0,
|
||||||
"tfs": 0.9,
|
"tfs": 0.9,
|
||||||
"typical": 1.0,
|
"typical": 1.0,
|
||||||
"numseqs": 1,
|
"rep_pen": 1.01,
|
||||||
"fp32_model": false,
|
"rep_pen_slope": 0.9,
|
||||||
"modeldim": 4096,
|
"rep_pen_range": 1024,
|
||||||
"sampler_order": [
|
"sampler_order": [
|
||||||
6,
|
6,
|
||||||
0,
|
0,
|
||||||
@@ -24,24 +18,5 @@
|
|||||||
3,
|
3,
|
||||||
4,
|
4,
|
||||||
5
|
5
|
||||||
|
]
|
||||||
],
|
|
||||||
"newlinemode": "n",
|
|
||||||
"lazy_load": true,
|
|
||||||
"revision": null,
|
|
||||||
"selected_preset": "",
|
|
||||||
"horde_wait_time": 0,
|
|
||||||
"horde_queue_position": 0,
|
|
||||||
"horde_queue_size": 0,
|
|
||||||
"model": "pygmalion-6b",
|
|
||||||
"model_type": "gptj",
|
|
||||||
"url": "https://api.inferkit.com/v1/models/standard/generate",
|
|
||||||
"oaiurl": "",
|
|
||||||
"oaiengines": "https://api.openai.com/v1/engines",
|
|
||||||
"colaburl": "/request",
|
|
||||||
"apikey": "",
|
|
||||||
"oaiapikey": "",
|
|
||||||
"configname": "pygmalion-6b",
|
|
||||||
"online_model": "",
|
|
||||||
"alt_multi_gen": false
|
|
||||||
}
|
}
|
@@ -1,21 +1,15 @@
|
|||||||
{
|
{
|
||||||
"file_version": 2,
|
|
||||||
"max_length": 2048,
|
"max_length": 2048,
|
||||||
"ikmax": 3000,
|
|
||||||
"genamt": 180,
|
"genamt": 180,
|
||||||
"ikgen": 200,
|
|
||||||
"rep_pen": 1.17,
|
|
||||||
"rep_pen_slope": 0.2,
|
|
||||||
"rep_pen_range": 1024,
|
|
||||||
"temp": 0.43,
|
"temp": 0.43,
|
||||||
"top_p": 0.96,
|
"top_p": 0.96,
|
||||||
"top_k": 0,
|
"top_k": 0,
|
||||||
"top_a": 0.0,
|
"top_a": 0.0,
|
||||||
"tfs": 0.68,
|
"tfs": 0.68,
|
||||||
"typical": 1.0,
|
"typical": 1.0,
|
||||||
"numseqs": 1,
|
"rep_pen": 1.17,
|
||||||
"fp32_model": false,
|
"rep_pen_slope": 0.2,
|
||||||
"modeldim": 2560,
|
"rep_pen_range": 1024,
|
||||||
"sampler_order": [
|
"sampler_order": [
|
||||||
6,
|
6,
|
||||||
0,
|
0,
|
||||||
@@ -24,23 +18,5 @@
|
|||||||
3,
|
3,
|
||||||
4,
|
4,
|
||||||
5
|
5
|
||||||
],
|
]
|
||||||
"newlinemode": "n",
|
|
||||||
"lazy_load": true,
|
|
||||||
"revision": null,
|
|
||||||
"selected_preset": "",
|
|
||||||
"horde_wait_time": 0,
|
|
||||||
"horde_queue_position": 0,
|
|
||||||
"horde_queue_size": 0,
|
|
||||||
"model": "pygmalion-2.7b",
|
|
||||||
"model_type": "gpt_neo",
|
|
||||||
"url": "https://api.inferkit.com/v1/models/standard/generate",
|
|
||||||
"oaiurl": "",
|
|
||||||
"oaiengines": "https://api.openai.com/v1/engines",
|
|
||||||
"colaburl": "/request",
|
|
||||||
"apikey": "",
|
|
||||||
"oaiapikey": "",
|
|
||||||
"configname": "pygmalion-2.7b",
|
|
||||||
"online_model": "",
|
|
||||||
"alt_multi_gen": false
|
|
||||||
}
|
}
|
@@ -1,21 +1,15 @@
|
|||||||
{
|
{
|
||||||
"file_version": 2,
|
|
||||||
"max_length": 2048,
|
"max_length": 2048,
|
||||||
"ikmax": 3000,
|
|
||||||
"genamt": 180,
|
"genamt": 180,
|
||||||
"ikgen": 200,
|
|
||||||
"rep_pen": 1.1,
|
|
||||||
"rep_pen_slope": 0.9,
|
|
||||||
"rep_pen_range": 1024,
|
|
||||||
"temp": 0.65,
|
"temp": 0.65,
|
||||||
"top_p": 0.9,
|
"top_p": 0.9,
|
||||||
"top_k": 0,
|
"top_k": 0,
|
||||||
"top_a": 0.0,
|
"top_a": 0.0,
|
||||||
"tfs": 0.9,
|
"tfs": 0.9,
|
||||||
"typical": 1.0,
|
"typical": 1.0,
|
||||||
"numseqs": 1,
|
"rep_pen": 1.1,
|
||||||
"fp32_model": false,
|
"rep_pen_slope": 0.9,
|
||||||
"modeldim": 4096,
|
"rep_pen_range": 1024,
|
||||||
"sampler_order": [
|
"sampler_order": [
|
||||||
6,
|
6,
|
||||||
0,
|
0,
|
||||||
@@ -23,25 +17,6 @@
|
|||||||
2,
|
2,
|
||||||
3,
|
3,
|
||||||
4,
|
4,
|
||||||
5
|
5
|
||||||
|
]
|
||||||
],
|
|
||||||
"newlinemode": "n",
|
|
||||||
"lazy_load": true,
|
|
||||||
"revision": null,
|
|
||||||
"selected_preset": "",
|
|
||||||
"horde_wait_time": 0,
|
|
||||||
"horde_queue_position": 0,
|
|
||||||
"horde_queue_size": 0,
|
|
||||||
"model": "pygmalion-6b",
|
|
||||||
"model_type": "gptj",
|
|
||||||
"url": "https://api.inferkit.com/v1/models/standard/generate",
|
|
||||||
"oaiurl": "",
|
|
||||||
"oaiengines": "https://api.openai.com/v1/engines",
|
|
||||||
"colaburl": "/request",
|
|
||||||
"apikey": "",
|
|
||||||
"oaiapikey": "",
|
|
||||||
"configname": "pygmalion-6b",
|
|
||||||
"online_model": "",
|
|
||||||
"alt_multi_gen": false
|
|
||||||
}
|
}
|
@@ -1,22 +1,22 @@
|
|||||||
{
|
{
|
||||||
"max_length": 2048,
|
"max_length": 2048,
|
||||||
"genamt": 100,
|
"genamt": 100,
|
||||||
|
"temp": 0.51,
|
||||||
|
"top_p": 1,
|
||||||
|
"top_k": 0,
|
||||||
|
"tfs": 0.99,
|
||||||
|
"top_a": 0,
|
||||||
|
"typical": 1,
|
||||||
"rep_pen": 1.2,
|
"rep_pen": 1.2,
|
||||||
"rep_pen_range": 2048,
|
"rep_pen_range": 2048,
|
||||||
"rep_pen_slope": 0,
|
"rep_pen_slope": 0,
|
||||||
"sampler_order": [
|
"sampler_order": [
|
||||||
|
6,
|
||||||
5,
|
5,
|
||||||
0,
|
0,
|
||||||
2,
|
2,
|
||||||
3,
|
3,
|
||||||
1,
|
1,
|
||||||
4,
|
4
|
||||||
6
|
]
|
||||||
],
|
|
||||||
"temp": 0.51,
|
|
||||||
"tfs": 0.99,
|
|
||||||
"top_a": 0,
|
|
||||||
"top_k": 0,
|
|
||||||
"top_p": 1,
|
|
||||||
"typical": 1
|
|
||||||
}
|
}
|
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"max_length": 1600,
|
"max_length": 1600,
|
||||||
"temp": 0.79,
|
|
||||||
"genamt": 180,
|
"genamt": 180,
|
||||||
|
"temp": 0.79,
|
||||||
"top_k": 0,
|
"top_k": 0,
|
||||||
"top_p": 0.9,
|
"top_p": 0.9,
|
||||||
"top_a": 0,
|
"top_a": 0,
|
||||||
|
@@ -1,21 +1,15 @@
|
|||||||
{
|
{
|
||||||
"file_version": 2,
|
|
||||||
"max_length": 2048,
|
"max_length": 2048,
|
||||||
"ikmax": 3000,
|
|
||||||
"genamt": 180,
|
"genamt": 180,
|
||||||
"ikgen": 200,
|
|
||||||
"rep_pen": 1.19,
|
|
||||||
"rep_pen_slope": 0.9,
|
|
||||||
"rep_pen_range": 1024,
|
|
||||||
"temp": 0.79,
|
"temp": 0.79,
|
||||||
"top_p": 0.9,
|
"top_p": 0.9,
|
||||||
"top_k": 0,
|
"top_k": 0,
|
||||||
"top_a": 0.0,
|
"top_a": 0.0,
|
||||||
"tfs": 0.95,
|
"tfs": 0.95,
|
||||||
"typical": 1.0,
|
"typical": 1.0,
|
||||||
"numseqs": 1,
|
"rep_pen": 1.19,
|
||||||
"fp32_model": false,
|
"rep_pen_slope": 0.9,
|
||||||
"modeldim": 4096,
|
"rep_pen_range": 1024,
|
||||||
"sampler_order": [
|
"sampler_order": [
|
||||||
6,
|
6,
|
||||||
0,
|
0,
|
||||||
@@ -24,24 +18,5 @@
|
|||||||
3,
|
3,
|
||||||
4,
|
4,
|
||||||
5
|
5
|
||||||
|
]
|
||||||
],
|
|
||||||
"newlinemode": "n",
|
|
||||||
"lazy_load": true,
|
|
||||||
"revision": null,
|
|
||||||
"selected_preset": "",
|
|
||||||
"horde_wait_time": 0,
|
|
||||||
"horde_queue_position": 0,
|
|
||||||
"horde_queue_size": 0,
|
|
||||||
"model": "pygmalion-6b",
|
|
||||||
"model_type": "gptj",
|
|
||||||
"url": "https://api.inferkit.com/v1/models/standard/generate",
|
|
||||||
"oaiurl": "",
|
|
||||||
"oaiengines": "https://api.openai.com/v1/engines",
|
|
||||||
"colaburl": "/request",
|
|
||||||
"apikey": "",
|
|
||||||
"oaiapikey": "",
|
|
||||||
"configname": "pygmalion-6b",
|
|
||||||
"online_model": "",
|
|
||||||
"alt_multi_gen": false
|
|
||||||
}
|
}
|
@@ -1,21 +1,15 @@
|
|||||||
{
|
{
|
||||||
"file_version": 2,
|
|
||||||
"max_length": 1400,
|
"max_length": 1400,
|
||||||
"ikmax": 3000,
|
|
||||||
"genamt": 180,
|
"genamt": 180,
|
||||||
"ikgen": 200,
|
|
||||||
"rep_pen": 1.08,
|
|
||||||
"rep_pen_slope": 0.9,
|
|
||||||
"rep_pen_range": 1024,
|
|
||||||
"temp": 0.65,
|
"temp": 0.65,
|
||||||
"top_p": 0.9,
|
"top_p": 0.9,
|
||||||
"top_k": 0,
|
"top_k": 0,
|
||||||
"top_a": 0.0,
|
"top_a": 0.0,
|
||||||
"tfs": 0.9,
|
"tfs": 0.9,
|
||||||
"typical": 1.0,
|
"typical": 1.0,
|
||||||
"numseqs": 1,
|
"rep_pen": 1.08,
|
||||||
"fp32_model": false,
|
"rep_pen_slope": 0.9,
|
||||||
"modeldim": 4096,
|
"rep_pen_range": 1024,
|
||||||
"sampler_order": [
|
"sampler_order": [
|
||||||
6,
|
6,
|
||||||
0,
|
0,
|
||||||
@@ -24,24 +18,5 @@
|
|||||||
3,
|
3,
|
||||||
4,
|
4,
|
||||||
5
|
5
|
||||||
|
]
|
||||||
],
|
|
||||||
"newlinemode": "n",
|
|
||||||
"lazy_load": true,
|
|
||||||
"revision": null,
|
|
||||||
"selected_preset": "",
|
|
||||||
"horde_wait_time": 0,
|
|
||||||
"horde_queue_position": 0,
|
|
||||||
"horde_queue_size": 0,
|
|
||||||
"model": "pygmalion-6b",
|
|
||||||
"model_type": "gptj",
|
|
||||||
"url": "https://api.inferkit.com/v1/models/standard/generate",
|
|
||||||
"oaiurl": "",
|
|
||||||
"oaiengines": "https://api.openai.com/v1/engines",
|
|
||||||
"colaburl": "/request",
|
|
||||||
"apikey": "",
|
|
||||||
"oaiapikey": "",
|
|
||||||
"configname": "pygmalion-6b",
|
|
||||||
"online_model": "",
|
|
||||||
"alt_multi_gen": false
|
|
||||||
}
|
}
|
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"max_length": 2048,
|
"max_length": 2048,
|
||||||
"temp": 0.63,
|
|
||||||
"genamt": 100,
|
"genamt": 100,
|
||||||
|
"temp": 0.63,
|
||||||
"top_k": 0,
|
"top_k": 0,
|
||||||
"top_p": 0.98,
|
"top_p": 0.98,
|
||||||
"top_a": 0,
|
"top_a": 0,
|
||||||
@@ -11,12 +11,12 @@
|
|||||||
"rep_pen_range": 2048,
|
"rep_pen_range": 2048,
|
||||||
"rep_pen_slope": 0.1,
|
"rep_pen_slope": 0.1,
|
||||||
"sampler_order": [
|
"sampler_order": [
|
||||||
|
6,
|
||||||
2,
|
2,
|
||||||
0,
|
0,
|
||||||
3,
|
3,
|
||||||
5,
|
5,
|
||||||
1,
|
1,
|
||||||
4,
|
4
|
||||||
6
|
|
||||||
]
|
]
|
||||||
}
|
}
|
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"max_length": 2048,
|
"max_length": 2048,
|
||||||
"temp": 0.7,
|
|
||||||
"genamt": 100,
|
"genamt": 100,
|
||||||
|
"temp": 0.7,
|
||||||
"top_k": 0,
|
"top_k": 0,
|
||||||
"top_p": 0.5,
|
"top_p": 0.5,
|
||||||
"top_a": 0.75,
|
"top_a": 0.75,
|
||||||
@@ -11,12 +11,12 @@
|
|||||||
"rep_pen_range": 1024,
|
"rep_pen_range": 1024,
|
||||||
"rep_pen_slope": 0.7,
|
"rep_pen_slope": 0.7,
|
||||||
"sampler_order": [
|
"sampler_order": [
|
||||||
|
6,
|
||||||
5,
|
5,
|
||||||
4,
|
4,
|
||||||
3,
|
3,
|
||||||
2,
|
2,
|
||||||
1,
|
1,
|
||||||
0,
|
0
|
||||||
6
|
|
||||||
]
|
]
|
||||||
}
|
}
|
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"max_length": 2048,
|
"max_length": 2048,
|
||||||
"temp": 0.7,
|
|
||||||
"genamt": 100,
|
"genamt": 100,
|
||||||
|
"temp": 0.7,
|
||||||
"top_k": 0,
|
"top_k": 0,
|
||||||
"top_p": 1,
|
"top_p": 1,
|
||||||
"top_a": 0,
|
"top_a": 0,
|
||||||
@@ -11,12 +11,12 @@
|
|||||||
"rep_pen_range": 1024,
|
"rep_pen_range": 1024,
|
||||||
"rep_pen_slope": 0.7,
|
"rep_pen_slope": 0.7,
|
||||||
"sampler_order": [
|
"sampler_order": [
|
||||||
|
6,
|
||||||
0,
|
0,
|
||||||
1,
|
1,
|
||||||
2,
|
2,
|
||||||
3,
|
3,
|
||||||
4,
|
4,
|
||||||
5,
|
5
|
||||||
6
|
|
||||||
]
|
]
|
||||||
}
|
}
|
@@ -1,15 +1,6 @@
|
|||||||
{
|
{
|
||||||
"apikey": "",
|
"max_length": 2048,
|
||||||
"andepth": 1,
|
"genamt": 90,
|
||||||
"sampler_order": [
|
|
||||||
6,
|
|
||||||
4,
|
|
||||||
3,
|
|
||||||
2,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
5
|
|
||||||
],
|
|
||||||
"temp": 0.8,
|
"temp": 0.8,
|
||||||
"top_p": 0.94,
|
"top_p": 0.94,
|
||||||
"top_k": 15,
|
"top_k": 15,
|
||||||
@@ -19,36 +10,13 @@
|
|||||||
"rep_pen": 1.02,
|
"rep_pen": 1.02,
|
||||||
"rep_pen_slope": 0.8,
|
"rep_pen_slope": 0.8,
|
||||||
"rep_pen_range": 256.0,
|
"rep_pen_range": 256.0,
|
||||||
"genamt": 90,
|
"sampler_order": [
|
||||||
"max_length": 2048,
|
6,
|
||||||
"ikgen": 200,
|
4,
|
||||||
"formatoptns": {
|
3,
|
||||||
"frmttriminc": true,
|
2,
|
||||||
"frmtrmblln": false,
|
0,
|
||||||
"frmtrmspch": false,
|
1,
|
||||||
"frmtadsnsp": true,
|
5
|
||||||
"singleline": false
|
]
|
||||||
},
|
|
||||||
"numseqs": 1,
|
|
||||||
"widepth": 3,
|
|
||||||
"useprompt": false,
|
|
||||||
"adventure": false,
|
|
||||||
"chatmode": false,
|
|
||||||
"chatname": "You",
|
|
||||||
"dynamicscan": false,
|
|
||||||
"nopromptgen": false,
|
|
||||||
"rngpersist": false,
|
|
||||||
"nogenmod": false,
|
|
||||||
"fulldeterminism": false,
|
|
||||||
"autosave": false,
|
|
||||||
"welcome": "## Warning: This model has a very heavy NSFW bias and is not suitable for use by minors!\n\nYou are currently running story-writing model `Erebus, version 1 (20B).`\n\n This model is made by [Mr. Seeker](https://www.patreon.com/mrseeker) with help of ProudNoob and the KoboldAI team.\n\n### How to use this model\n\nErebus is designed to generate short stories and novels. Use the author's note to give it a certain genre to follow, use memory to give an overview of the story and use World Information to give specific details about the characters. To start off, give the AI an idea of what you are writing about by setting the scene. Give the AI around 10 sentences that make your story interesting to read. Introduce your character, describe the world, blow something up, or let the AI use its creative mind.",
|
|
||||||
"output_streaming": true,
|
|
||||||
"show_probs": false,
|
|
||||||
"show_budget": false,
|
|
||||||
"seed": null,
|
|
||||||
"newlinemode": "n",
|
|
||||||
"antemplate": "",
|
|
||||||
"userscripts": [],
|
|
||||||
"corescript": "default.lua",
|
|
||||||
"softprompt": ""
|
|
||||||
}
|
}
|
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"max_length": 2048,
|
"max_length": 2048,
|
||||||
"temp": 0.66,
|
|
||||||
"genamt": 100,
|
"genamt": 100,
|
||||||
|
"temp": 0.66,
|
||||||
"top_k": 0,
|
"top_k": 0,
|
||||||
"top_p": 1,
|
"top_p": 1,
|
||||||
"top_a": 0.96,
|
"top_a": 0.96,
|
||||||
@@ -11,12 +11,12 @@
|
|||||||
"rep_pen_range": 1024,
|
"rep_pen_range": 1024,
|
||||||
"rep_pen_slope": 0.7,
|
"rep_pen_slope": 0.7,
|
||||||
"sampler_order": [
|
"sampler_order": [
|
||||||
|
6,
|
||||||
4,
|
4,
|
||||||
5,
|
5,
|
||||||
1,
|
1,
|
||||||
0,
|
0,
|
||||||
2,
|
2,
|
||||||
3,
|
3
|
||||||
6
|
|
||||||
]
|
]
|
||||||
}
|
}
|
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"max_length": 2048,
|
"max_length": 2048,
|
||||||
"temp": 0.94,
|
|
||||||
"genamt": 100,
|
"genamt": 100,
|
||||||
|
"temp": 0.94,
|
||||||
"top_k": 12,
|
"top_k": 12,
|
||||||
"top_p": 1,
|
"top_p": 1,
|
||||||
"top_a": 0,
|
"top_a": 0,
|
||||||
@@ -11,12 +11,12 @@
|
|||||||
"rep_pen_range": 2048,
|
"rep_pen_range": 2048,
|
||||||
"rep_pen_slope": 0.2,
|
"rep_pen_slope": 0.2,
|
||||||
"sampler_order": [
|
"sampler_order": [
|
||||||
|
6,
|
||||||
5,
|
5,
|
||||||
0,
|
0,
|
||||||
2,
|
2,
|
||||||
3,
|
3,
|
||||||
1,
|
1,
|
||||||
4,
|
4
|
||||||
6
|
|
||||||
]
|
]
|
||||||
}
|
}
|
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"max_length": 2048,
|
"max_length": 2048,
|
||||||
"temp": 1.5,
|
|
||||||
"genamt": 100,
|
"genamt": 100,
|
||||||
|
"temp": 1.5,
|
||||||
"top_k": 85,
|
"top_k": 85,
|
||||||
"top_p": 0.24,
|
"top_p": 0.24,
|
||||||
"top_a": 0,
|
"top_a": 0,
|
||||||
@@ -11,12 +11,12 @@
|
|||||||
"rep_pen_range": 2048,
|
"rep_pen_range": 2048,
|
||||||
"rep_pen_slope": 0,
|
"rep_pen_slope": 0,
|
||||||
"sampler_order": [
|
"sampler_order": [
|
||||||
|
6,
|
||||||
5,
|
5,
|
||||||
0,
|
0,
|
||||||
2,
|
2,
|
||||||
3,
|
3,
|
||||||
1,
|
1,
|
||||||
4,
|
4
|
||||||
6
|
|
||||||
]
|
]
|
||||||
}
|
}
|
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"max_length": 2048,
|
"max_length": 2048,
|
||||||
"temp": 1.05,
|
|
||||||
"genamt": 100,
|
"genamt": 100,
|
||||||
|
"temp": 1.05,
|
||||||
"top_k": 0,
|
"top_k": 0,
|
||||||
"top_p": 0.95,
|
"top_p": 0.95,
|
||||||
"top_a": 0,
|
"top_a": 0,
|
||||||
@@ -11,12 +11,12 @@
|
|||||||
"rep_pen_range": 1024,
|
"rep_pen_range": 1024,
|
||||||
"rep_pen_slope": 0.7,
|
"rep_pen_slope": 0.7,
|
||||||
"sampler_order": [
|
"sampler_order": [
|
||||||
|
6,
|
||||||
0,
|
0,
|
||||||
1,
|
1,
|
||||||
2,
|
2,
|
||||||
3,
|
3,
|
||||||
4,
|
4,
|
||||||
5,
|
5
|
||||||
6
|
|
||||||
]
|
]
|
||||||
}
|
}
|
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"max_length": 2048,
|
"max_length": 2048,
|
||||||
"temp": 1.07,
|
|
||||||
"genamt": 100,
|
"genamt": 100,
|
||||||
|
"temp": 1.07,
|
||||||
"top_k": 100,
|
"top_k": 100,
|
||||||
"top_p": 1,
|
"top_p": 1,
|
||||||
"top_a": 0,
|
"top_a": 0,
|
||||||
@@ -11,12 +11,12 @@
|
|||||||
"rep_pen_range": 404,
|
"rep_pen_range": 404,
|
||||||
"rep_pen_slope": 0.8,
|
"rep_pen_slope": 0.8,
|
||||||
"sampler_order": [
|
"sampler_order": [
|
||||||
|
6,
|
||||||
0,
|
0,
|
||||||
5,
|
5,
|
||||||
3,
|
3,
|
||||||
2,
|
2,
|
||||||
1,
|
1,
|
||||||
4,
|
4
|
||||||
6
|
|
||||||
]
|
]
|
||||||
}
|
}
|
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"max_length": 2048,
|
"max_length": 2048,
|
||||||
"temp": 0.44,
|
|
||||||
"genamt": 100,
|
"genamt": 100,
|
||||||
|
"temp": 0.44,
|
||||||
"top_k": 0,
|
"top_k": 0,
|
||||||
"top_p": 1,
|
"top_p": 1,
|
||||||
"top_a": 0,
|
"top_a": 0,
|
||||||
@@ -11,12 +11,12 @@
|
|||||||
"rep_pen_range": 2048,
|
"rep_pen_range": 2048,
|
||||||
"rep_pen_slope": 6.8,
|
"rep_pen_slope": 6.8,
|
||||||
"sampler_order": [
|
"sampler_order": [
|
||||||
|
6,
|
||||||
5,
|
5,
|
||||||
0,
|
0,
|
||||||
2,
|
2,
|
||||||
3,
|
3,
|
||||||
1,
|
1,
|
||||||
4,
|
4
|
||||||
6
|
|
||||||
]
|
]
|
||||||
}
|
}
|
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"max_length": 2048,
|
"max_length": 2048,
|
||||||
"temp": 1.35,
|
|
||||||
"genamt": 100,
|
"genamt": 100,
|
||||||
|
"temp": 1.35,
|
||||||
"top_k": 0,
|
"top_k": 0,
|
||||||
"top_p": 1,
|
"top_p": 1,
|
||||||
"top_a": 0,
|
"top_a": 0,
|
||||||
@@ -11,12 +11,12 @@
|
|||||||
"rep_pen_range": 2048,
|
"rep_pen_range": 2048,
|
||||||
"rep_pen_slope": 0.1,
|
"rep_pen_slope": 0.1,
|
||||||
"sampler_order": [
|
"sampler_order": [
|
||||||
|
6,
|
||||||
3,
|
3,
|
||||||
2,
|
2,
|
||||||
5,
|
5,
|
||||||
0,
|
0,
|
||||||
1,
|
1,
|
||||||
4,
|
4
|
||||||
6
|
|
||||||
]
|
]
|
||||||
}
|
}
|
@@ -1,21 +1,15 @@
|
|||||||
{
|
{
|
||||||
"file_version": 2,
|
|
||||||
"max_length": 1400,
|
"max_length": 1400,
|
||||||
"ikmax": 3000,
|
|
||||||
"genamt": 80,
|
"genamt": 80,
|
||||||
"ikgen": 200,
|
|
||||||
"rep_pen": 1.04,
|
|
||||||
"rep_pen_slope": 0.0,
|
|
||||||
"rep_pen_range": 1400,
|
|
||||||
"temp": 1,
|
"temp": 1,
|
||||||
"top_p": 1,
|
"top_p": 1,
|
||||||
"top_k": 0,
|
"top_k": 0,
|
||||||
"top_a": 0.0,
|
"top_a": 0.0,
|
||||||
"tfs": 0.97,
|
"tfs": 0.97,
|
||||||
"typical": 1.0,
|
"typical": 1.0,
|
||||||
"numseqs": 1,
|
"rep_pen": 1.04,
|
||||||
"fp32_model": false,
|
"rep_pen_slope": 0.0,
|
||||||
"modeldim": 2560,
|
"rep_pen_range": 1400,
|
||||||
"sampler_order": [
|
"sampler_order": [
|
||||||
6,
|
6,
|
||||||
0,
|
0,
|
||||||
@@ -24,23 +18,5 @@
|
|||||||
3,
|
3,
|
||||||
4,
|
4,
|
||||||
5
|
5
|
||||||
],
|
]
|
||||||
"newlinemode": "n",
|
|
||||||
"lazy_load": true,
|
|
||||||
"revision": null,
|
|
||||||
"selected_preset": "",
|
|
||||||
"horde_wait_time": 0,
|
|
||||||
"horde_queue_position": 0,
|
|
||||||
"horde_queue_size": 0,
|
|
||||||
"model": "pygmalion-1.3b",
|
|
||||||
"model_type": "gpt_neo",
|
|
||||||
"url": "https://api.inferkit.com/v1/models/standard/generate",
|
|
||||||
"oaiurl": "",
|
|
||||||
"oaiengines": "https://api.openai.com/v1/engines",
|
|
||||||
"colaburl": "/request",
|
|
||||||
"apikey": "",
|
|
||||||
"oaiapikey": "",
|
|
||||||
"configname": "pygmalion-1.3b",
|
|
||||||
"online_model": "",
|
|
||||||
"alt_multi_gen": false
|
|
||||||
}
|
}
|
22
public/KoboldAI Settings/RecoveredRuins.settings
Normal file
22
public/KoboldAI Settings/RecoveredRuins.settings
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"max_length": 100,
|
||||||
|
"genamt": 100,
|
||||||
|
"temp": 1,
|
||||||
|
"top_k": 0,
|
||||||
|
"top_p": 0.95,
|
||||||
|
"top_a": 0,
|
||||||
|
"typical": 1,
|
||||||
|
"tfs": 1,
|
||||||
|
"rep_pen": 1.1,
|
||||||
|
"rep_pen_range": 600,
|
||||||
|
"rep_pen_slope": 0,
|
||||||
|
"sampler_order": [
|
||||||
|
6,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
3,
|
||||||
|
4,
|
||||||
|
5
|
||||||
|
]
|
||||||
|
}
|
@@ -1,22 +1,22 @@
|
|||||||
{
|
{
|
||||||
"max_length": 2048,
|
"max_length": 2048,
|
||||||
"genamt": 100,
|
"genamt": 100,
|
||||||
"rep_pen": 1.1,
|
|
||||||
"rep_pen_range": 2048,
|
|
||||||
"rep_pen_slope": 0.2,
|
|
||||||
"sampler_order": [
|
|
||||||
5,
|
|
||||||
0,
|
|
||||||
2,
|
|
||||||
3,
|
|
||||||
1,
|
|
||||||
4,
|
|
||||||
6
|
|
||||||
],
|
|
||||||
"temp": 0.72,
|
"temp": 0.72,
|
||||||
"tfs": 1,
|
"tfs": 1,
|
||||||
"top_a": 0,
|
"top_a": 0,
|
||||||
"top_k": 0,
|
"top_k": 0,
|
||||||
"top_p": 0.73,
|
"top_p": 0.73,
|
||||||
"typical": 1
|
"typical": 1,
|
||||||
|
"rep_pen": 1.1,
|
||||||
|
"rep_pen_range": 2048,
|
||||||
|
"rep_pen_slope": 0.2,
|
||||||
|
"sampler_order": [
|
||||||
|
6,
|
||||||
|
5,
|
||||||
|
0,
|
||||||
|
2,
|
||||||
|
3,
|
||||||
|
1,
|
||||||
|
4
|
||||||
|
]
|
||||||
}
|
}
|
17
public/NovelAI Settings/Ace_of_Spades-Euterpe.settings
Normal file
17
public/NovelAI Settings/Ace_of_Spades-Euterpe.settings
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"order": [3, 2, 1, 0],
|
||||||
|
"temperature": 1.15,
|
||||||
|
"max_length": 60,
|
||||||
|
"min_length": 60,
|
||||||
|
"top_k": 0,
|
||||||
|
"top_p": 0.95,
|
||||||
|
"top_a": 1,
|
||||||
|
"typical_p": 1,
|
||||||
|
"tail_free_sampling": 0.8,
|
||||||
|
"repetition_penalty": 2.75,
|
||||||
|
"repetition_penalty_range": 2048,
|
||||||
|
"repetition_penalty_slope": 7.02,
|
||||||
|
"repetition_penalty_frequency": 0,
|
||||||
|
"repetition_penalty_presence": 0,
|
||||||
|
"max_context": 2048
|
||||||
|
}
|
17
public/NovelAI Settings/All_Nighter-Euterpe.settings
Normal file
17
public/NovelAI Settings/All_Nighter-Euterpe.settings
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"order": [1, 0, 3],
|
||||||
|
"temperature": 1.33,
|
||||||
|
"max_length": 60,
|
||||||
|
"min_length": 60,
|
||||||
|
"top_k": 13,
|
||||||
|
"top_p": 1,
|
||||||
|
"top_a": 1,
|
||||||
|
"typical_p": 1,
|
||||||
|
"tail_free_sampling": 0.836,
|
||||||
|
"repetition_penalty": 2.366,
|
||||||
|
"repetition_penalty_range": 400,
|
||||||
|
"repetition_penalty_slope": 0.33,
|
||||||
|
"repetition_penalty_frequency": 0.01,
|
||||||
|
"repetition_penalty_presence": 0,
|
||||||
|
"max_context": 2048
|
||||||
|
}
|
17
public/NovelAI Settings/Basic_Coherence-Euterpe.settings
Normal file
17
public/NovelAI Settings/Basic_Coherence-Euterpe.settings
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"order": [0, 1, 2, 3],
|
||||||
|
"temperature": 0.585,
|
||||||
|
"max_length": 60,
|
||||||
|
"min_length": 60,
|
||||||
|
"top_k": 0,
|
||||||
|
"top_p": 1,
|
||||||
|
"top_a": 1,
|
||||||
|
"typical_p": 1,
|
||||||
|
"tail_free_sampling": 0.87,
|
||||||
|
"repetition_penalty": 3.05,
|
||||||
|
"repetition_penalty_range": 2048,
|
||||||
|
"repetition_penalty_slope": 0.33,
|
||||||
|
"repetition_penalty_frequency": 0,
|
||||||
|
"repetition_penalty_presence": 0,
|
||||||
|
"max_context": 2048
|
||||||
|
}
|
@@ -1,13 +1,17 @@
|
|||||||
{
|
{
|
||||||
"order": [3, 0],
|
"order": [2, 1, 3, 0],
|
||||||
"temperature": 1.11,
|
"temperature": 0.63,
|
||||||
"max_length": 90,
|
"max_length": 90,
|
||||||
"min_length": 1,
|
"min_length": 1,
|
||||||
"tail_free_sampling": 0.68,
|
"tail_free_sampling": 0.975,
|
||||||
"repetition_penalty": 1.11,
|
"repetition_penalty": 1.148125,
|
||||||
"repetition_penalty_range": 320,
|
"repetition_penalty_range": 2048,
|
||||||
"repetition_penalty_frequency": 0,
|
"repetition_penalty_frequency": 0,
|
||||||
"repetition_penalty_presence": 0,
|
"repetition_penalty_presence": 0,
|
||||||
"repetition_penalty_slope": 0,
|
"repetition_penalty_slope": 0.09,
|
||||||
"max_context":2048
|
"max_context":2048,
|
||||||
}
|
"top_p": 0.975,
|
||||||
|
"top_k": 0,
|
||||||
|
"top_a": 1,
|
||||||
|
"typical_p": 1
|
||||||
|
}
|
||||||
|
@@ -1,13 +1,17 @@
|
|||||||
{
|
{
|
||||||
"order": [3, 0],
|
"order": [3, 4, 5, 2, 0],
|
||||||
"temperature": 1.7,
|
"temperature": 1.33,
|
||||||
"max_length": 90,
|
"max_length": 90,
|
||||||
"min_length": 1,
|
"min_length": 1,
|
||||||
"tail_free_sampling": 0.66,
|
"tail_free_sampling": 0.937,
|
||||||
"repetition_penalty": 1.06,
|
"repetition_penalty": 1.05,
|
||||||
"repetition_penalty_range": 340,
|
"repetition_penalty_range": 560,
|
||||||
"repetition_penalty_frequency": 0,
|
"repetition_penalty_frequency": 0,
|
||||||
"repetition_penalty_presence": 0,
|
"repetition_penalty_presence": 0,
|
||||||
"repetition_penalty_slope": 0,
|
"repetition_penalty_slope": 0.18,
|
||||||
"max_context": 2048
|
"max_context": 2048,
|
||||||
}
|
"top_p": 0.88,
|
||||||
|
"top_k": 0,
|
||||||
|
"top_a": 0.085,
|
||||||
|
"typical_p": 0.985
|
||||||
|
}
|
||||||
|
17
public/NovelAI Settings/Fandango-Euterpe.settings
Normal file
17
public/NovelAI Settings/Fandango-Euterpe.settings
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"order": [2, 1, 3, 0],
|
||||||
|
"temperature": 0.86,
|
||||||
|
"max_length": 60,
|
||||||
|
"min_length": 60,
|
||||||
|
"top_k": 20,
|
||||||
|
"top_p": 0.95,
|
||||||
|
"top_a": 1,
|
||||||
|
"typical_p": 1,
|
||||||
|
"tail_free_sampling": 1,
|
||||||
|
"repetition_penalty": 2.25,
|
||||||
|
"repetition_penalty_range": 2048,
|
||||||
|
"repetition_penalty_slope": 0.09,
|
||||||
|
"repetition_penalty_frequency": 0,
|
||||||
|
"repetition_penalty_presence": 0,
|
||||||
|
"max_context": 2048
|
||||||
|
}
|
17
public/NovelAI Settings/Genesis-Euterpe.settings
Normal file
17
public/NovelAI Settings/Genesis-Euterpe.settings
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"order": [2, 1, 3, 0],
|
||||||
|
"temperature": 0.63,
|
||||||
|
"max_length": 60,
|
||||||
|
"min_length": 60,
|
||||||
|
"top_k": 0,
|
||||||
|
"top_p": 0.975,
|
||||||
|
"top_a": 1,
|
||||||
|
"typical_p": 1,
|
||||||
|
"tail_free_sampling": 0.975,
|
||||||
|
"repetition_penalty": 2.975,
|
||||||
|
"repetition_penalty_range": 2048,
|
||||||
|
"repetition_penalty_slope": 0.09,
|
||||||
|
"repetition_penalty_frequency": 0,
|
||||||
|
"repetition_penalty_presence": 0,
|
||||||
|
"max_context":2048
|
||||||
|
}
|
17
public/NovelAI Settings/Low_Rider-Euterpe.settings
Normal file
17
public/NovelAI Settings/Low_Rider-Euterpe.settings
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"order": [2, 1, 3, 0],
|
||||||
|
"temperature": 0.94,
|
||||||
|
"max_length": 60,
|
||||||
|
"min_length": 60,
|
||||||
|
"top_k": 12,
|
||||||
|
"top_p": 1,
|
||||||
|
"top_a": 1,
|
||||||
|
"typical_p": 1,
|
||||||
|
"tail_free_sampling": 0.94,
|
||||||
|
"repetition_penalty": 2.66,
|
||||||
|
"repetition_penalty_range": 2048,
|
||||||
|
"repetition_penalty_slope": 0.18,
|
||||||
|
"repetition_penalty_frequency": 0.013,
|
||||||
|
"repetition_penalty_presence": 0,
|
||||||
|
"max_context": 2048
|
||||||
|
}
|
17
public/NovelAI Settings/Moonlit_Chronicler-Euterpe.settings
Normal file
17
public/NovelAI Settings/Moonlit_Chronicler-Euterpe.settings
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"order": [1, 5, 4, 3, 0],
|
||||||
|
"temperature": 1.25,
|
||||||
|
"max_length": 60,
|
||||||
|
"min_length": 60,
|
||||||
|
"top_k": 300,
|
||||||
|
"top_p": 1,
|
||||||
|
"top_a": 0.782,
|
||||||
|
"typical_p": 0.95,
|
||||||
|
"tail_free_sampling": 0.802,
|
||||||
|
"repetition_penalty": 2.075,
|
||||||
|
"repetition_penalty_range": 512,
|
||||||
|
"repetition_penalty_slope": 0.36,
|
||||||
|
"repetition_penalty_frequency": 0,
|
||||||
|
"repetition_penalty_presence": 0,
|
||||||
|
"max_context": 2048
|
||||||
|
}
|
17
public/NovelAI Settings/Morpho-Euterpe.settings
Normal file
17
public/NovelAI Settings/Morpho-Euterpe.settings
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"order": [0],
|
||||||
|
"temperature": 0.6889,
|
||||||
|
"max_length": 60,
|
||||||
|
"min_length": 60,
|
||||||
|
"top_k": 0,
|
||||||
|
"top_p": 1,
|
||||||
|
"top_a": 1,
|
||||||
|
"typical_p": 1,
|
||||||
|
"tail_free_sampling": 1,
|
||||||
|
"repetition_penalty": 1,
|
||||||
|
"repetition_penalty_range": 2048,
|
||||||
|
"repetition_penalty_slope": 0,
|
||||||
|
"repetition_penalty_frequency": 0.1,
|
||||||
|
"repetition_penalty_presence": 0,
|
||||||
|
"max_context": 2048
|
||||||
|
}
|
17
public/NovelAI Settings/Ouroborous-Euterpe.settings
Normal file
17
public/NovelAI Settings/Ouroborous-Euterpe.settings
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"order": [1, 0, 3],
|
||||||
|
"temperature": 1.07,
|
||||||
|
"max_length": 60,
|
||||||
|
"min_length": 60,
|
||||||
|
"top_k": 264,
|
||||||
|
"top_p": 1,
|
||||||
|
"top_a": 1,
|
||||||
|
"typical_p": 1,
|
||||||
|
"tail_free_sampling": 0.925,
|
||||||
|
"repetition_penalty": 2.165,
|
||||||
|
"repetition_penalty_range": 404,
|
||||||
|
"repetition_penalty_slope": 0.84,
|
||||||
|
"repetition_penalty_frequency": 0,
|
||||||
|
"repetition_penalty_presence": 0,
|
||||||
|
"max_context":2048
|
||||||
|
}
|
17
public/NovelAI Settings/Pro_Writer-Euterpe.settings
Normal file
17
public/NovelAI Settings/Pro_Writer-Euterpe.settings
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"order": [3, 0],
|
||||||
|
"temperature": 1.348,
|
||||||
|
"max_length": 60,
|
||||||
|
"min_length": 60,
|
||||||
|
"top_k": 64,
|
||||||
|
"top_p": 0.909,
|
||||||
|
"top_a": 1,
|
||||||
|
"typical_p": 1,
|
||||||
|
"tail_free_sampling": 0.688,
|
||||||
|
"repetition_penalty": 4.967,
|
||||||
|
"repetition_penalty_range": 2048,
|
||||||
|
"repetition_penalty_slope": 0.09,
|
||||||
|
"repetition_penalty_frequency": 0,
|
||||||
|
"repetition_penalty_presence": 0,
|
||||||
|
"max_context": 2048
|
||||||
|
}
|
22
public/TextGen Settings/Asterism.settings
Normal file
22
public/TextGen Settings/Asterism.settings
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"temp": 1.68,
|
||||||
|
"top_p": 0.17,
|
||||||
|
"top_k": 77,
|
||||||
|
"typical_p": 1,
|
||||||
|
"top_a": 0.42,
|
||||||
|
"tfs": 0.97,
|
||||||
|
"epsilon_cutoff": 0,
|
||||||
|
"eta_cutoff": 0,
|
||||||
|
"rep_pen": 1.02,
|
||||||
|
"no_repeat_ngram_size": 0,
|
||||||
|
"penalty_alpha": 0,
|
||||||
|
"num_beams": 1,
|
||||||
|
"length_penalty": 1,
|
||||||
|
"min_length": 0,
|
||||||
|
"encoder_rep_pen": 1,
|
||||||
|
"do_sample": true,
|
||||||
|
"early_stopping": false,
|
||||||
|
"mirostat_mode": 0,
|
||||||
|
"mirostat_tau": 5,
|
||||||
|
"mirostat_eta": 0.1
|
||||||
|
}
|
@@ -5,6 +5,8 @@
|
|||||||
"typical_p": 1,
|
"typical_p": 1,
|
||||||
"top_a": 0,
|
"top_a": 0,
|
||||||
"tfs": 1,
|
"tfs": 1,
|
||||||
|
"epsilon_cutoff": 0,
|
||||||
|
"eta_cutoff": 0,
|
||||||
"rep_pen": 4.5,
|
"rep_pen": 4.5,
|
||||||
"no_repeat_ngram_size": 2,
|
"no_repeat_ngram_size": 2,
|
||||||
"penalty_alpha": 0,
|
"penalty_alpha": 0,
|
||||||
@@ -13,5 +15,8 @@
|
|||||||
"min_length": 200,
|
"min_length": 200,
|
||||||
"encoder_rep_pen": 1,
|
"encoder_rep_pen": 1,
|
||||||
"do_sample": true,
|
"do_sample": true,
|
||||||
"early_stopping": true
|
"early_stopping": true,
|
||||||
|
"mirostat_mode": 0,
|
||||||
|
"mirostat_tau": 5,
|
||||||
|
"mirostat_eta": 0.1
|
||||||
}
|
}
|
||||||
|
22
public/TextGen Settings/Big O.settings
Normal file
22
public/TextGen Settings/Big O.settings
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"temp": 0.87,
|
||||||
|
"top_p": 0.99,
|
||||||
|
"top_k": 85,
|
||||||
|
"typical_p": 0.68,
|
||||||
|
"top_a": 0,
|
||||||
|
"tfs": 0.68,
|
||||||
|
"epsilon_cutoff": 0,
|
||||||
|
"eta_cutoff": 0,
|
||||||
|
"rep_pen": 1.01,
|
||||||
|
"no_repeat_ngram_size": 0,
|
||||||
|
"penalty_alpha": 0,
|
||||||
|
"num_beams": 1,
|
||||||
|
"length_penalty": 1,
|
||||||
|
"min_length": 0,
|
||||||
|
"encoder_rep_pen": 1,
|
||||||
|
"do_sample": true,
|
||||||
|
"early_stopping": false,
|
||||||
|
"mirostat_mode": 0,
|
||||||
|
"mirostat_tau": 5,
|
||||||
|
"mirostat_eta": 0.1
|
||||||
|
}
|
@@ -5,6 +5,8 @@
|
|||||||
"typical_p": 1,
|
"typical_p": 1,
|
||||||
"top_a": 0,
|
"top_a": 0,
|
||||||
"tfs": 1,
|
"tfs": 1,
|
||||||
|
"epsilon_cutoff": 0,
|
||||||
|
"eta_cutoff": 0,
|
||||||
"rep_pen": 1,
|
"rep_pen": 1,
|
||||||
"no_repeat_ngram_size": 0,
|
"no_repeat_ngram_size": 0,
|
||||||
"penalty_alpha": 0.6,
|
"penalty_alpha": 0.6,
|
||||||
@@ -13,5 +15,8 @@
|
|||||||
"min_length": 0,
|
"min_length": 0,
|
||||||
"encoder_rep_pen": 1,
|
"encoder_rep_pen": 1,
|
||||||
"do_sample": false,
|
"do_sample": false,
|
||||||
"early_stopping": false
|
"early_stopping": false,
|
||||||
|
"mirostat_mode": 0,
|
||||||
|
"mirostat_tau": 5,
|
||||||
|
"mirostat_eta": 0.1
|
||||||
}
|
}
|
||||||
|
@@ -5,6 +5,8 @@
|
|||||||
"typical_p": 1,
|
"typical_p": 1,
|
||||||
"top_a": 0,
|
"top_a": 0,
|
||||||
"tfs": 1,
|
"tfs": 1,
|
||||||
|
"epsilon_cutoff": 0,
|
||||||
|
"eta_cutoff": 0,
|
||||||
"rep_pen": 1.2,
|
"rep_pen": 1.2,
|
||||||
"no_repeat_ngram_size": 0,
|
"no_repeat_ngram_size": 0,
|
||||||
"penalty_alpha": 0,
|
"penalty_alpha": 0,
|
||||||
@@ -13,5 +15,8 @@
|
|||||||
"min_length": 0,
|
"min_length": 0,
|
||||||
"encoder_rep_pen": 1,
|
"encoder_rep_pen": 1,
|
||||||
"do_sample": true,
|
"do_sample": true,
|
||||||
"early_stopping": false
|
"early_stopping": false,
|
||||||
|
"mirostat_mode": 0,
|
||||||
|
"mirostat_tau": 5,
|
||||||
|
"mirostat_eta": 0.1
|
||||||
}
|
}
|
||||||
|
@@ -5,6 +5,8 @@
|
|||||||
"typical_p": 1,
|
"typical_p": 1,
|
||||||
"top_a": 0,
|
"top_a": 0,
|
||||||
"tfs": 1,
|
"tfs": 1,
|
||||||
|
"epsilon_cutoff": 0,
|
||||||
|
"eta_cutoff": 0,
|
||||||
"rep_pen": 1,
|
"rep_pen": 1,
|
||||||
"no_repeat_ngram_size": 0,
|
"no_repeat_ngram_size": 0,
|
||||||
"penalty_alpha": 0,
|
"penalty_alpha": 0,
|
||||||
@@ -13,5 +15,8 @@
|
|||||||
"min_length": 0,
|
"min_length": 0,
|
||||||
"encoder_rep_pen": 1,
|
"encoder_rep_pen": 1,
|
||||||
"do_sample": false,
|
"do_sample": false,
|
||||||
"early_stopping": false
|
"early_stopping": false,
|
||||||
|
"mirostat_mode": 0,
|
||||||
|
"mirostat_tau": 5,
|
||||||
|
"mirostat_eta": 0.1
|
||||||
}
|
}
|
||||||
|
22
public/TextGen Settings/Divine Intellect.settings
Normal file
22
public/TextGen Settings/Divine Intellect.settings
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"temp": 1.31,
|
||||||
|
"top_p": 0.14,
|
||||||
|
"top_k": 49,
|
||||||
|
"typical_p": 1,
|
||||||
|
"top_a": 0.52,
|
||||||
|
"tfs": 1,
|
||||||
|
"epsilon_cutoff": 1.49,
|
||||||
|
"eta_cutoff": 10.42,
|
||||||
|
"rep_pen": 1.17,
|
||||||
|
"no_repeat_ngram_size": 0,
|
||||||
|
"penalty_alpha": 0,
|
||||||
|
"num_beams": 1,
|
||||||
|
"length_penalty": 1,
|
||||||
|
"min_length": 0,
|
||||||
|
"encoder_rep_pen": 1,
|
||||||
|
"do_sample": true,
|
||||||
|
"early_stopping": false,
|
||||||
|
"mirostat_mode": 0,
|
||||||
|
"mirostat_tau": 5,
|
||||||
|
"mirostat_eta": 0.1
|
||||||
|
}
|
@@ -5,6 +5,8 @@
|
|||||||
"typical_p": 0.19,
|
"typical_p": 0.19,
|
||||||
"top_a": 0,
|
"top_a": 0,
|
||||||
"tfs": 1,
|
"tfs": 1,
|
||||||
|
"epsilon_cutoff": 0,
|
||||||
|
"eta_cutoff": 0,
|
||||||
"rep_pen": 1.1,
|
"rep_pen": 1.1,
|
||||||
"no_repeat_ngram_size": 0,
|
"no_repeat_ngram_size": 0,
|
||||||
"penalty_alpha": 0,
|
"penalty_alpha": 0,
|
||||||
@@ -13,5 +15,8 @@
|
|||||||
"min_length": 0,
|
"min_length": 0,
|
||||||
"encoder_rep_pen": 1,
|
"encoder_rep_pen": 1,
|
||||||
"do_sample": true,
|
"do_sample": true,
|
||||||
"early_stopping": false
|
"early_stopping": false,
|
||||||
|
"mirostat_mode": 0,
|
||||||
|
"mirostat_tau": 5,
|
||||||
|
"mirostat_eta": 0.1
|
||||||
}
|
}
|
||||||
|
@@ -5,6 +5,8 @@
|
|||||||
"typical_p": 0.6,
|
"typical_p": 0.6,
|
||||||
"top_a": 0,
|
"top_a": 0,
|
||||||
"tfs": 1,
|
"tfs": 1,
|
||||||
|
"epsilon_cutoff": 0,
|
||||||
|
"eta_cutoff": 0,
|
||||||
"rep_pen": 1.1,
|
"rep_pen": 1.1,
|
||||||
"no_repeat_ngram_size": 0,
|
"no_repeat_ngram_size": 0,
|
||||||
"penalty_alpha": 0,
|
"penalty_alpha": 0,
|
||||||
@@ -13,5 +15,8 @@
|
|||||||
"min_length": 0,
|
"min_length": 0,
|
||||||
"encoder_rep_pen": 1,
|
"encoder_rep_pen": 1,
|
||||||
"do_sample": true,
|
"do_sample": true,
|
||||||
"early_stopping": false
|
"early_stopping": false,
|
||||||
|
"mirostat_mode": 0,
|
||||||
|
"mirostat_tau": 5,
|
||||||
|
"mirostat_eta": 0.1
|
||||||
}
|
}
|
||||||
|
@@ -5,6 +5,8 @@
|
|||||||
"typical_p": 1,
|
"typical_p": 1,
|
||||||
"top_a": 0,
|
"top_a": 0,
|
||||||
"tfs": 1,
|
"tfs": 1,
|
||||||
|
"epsilon_cutoff": 0,
|
||||||
|
"eta_cutoff": 0,
|
||||||
"rep_pen": 1.18,
|
"rep_pen": 1.18,
|
||||||
"no_repeat_ngram_size": 0,
|
"no_repeat_ngram_size": 0,
|
||||||
"penalty_alpha": 0,
|
"penalty_alpha": 0,
|
||||||
@@ -13,5 +15,8 @@
|
|||||||
"min_length": 200,
|
"min_length": 200,
|
||||||
"encoder_rep_pen": 1,
|
"encoder_rep_pen": 1,
|
||||||
"do_sample": true,
|
"do_sample": true,
|
||||||
"early_stopping": false
|
"early_stopping": false,
|
||||||
|
"mirostat_mode": 0,
|
||||||
|
"mirostat_tau": 5,
|
||||||
|
"mirostat_eta": 0.1
|
||||||
}
|
}
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user