mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-06-05 21:59:27 +02:00
Merge branch 'dev' of http://github.com/cohee1207/SillyTavern into dev
This commit is contained in:
52
server.js
52
server.js
@ -133,6 +133,20 @@ async function countTokensLlama(text) {
|
||||
return ids.length;
|
||||
}
|
||||
|
||||
const tokenizersCache = {};
|
||||
|
||||
function getTiktokenTokenizer(model) {
|
||||
if (tokenizersCache[model]) {
|
||||
console.log('Using the cached tokenizer instance for', model);
|
||||
return tokenizersCache[model];
|
||||
}
|
||||
|
||||
const tokenizer = tiktoken.encoding_for_model(model);
|
||||
console.log('Instantiated the tokenizer for', model);
|
||||
tokenizersCache[model] = tokenizer;
|
||||
return tokenizer;
|
||||
}
|
||||
|
||||
function humanizedISO8601DateTime() {
|
||||
let baseDate = new Date(Date.now());
|
||||
let humanYear = baseDate.getFullYear();
|
||||
@ -381,6 +395,7 @@ app.post("/generate_textgenerationwebui", jsonParser, async function (request, r
|
||||
|
||||
if (!!request.header('X-Response-Streaming')) {
|
||||
let isStreamingStopped = false;
|
||||
request.socket.removeAllListeners('close');
|
||||
request.socket.on('close', function () {
|
||||
isStreamingStopped = true;
|
||||
});
|
||||
@ -674,6 +689,29 @@ app.post("/createcharacter", urlencodedParser, function (request, response) {
|
||||
}
|
||||
});
|
||||
|
||||
app.post('/renamechat', jsonParser, async function (request, response) {
|
||||
if (!request.body || !request.body.original_file || !request.body.renamed_file) {
|
||||
return response.sendStatus(400);
|
||||
}
|
||||
|
||||
const pathToFolder = request.body.is_group
|
||||
? directories.groupChats
|
||||
: path.join(directories.chats, String(request.body.avatar_url).replace('.png', ''));
|
||||
const pathToOriginalFile = path.join(pathToFolder, request.body.original_file);
|
||||
const pathToRenamedFile = path.join(pathToFolder, request.body.renamed_file);
|
||||
console.log('Old chat name', pathToOriginalFile);
|
||||
console.log('New chat name', pathToRenamedFile);
|
||||
|
||||
if (!fs.existsSync(pathToOriginalFile) || fs.existsSync(pathToRenamedFile)) {
|
||||
console.log('Either Source or Destination files are not available');
|
||||
return response.status(400).send({ error: true });
|
||||
}
|
||||
|
||||
console.log('Successfully renamed.');
|
||||
fs.renameSync(pathToOriginalFile, pathToRenamedFile);
|
||||
return response.send({ ok: true });
|
||||
});
|
||||
|
||||
app.post("/renamecharacter", jsonParser, async function (request, response) {
|
||||
if (!request.body.avatar_url || !request.body.new_name) {
|
||||
return response.sendStatus(400);
|
||||
@ -843,7 +881,7 @@ async function charaRead(img_url, input_format) {
|
||||
description = exif_data['UserComment'].value[0];
|
||||
}
|
||||
try {
|
||||
JSON.parse(description);
|
||||
json5.parse(description);
|
||||
char_data = description;
|
||||
} catch {
|
||||
const byteArr = description.split(",").map(Number);
|
||||
@ -1962,6 +2000,7 @@ app.post('/generate_poe', jsonParser, async (request, response) => {
|
||||
|
||||
if (streaming) {
|
||||
let isStreamingStopped = false;
|
||||
request.socket.removeAllListeners('close');
|
||||
request.socket.on('close', function () {
|
||||
isStreamingStopped = true;
|
||||
client.abortController.abort();
|
||||
@ -2220,7 +2259,7 @@ app.post("/openai_bias", jsonParser, async function (request, response) {
|
||||
|
||||
let result = {};
|
||||
|
||||
const tokenizer = tiktoken.encoding_for_model(request.query.model === 'gpt-4-0314' ? 'gpt-4' : request.query.model);
|
||||
const tokenizer = getTiktokenTokenizer(request.query.model === 'gpt-4-0314' ? 'gpt-4' : request.query.model);
|
||||
|
||||
for (const entry of request.body) {
|
||||
if (!entry || !entry.text) {
|
||||
@ -2234,7 +2273,8 @@ app.post("/openai_bias", jsonParser, async function (request, response) {
|
||||
}
|
||||
}
|
||||
|
||||
tokenizer.free();
|
||||
// not needed for cached tokenizers
|
||||
//tokenizer.free();
|
||||
return response.send(result);
|
||||
});
|
||||
|
||||
@ -2289,6 +2329,7 @@ app.post("/generate_openai", jsonParser, function (request, response_generate_op
|
||||
const api_url = new URL(request.body.reverse_proxy || api_openai).toString();
|
||||
|
||||
const controller = new AbortController();
|
||||
request.socket.removeAllListeners('close');
|
||||
request.socket.on('close', function () {
|
||||
controller.abort();
|
||||
});
|
||||
@ -2383,7 +2424,7 @@ app.post("/tokenize_openai", jsonParser, function (request, response_tokenize_op
|
||||
const tokensPerMessage = request.query.model.includes('gpt-4') ? 3 : 4;
|
||||
const tokensPadding = 3;
|
||||
|
||||
const tokenizer = tiktoken.encoding_for_model(request.query.model === 'gpt-4-0314' ? 'gpt-4' : request.query.model);
|
||||
const tokenizer = getTiktokenTokenizer(request.query.model === 'gpt-4-0314' ? 'gpt-4' : request.query.model);
|
||||
|
||||
let num_tokens = 0;
|
||||
for (const msg of request.body) {
|
||||
@ -2397,7 +2438,8 @@ app.post("/tokenize_openai", jsonParser, function (request, response_tokenize_op
|
||||
}
|
||||
num_tokens += tokensPadding;
|
||||
|
||||
tokenizer.free();
|
||||
// not needed for cached tokenizers
|
||||
//tokenizer.free();
|
||||
|
||||
response_tokenize_openai.send({ "token_count": num_tokens });
|
||||
});
|
||||
|
Reference in New Issue
Block a user