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,23 +1775,23 @@ class StreamingProcessor {
await delay(1); // delay for message to be rendered await delay(1); // delay for message to be rendered
} }
try {
for await (const text of this.generator()) { for await (const text of this.generator()) {
if (this.isStopped) { if (this.isStopped) {
this.onStopStreaming(); this.onStopStreaming();
return; 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) { catch (err) {
console.error(err); console.error(err);
this.onErrorStreaming(); this.onErrorStreaming();
this.isStopped = true; this.isStopped = true;
return; return;
} }
}
this.isFinished = true; this.isFinished = true;
return this.result; return this.result;

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;