mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-06-05 21:59:27 +02:00
Stop any request. Part 2 (still WIP)
This commit is contained in:
@ -1726,6 +1726,7 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject,
|
|||||||
setGenerationProgress(0);
|
setGenerationProgress(0);
|
||||||
tokens_already_generated = 0;
|
tokens_already_generated = 0;
|
||||||
generation_started = new Date();
|
generation_started = new Date();
|
||||||
|
abortController = new AbortController();
|
||||||
|
|
||||||
const isImpersonate = type == "impersonate";
|
const isImpersonate = type == "impersonate";
|
||||||
const isInstruct = power_user.instruct.enabled;
|
const isInstruct = power_user.instruct.enabled;
|
||||||
@ -2226,7 +2227,6 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject,
|
|||||||
let generate_url = getGenerateUrl();
|
let generate_url = getGenerateUrl();
|
||||||
console.log('rungenerate calling API');
|
console.log('rungenerate calling API');
|
||||||
|
|
||||||
abortController = new AbortController();
|
|
||||||
showStopButton();
|
showStopButton();
|
||||||
|
|
||||||
if (main_api == 'openai') {
|
if (main_api == 'openai') {
|
||||||
@ -2238,7 +2238,7 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (main_api == 'koboldhorde') {
|
else if (main_api == 'koboldhorde') {
|
||||||
generateHorde(finalPromt, generate_data).then(onSuccess).catch(onError);
|
generateHorde(finalPromt, generate_data, abortController.signal).then(onSuccess).catch(onError);
|
||||||
}
|
}
|
||||||
else if (main_api == 'poe') {
|
else if (main_api == 'poe') {
|
||||||
if (isStreamingEnabled() && type !== 'quiet') {
|
if (isStreamingEnabled() && type !== 'quiet') {
|
||||||
@ -2421,12 +2421,13 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject,
|
|||||||
};
|
};
|
||||||
|
|
||||||
function onError(exception) {
|
function onError(exception) {
|
||||||
hideStopButton();
|
|
||||||
reject(exception);
|
reject(exception);
|
||||||
$("#send_textarea").removeAttr('disabled');
|
$("#send_textarea").removeAttr('disabled');
|
||||||
is_send_press = false;
|
is_send_press = false;
|
||||||
activateSendButtons();
|
activateSendButtons();
|
||||||
|
showSwipeButtons();
|
||||||
setGenerationProgress(0);
|
setGenerationProgress(0);
|
||||||
|
$('.mes_buttons:last').show();
|
||||||
console.log(exception);
|
console.log(exception);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -6519,9 +6520,9 @@ $(document).ready(function () {
|
|||||||
streamingProcessor.onStopStreaming();
|
streamingProcessor.onStopStreaming();
|
||||||
streamingProcessor = null;
|
streamingProcessor = null;
|
||||||
}
|
}
|
||||||
if (!isStreamingEnabled() && abortController) {
|
if (abortController) {
|
||||||
abortController.abort();
|
abortController.abort();
|
||||||
abortController = null;
|
hideStopButton();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -79,7 +79,7 @@ async function adjustHordeGenerationParams(max_context_length, max_length) {
|
|||||||
return { maxContextLength, maxLength };
|
return { maxContextLength, maxLength };
|
||||||
}
|
}
|
||||||
|
|
||||||
async function generateHorde(prompt, params) {
|
async function generateHorde(prompt, params, signal) {
|
||||||
validateHordeModel();
|
validateHordeModel();
|
||||||
delete params.prompt;
|
delete params.prompt;
|
||||||
|
|
||||||
@ -119,6 +119,16 @@ async function generateHorde(prompt, params) {
|
|||||||
console.log(`Horde task id = ${task_id}`);
|
console.log(`Horde task id = ${task_id}`);
|
||||||
|
|
||||||
for (let retryNumber = 0; retryNumber < MAX_RETRIES; retryNumber++) {
|
for (let retryNumber = 0; retryNumber < MAX_RETRIES; retryNumber++) {
|
||||||
|
if (signal.aborted) {
|
||||||
|
await fetch(`https://horde.koboldai.net/api/v2/generate/text/status/${task_id}`, {
|
||||||
|
method: 'DELETE',
|
||||||
|
headers: {
|
||||||
|
"Client-Agent": CLIENT_VERSION,
|
||||||
|
}
|
||||||
|
});
|
||||||
|
throw new Error('Request aborted');
|
||||||
|
}
|
||||||
|
|
||||||
const statusCheckResponse = await fetch(`https://horde.koboldai.net/api/v2/generate/text/status/${task_id}`, getRequestArgs());
|
const statusCheckResponse = await fetch(`https://horde.koboldai.net/api/v2/generate/text/status/${task_id}`, getRequestArgs());
|
||||||
|
|
||||||
const statusCheckJson = await statusCheckResponse.json();
|
const statusCheckJson = await statusCheckResponse.json();
|
||||||
|
83
server.js
83
server.js
@ -332,7 +332,6 @@ app.post("/generate", jsonParser, async function (request, response_generate = r
|
|||||||
const controller = new AbortController();
|
const controller = new AbortController();
|
||||||
request.socket.removeAllListeners('close');
|
request.socket.removeAllListeners('close');
|
||||||
request.socket.on('close', function () {
|
request.socket.on('close', function () {
|
||||||
console.log('Kobold aborted');
|
|
||||||
controller.abort();
|
controller.abort();
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -390,20 +389,18 @@ app.post("/generate", jsonParser, async function (request, response_generate = r
|
|||||||
}
|
}
|
||||||
catch (error) {
|
catch (error) {
|
||||||
// data
|
// data
|
||||||
console.log(error[0]);
|
if (typeof error['text'] === 'function') {
|
||||||
|
console.log(await error.text());
|
||||||
|
}
|
||||||
|
|
||||||
// response
|
// response
|
||||||
if (error[1]) {
|
switch (error.statusCode) {
|
||||||
switch (error[1].statusCode) {
|
|
||||||
case 503:
|
case 503:
|
||||||
await delay(delayAmount);
|
await delay(delayAmount);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return response_generate.send({ error: true });
|
return response_generate.send({ error: true });
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
return response_generate.send({ error: true });
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -1359,7 +1356,7 @@ app.post("/getstatus_novelai", jsonParser, function (request, response_getstatus
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
app.post("/generate_novelai", jsonParser, function (request, response_generate_novel = response) {
|
app.post("/generate_novelai", jsonParser, async function (request, response_generate_novel = response) {
|
||||||
if (!request.body) return response_generate_novel.sendStatus(400);
|
if (!request.body) return response_generate_novel.sendStatus(400);
|
||||||
|
|
||||||
const api_key_novel = readSecret(SECRET_KEYS.NOVEL);
|
const api_key_novel = readSecret(SECRET_KEYS.NOVEL);
|
||||||
@ -1368,8 +1365,14 @@ app.post("/generate_novelai", jsonParser, function (request, response_generate_n
|
|||||||
return response_generate_novel.sendStatus(401);
|
return response_generate_novel.sendStatus(401);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const controller = new AbortController();
|
||||||
|
request.socket.removeAllListeners('close');
|
||||||
|
request.socket.on('close', function () {
|
||||||
|
controller.abort();
|
||||||
|
});
|
||||||
|
|
||||||
console.log(request.body);
|
console.log(request.body);
|
||||||
var data = {
|
const data = {
|
||||||
"input": request.body.input,
|
"input": request.body.input,
|
||||||
"model": request.body.model,
|
"model": request.body.model,
|
||||||
"parameters": {
|
"parameters": {
|
||||||
@ -1382,6 +1385,9 @@ app.post("/generate_novelai", jsonParser, function (request, response_generate_n
|
|||||||
"repetition_penalty_range": request.body.repetition_penalty_range,
|
"repetition_penalty_range": request.body.repetition_penalty_range,
|
||||||
"repetition_penalty_frequency": request.body.repetition_penalty_frequency,
|
"repetition_penalty_frequency": request.body.repetition_penalty_frequency,
|
||||||
"repetition_penalty_presence": request.body.repetition_penalty_presence,
|
"repetition_penalty_presence": request.body.repetition_penalty_presence,
|
||||||
|
"top_a": request.body.top_a,
|
||||||
|
"top_p": request.body.top_p,
|
||||||
|
"top_k": request.body.top_k,
|
||||||
//"stop_sequences": {{187}},
|
//"stop_sequences": {{187}},
|
||||||
//bad_words_ids = {{50256}, {0}, {1}};
|
//bad_words_ids = {{50256}, {0}, {1}};
|
||||||
//generate_until_sentence = true;
|
//generate_until_sentence = true;
|
||||||
@ -1393,37 +1399,31 @@ app.post("/generate_novelai", jsonParser, function (request, response_generate_n
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var args = {
|
const args = {
|
||||||
data: data,
|
body: JSON.stringify(data),
|
||||||
|
headers: { "Content-Type": "application/json", "Authorization": "Bearer " + api_key_novel },
|
||||||
headers: { "Content-Type": "application/json", "Authorization": "Bearer " + api_key_novel }
|
signal: controller.signal,
|
||||||
};
|
};
|
||||||
client.post(api_novelai + "/ai/generate", args, function (data, response) {
|
|
||||||
if (response.statusCode == 201) {
|
try {
|
||||||
console.log(data);
|
const response = await postAsync(api_novelai + "/ai/generate", args);
|
||||||
response_generate_novel.send(data);
|
console.log(response);
|
||||||
}
|
return response_generate_novel.send(response);
|
||||||
if (response.statusCode == 400) {
|
} catch (error) {
|
||||||
|
switch (error?.statusCode) {
|
||||||
|
case 400:
|
||||||
console.log('Validation error');
|
console.log('Validation error');
|
||||||
response_generate_novel.send({ error: true });
|
break;
|
||||||
}
|
case 401:
|
||||||
if (response.statusCode == 401) {
|
|
||||||
console.log('Access Token is incorrect');
|
console.log('Access Token is incorrect');
|
||||||
response_generate_novel.send({ error: true });
|
break;
|
||||||
}
|
case 402:
|
||||||
if (response.statusCode == 402) {
|
|
||||||
console.log('An active subscription is required to access this endpoint');
|
console.log('An active subscription is required to access this endpoint');
|
||||||
response_generate_novel.send({ error: true });
|
break;
|
||||||
}
|
}
|
||||||
if (response.statusCode == 500 || response.statusCode == 409) {
|
|
||||||
console.log(data);
|
return response_generate_novel.send({ error: true });
|
||||||
response_generate_novel.send({ error: true });
|
|
||||||
}
|
}
|
||||||
}).on('error', function () {
|
|
||||||
//console.log('');
|
|
||||||
//console.log('something went wrong on the request', err.request.options);
|
|
||||||
response_getstatus.send({ error: true });
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
app.post("/getallchatsofcharacter", jsonParser, function (request, response) {
|
app.post("/getallchatsofcharacter", jsonParser, function (request, response) {
|
||||||
@ -2611,14 +2611,14 @@ function putAsync(url, args) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function postAsync(url, args) {
|
async function postAsync(url, args) {
|
||||||
const response = await fetch(url, { method: 'POST', args });
|
const response = await fetch(url, { method: 'POST', ...args });
|
||||||
|
|
||||||
if (response.ok) {
|
if (response.ok) {
|
||||||
const data = response.json();
|
const data = await response.json();
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new Error(response.statusText);
|
throw new Error(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getAsync(url, args) {
|
function getAsync(url, args) {
|
||||||
@ -2836,19 +2836,20 @@ app.post('/generate_horde', jsonParser, async (request, response) => {
|
|||||||
const url = 'https://horde.koboldai.net/api/v2/generate/text/async';
|
const url = 'https://horde.koboldai.net/api/v2/generate/text/async';
|
||||||
|
|
||||||
const args = {
|
const args = {
|
||||||
body: JSON.stringify(request.body),
|
"body": JSON.stringify(request.body),
|
||||||
headers: {
|
"headers": {
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
"Client-Agent": request.header('Client-Agent'),
|
"Client-Agent": request.header('Client-Agent'),
|
||||||
"apikey": api_key_horde,
|
"apikey": api_key_horde,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
console.log(args.data);
|
console.log(args.body);
|
||||||
try {
|
try {
|
||||||
const data = await postAsync(url, args);
|
const data = await postAsync(url, args);
|
||||||
return response.send(data);
|
return response.send(data);
|
||||||
} catch {
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
return response.sendStatus(500);
|
return response.sendStatus(500);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Reference in New Issue
Block a user