Stop any request. Part 2 (still WIP)

This commit is contained in:
SillyLossy
2023-05-24 16:46:05 +03:00
parent 5cb5ea1c2d
commit a0ef9fce83
3 changed files with 68 additions and 56 deletions

View File

@ -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();
} }
}); });

View File

@ -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();

101
server.js
View File

@ -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,19 +389,17 @@ 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);
} catch (error) {
switch (error?.statusCode) {
case 400:
console.log('Validation error');
break;
case 401:
console.log('Access Token is incorrect');
break;
case 402:
console.log('An active subscription is required to access this endpoint');
break;
} }
if (response.statusCode == 400) {
console.log('Validation error'); return response_generate_novel.send({ error: true });
response_generate_novel.send({ error: true }); }
}
if (response.statusCode == 401) {
console.log('Access Token is incorrect');
response_generate_novel.send({ error: true });
}
if (response.statusCode == 402) {
console.log('An active subscription is required to access this endpoint');
response_generate_novel.send({ error: true });
}
if (response.statusCode == 500 || response.statusCode == 409) {
console.log(data);
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);
} }
}); });