sillytavern
Advanced tools
Comparing version 1.4.8 to 1.4.9
21
faq.md
@@ -36,2 +36,4 @@ Good morning, sirs! This page aims to document some things that would bloat the README too much. | ||
|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!| | ||
|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!| | ||
@@ -42,4 +44,6 @@ ## Q: So I should use GPT-4. It's a no-brainer, right? | ||
But not so fast. GPT-4 is the state of the art, but also the most expensive API to use. It will easily end up costing you 15 cents 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. | ||
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. | ||
@@ -55,6 +59,6 @@ | ||
1. Paid services (aka cloud, proprietary, closed) | ||
2. Self-hosted (aka local, free, open-source) | ||
1. Web services (aka cloud, proprietary, closed) | ||
2. Self-hosted (aka local, free, open-source). Unlimited free use if you can run it. | ||
Paid models are a black box. You're relying on some company's technology and servers, and paying them money for convenient access. The APIs are subject to various rules, 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. | ||
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. | ||
@@ -64,8 +68,8 @@ 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, though somewhat resistant to it. | ||
* OpenAI GPT-4: state of the art. Allows NSFW, though somewhat resistant to it. You pay per use. | ||
* OpenAI GPT 3.5 Turbo: nowhere close to GPT-4, but serviceable. Allows NSFW. | ||
* NovelAI: untested by me | ||
* Anthropic's Claude: closest thing to GPT-4, way ahead of 3.5 Turbo, but oversensitive and refuses to engage in "harmful content". It can refuse perfectly basic stuff like asking a character to go to an empty office with you, because "it cannot provide responses that involve criminal activities" (I guess breaking and entering is too taboo for Claude?). You have to customize your system prompt to break its taboos. Also, you must apply for early access, but I think they're only giving it to companies. So make sure to say you're a company or AI researcher. https://console.anthropic.com/docs/access | ||
* 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: closest thing to GPT-4, way ahead of 3.5 Turbo, but oversensitive and refuses to engage in "harmful content". It can refuse perfectly basic stuff like asking a character to go to an empty office with you, because "it cannot provide responses that involve criminal activities" (I guess breaking and entering is too taboo for Claude?). You have to customize your system prompt to break its taboos. Also, you must apply for early access, but I think they're only giving it to companies. So make sure to say you're a company or AI researcher. 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 cheap and fast but lower quality alternative to Claude. Basically the GPT 3.5 Turbo of Anthropic. | ||
* Poe: gives free Claude Instant access. Mild NSFW allowed. It rambles a lot. | ||
* Poe: gives a free Claude Instant access. Very mild PG-13 NSFW allowed. It rambles a lot. | ||
@@ -81,3 +85,2 @@ ### Self-hosted AIs | ||
## Q: I'm clueless. Just spoonfeed me the easiest and fastest way I can start using this. | ||
@@ -84,0 +87,0 @@ 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. |
@@ -26,3 +26,4 @@ { | ||
"webp-converter": "2.3.2", | ||
"ws": "^8.13.0" | ||
"ws": "^8.13.0", | ||
"yargs": "^17.7.1" | ||
}, | ||
@@ -35,3 +36,3 @@ "overrides": { | ||
"name": "sillytavern", | ||
"version": "1.4.8", | ||
"version": "1.4.9", | ||
"scripts": { | ||
@@ -38,0 +39,0 @@ "start": "node server.js" |
@@ -322,19 +322,24 @@ /* | ||
const botList = viewer.availableBots; | ||
const retries = 2; | ||
const bots = {}; | ||
for (const bot of botList.filter(x => x.deletionState == 'not_deleted')) { | ||
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]; | ||
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; | ||
} | ||
else { | ||
logger.info(`Downloading ${url}`); | ||
r = await request_with_retries(() => this.session.get(url)); | ||
cached_bots[url] = r; | ||
catch { | ||
console.log(`Could not load bot: ${bot.displayName}`); | ||
} | ||
const chatData = r.data.pageProps.payload.chatOfBotDisplayName; | ||
bots[chatData.defaultBotObject.nickname] = chatData; | ||
} | ||
@@ -341,0 +346,0 @@ |
@@ -269,3 +269,2 @@ import { saveSettingsDebounced, token } from "../../../script.js"; | ||
async function getExpressionsList() { | ||
console.log('getting expressions list'); | ||
// get something for offline mode (default images) | ||
@@ -272,0 +271,0 @@ if (!modules.includes('classify')) { |
@@ -217,3 +217,5 @@ import { | ||
template.attr("grid", group.id); | ||
template.find(".ch_name").text(group.name); | ||
template.find(".ch_name").html(group.name); | ||
group.fav ? template.find(".group_fav_icon").show() : template.find(".group_fav_icon").hide(); | ||
template.find(".ch_fav").val(group.fav); | ||
$("#rm_print_characters_block").prepend(template); | ||
@@ -699,3 +701,2 @@ updateGroupAvatar(group); | ||
const groupName = group?.name ?? ""; | ||
$("#rm_group_chat_name").val(groupName); | ||
@@ -758,2 +759,3 @@ $("#rm_group_chat_name").off(); | ||
$("#rm_group_allow_self_responses").prop("checked", group && group.allow_self_responses); | ||
$("#rm_group_fav").prop("checked", group && group.fav); | ||
@@ -780,7 +782,18 @@ // bottom buttons | ||
$("#rm_group_fav").off(); | ||
$("#rm_group_fav").on("input", async function(){ | ||
if (group) { | ||
let _thisGroup = groups.find((x) => x.id == chat_id); | ||
const value = $(this).prop("checked"); | ||
_thisGroup.fav = value; | ||
await editGroup(chat_id); | ||
} | ||
}); | ||
$("#rm_group_allow_self_responses").off(); | ||
$("#rm_group_allow_self_responses").on("input", async function () { | ||
if (group) { | ||
let _thisGroup = groups.find((x) => x.id == chat_id); | ||
const value = $(this).prop("checked"); | ||
group.allow_self_responses = value; | ||
_thisGroup.allow_self_responses = value; | ||
await editGroup(chat_id); | ||
@@ -836,2 +849,5 @@ } | ||
await getGroupChat(id); | ||
//to avoid the filter being lit up yellow and left at true while the list of character and group reseted. | ||
$("#filter_by_fav").removeClass("fav_on"); | ||
filterByFav = false; | ||
} | ||
@@ -860,2 +876,3 @@ | ||
let allow_self_responses = !!$("#rm_group_allow_self_responses").prop("checked"); | ||
let fav = $("#rm_group_fav").prop("checked"); | ||
let activation_strategy = $('input[name="rm_group_activation_strategy"]:checked').val() ?? group_activation_strategy.NATURAL; | ||
@@ -886,2 +903,3 @@ const members = $("#rm_group_members .group_member") | ||
chat_metadata: {}, | ||
fav: fav, | ||
}), | ||
@@ -888,0 +906,0 @@ }); |
@@ -32,5 +32,5 @@ import { | ||
ban_eos_token: false, | ||
skip_special_tokens: true, | ||
streaming: false, | ||
fn_index: 43, | ||
skip_special_tokens: true, | ||
streaming_url: 'ws://127.0.0.1:5005/api/v1/stream', | ||
}; | ||
@@ -58,4 +58,5 @@ | ||
"ban_eos_token", | ||
"fn_index", | ||
"skip_special_tokens", | ||
"streaming", | ||
"streaming_url", | ||
]; | ||
@@ -114,2 +115,3 @@ | ||
const isCheckbox = $(this).attr('type') == 'checkbox'; | ||
const isText = $(this).attr('type') == 'text'; | ||
const id = $(this).attr("x-setting-id"); | ||
@@ -121,2 +123,6 @@ | ||
} | ||
else if (isText) { | ||
const value = $(this).val(); | ||
textgenerationwebui_settings[id] = value; | ||
} | ||
else { | ||
@@ -139,2 +145,3 @@ const value = parseFloat($(this).val()); | ||
const isCheckbox = $(`#${i}_textgenerationwebui`).attr('type') == 'checkbox'; | ||
const isText = $(`#${i}_textgenerationwebui`).attr('type') == 'text'; | ||
if (isCheckbox) { | ||
@@ -144,2 +151,5 @@ const val = Boolean(value); | ||
} | ||
else if (isText) { | ||
$(`#${i}_textgenerationwebui`).val(value); | ||
} | ||
else { | ||
@@ -159,6 +169,6 @@ const val = parseFloat(value); | ||
headers: { | ||
'Content-Type': 'application/json', | ||
'X-CSRF-Token': token, | ||
'Content-Type': 'application/json', | ||
'X-Response-Streaming': true, | ||
'X-Gradio-Streaming-Function': textgenerationwebui_settings.fn_index, | ||
'X-Streaming-URL': textgenerationwebui_settings.streaming_url, | ||
}, | ||
@@ -177,19 +187,4 @@ body: JSON.stringify(generate_data), | ||
let response = decoder.decode(value); | ||
let delta = ''; | ||
getMessage += response; | ||
try { | ||
delta = response.split('\n').map(x => { | ||
try { | ||
return JSON.parse(x).delta; | ||
} catch { | ||
return ''; | ||
} | ||
}).join(''); | ||
} | ||
catch { | ||
delta = ''; | ||
} | ||
getMessage += delta; | ||
if (done) { | ||
@@ -196,0 +191,0 @@ return; |
@@ -26,6 +26,2 @@ # SillyTavern | ||
If that didn't work, try the legacy link: | ||
https://colab.research.google.com/github/Cohee1207/TavernAI-extras/blob/main/colab/GPU.ipynb | ||
## Mobile support | ||
@@ -128,3 +124,3 @@ | ||
You will now be able to connect from other devices. | ||
You will now be able to connect from other devices. | ||
@@ -148,2 +144,6 @@ ### Managing whitelisted IPs | ||
### 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. | ||
- 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? | ||
@@ -150,0 +150,0 @@ |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
35725172
339
33024
25
10
49
+ Addedyargs@^17.7.1
+ Addedansi-regex@5.0.1(transitive)
+ Addedansi-styles@4.3.0(transitive)
+ Addedcliui@8.0.1(transitive)
+ Addedcolor-convert@2.0.1(transitive)
+ Addedcolor-name@1.1.4(transitive)
+ Addedemoji-regex@8.0.0(transitive)
+ Addedescalade@3.2.0(transitive)
+ Addedget-caller-file@2.0.5(transitive)
+ Addedis-fullwidth-code-point@3.0.0(transitive)
+ Addedrequire-directory@2.1.1(transitive)
+ Addedstring-width@4.2.3(transitive)
+ Addedstrip-ansi@6.0.1(transitive)
+ Addedwrap-ansi@7.0.0(transitive)
+ Addedy18n@5.0.8(transitive)
+ Addedyargs@17.7.2(transitive)
+ Addedyargs-parser@21.1.1(transitive)