Get appropriate tokenizer for WAI and handle streaming rejection properly

This commit is contained in:
Cohee
2023-06-10 18:41:02 +03:00
parent ccefee6cee
commit 46c1fde423
2 changed files with 48 additions and 21 deletions

View File

@ -1775,22 +1775,22 @@ class StreamingProcessor {
await delay(1); // delay for message to be rendered await delay(1); // delay for message to be rendered
} }
for await (const text of this.generator()) { try {
if (this.isStopped) { for await (const text of this.generator()) {
this.onStopStreaming(); if (this.isStopped) {
return; this.onStopStreaming();
} return;
}
try {
this.result = text; this.result = text;
this.onProgressStreaming(this.messageId, message_already_generated + text); this.onProgressStreaming(this.messageId, message_already_generated + text);
} }
catch (err) { }
console.error(err); catch (err) {
this.onErrorStreaming(); console.error(err);
this.isStopped = true; this.onErrorStreaming();
return; this.isStopped = true;
} return;
} }
this.isFinished = true; this.isFinished = true;
@ -6545,7 +6545,7 @@ $(document).ready(function () {
if (this_chid !== undefined || selected_group) { if (this_chid !== undefined || selected_group) {
// Previously system messages we're allowed to be edited // Previously system messages we're allowed to be edited
/*const message = $(this).closest(".mes"); /*const message = $(this).closest(".mes");
if (message.data("isSystem")) { if (message.data("isSystem")) {
return; return;
}*/ }*/

View File

@ -591,7 +591,7 @@ async function sendWindowAIRequest(openai_msgs_tosend, signal, stream) {
const onStreamResult = (res, err) => { const onStreamResult = (res, err) => {
if (err) { if (err) {
handleWindowError(err); return;
} }
const thisContent = res?.message?.content; const thisContent = res?.message?.content;
@ -624,9 +624,9 @@ async function sendWindowAIRequest(openai_msgs_tosend, signal, stream) {
resolve && resolve(content); resolve && resolve(content);
}) })
.catch((err) => { .catch((err) => {
handleWindowError(err);
finished = true; finished = true;
reject && reject(err); reject && reject(err);
handleWindowError(err);
}); });
}; };
@ -884,12 +884,7 @@ function countTokens(messages, full = false) {
token_count += cachedCount; token_count += cachedCount;
} }
else { else {
let model = oai_settings.openai_model; let model = getTokenizerModel();
// We don't have a Claude tokenizer for JS yet. Turbo 3.5 should be able to handle this.
if (oai_settings.chat_completion_source == chat_completion_sources.CLAUDE) {
model = 'gpt-3.5-turbo';
}
jQuery.ajax({ jQuery.ajax({
async: false, async: false,
@ -911,6 +906,38 @@ function countTokens(messages, full = false) {
return token_count; return token_count;
} }
function getTokenizerModel() {
// OpenAI models always provide their own tokenizer
if (oai_settings.chat_completion_source == chat_completion_sources.OPENAI) {
return oai_settings.openai_model;
}
const turboTokenizer = 'gpt-3.5-turbo'
// Select correct tokenizer for WindowAI proxies
if (oai_settings.chat_completion_source == chat_completion_sources.WINDOWAI) {
if (oai_settings.windowai_model.includes('gpt-4')) {
return 'gpt-4';
}
else if (oai_settings.windowai_model.includes('gpt-3.5-turbo')) {
return turboTokenizer;
}
else if (oai_settings.windowai_model.includes('claude')) {
return turboTokenizer;
}
else if (oai_settings.windowai_model.includes('GPT-NeoXT')) {
return 'gpt2';
}
}
// We don't have a Claude tokenizer for JS yet. Turbo 3.5 should be able to handle this.
if (oai_settings.chat_completion_source == chat_completion_sources.CLAUDE) {
return turboTokenizer;
}
// Default to Turbo 3.5
return turboTokenizer;
}
function loadOpenAISettings(data, settings) { function loadOpenAISettings(data, settings) {
openai_setting_names = data.openai_setting_names; openai_setting_names = data.openai_setting_names;
openai_settings = data.openai_settings; openai_settings = data.openai_settings;