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);
|
||||
tokens_already_generated = 0;
|
||||
generation_started = new Date();
|
||||
abortController = new AbortController();
|
||||
|
||||
const isImpersonate = type == "impersonate";
|
||||
const isInstruct = power_user.instruct.enabled;
|
||||
@ -2226,7 +2227,6 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject,
|
||||
let generate_url = getGenerateUrl();
|
||||
console.log('rungenerate calling API');
|
||||
|
||||
abortController = new AbortController();
|
||||
showStopButton();
|
||||
|
||||
if (main_api == 'openai') {
|
||||
@ -2238,7 +2238,7 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject,
|
||||
}
|
||||
}
|
||||
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') {
|
||||
if (isStreamingEnabled() && type !== 'quiet') {
|
||||
@ -2421,12 +2421,13 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject,
|
||||
};
|
||||
|
||||
function onError(exception) {
|
||||
hideStopButton();
|
||||
reject(exception);
|
||||
$("#send_textarea").removeAttr('disabled');
|
||||
is_send_press = false;
|
||||
activateSendButtons();
|
||||
showSwipeButtons();
|
||||
setGenerationProgress(0);
|
||||
$('.mes_buttons:last').show();
|
||||
console.log(exception);
|
||||
};
|
||||
|
||||
@ -6519,9 +6520,9 @@ $(document).ready(function () {
|
||||
streamingProcessor.onStopStreaming();
|
||||
streamingProcessor = null;
|
||||
}
|
||||
if (!isStreamingEnabled() && abortController) {
|
||||
if (abortController) {
|
||||
abortController.abort();
|
||||
abortController = null;
|
||||
hideStopButton();
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -79,7 +79,7 @@ async function adjustHordeGenerationParams(max_context_length, max_length) {
|
||||
return { maxContextLength, maxLength };
|
||||
}
|
||||
|
||||
async function generateHorde(prompt, params) {
|
||||
async function generateHorde(prompt, params, signal) {
|
||||
validateHordeModel();
|
||||
delete params.prompt;
|
||||
|
||||
@ -119,6 +119,16 @@ async function generateHorde(prompt, params) {
|
||||
console.log(`Horde task id = ${task_id}`);
|
||||
|
||||
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 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();
|
||||
request.socket.removeAllListeners('close');
|
||||
request.socket.on('close', function () {
|
||||
console.log('Kobold aborted');
|
||||
controller.abort();
|
||||
});
|
||||
|
||||
@ -390,20 +389,18 @@ app.post("/generate", jsonParser, async function (request, response_generate = r
|
||||
}
|
||||
catch (error) {
|
||||
// data
|
||||
console.log(error[0]);
|
||||
if (typeof error['text'] === 'function') {
|
||||
console.log(await error.text());
|
||||
}
|
||||
|
||||
// response
|
||||
if (error[1]) {
|
||||
switch (error[1].statusCode) {
|
||||
switch (error.statusCode) {
|
||||
case 503:
|
||||
await delay(delayAmount);
|
||||
break;
|
||||
default:
|
||||
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);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
const controller = new AbortController();
|
||||
request.socket.removeAllListeners('close');
|
||||
request.socket.on('close', function () {
|
||||
controller.abort();
|
||||
});
|
||||
|
||||
console.log(request.body);
|
||||
var data = {
|
||||
const data = {
|
||||
"input": request.body.input,
|
||||
"model": request.body.model,
|
||||
"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_frequency": request.body.repetition_penalty_frequency,
|
||||
"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}},
|
||||
//bad_words_ids = {{50256}, {0}, {1}};
|
||||
//generate_until_sentence = true;
|
||||
@ -1393,37 +1399,31 @@ app.post("/generate_novelai", jsonParser, function (request, response_generate_n
|
||||
}
|
||||
};
|
||||
|
||||
var args = {
|
||||
data: data,
|
||||
|
||||
headers: { "Content-Type": "application/json", "Authorization": "Bearer " + api_key_novel }
|
||||
const args = {
|
||||
body: JSON.stringify(data),
|
||||
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) {
|
||||
console.log(data);
|
||||
response_generate_novel.send(data);
|
||||
}
|
||||
if (response.statusCode == 400) {
|
||||
|
||||
try {
|
||||
const response = await postAsync(api_novelai + "/ai/generate", args);
|
||||
console.log(response);
|
||||
return response_generate_novel.send(response);
|
||||
} catch (error) {
|
||||
switch (error?.statusCode) {
|
||||
case 400:
|
||||
console.log('Validation error');
|
||||
response_generate_novel.send({ error: true });
|
||||
}
|
||||
if (response.statusCode == 401) {
|
||||
break;
|
||||
case 401:
|
||||
console.log('Access Token is incorrect');
|
||||
response_generate_novel.send({ error: true });
|
||||
}
|
||||
if (response.statusCode == 402) {
|
||||
break;
|
||||
case 402:
|
||||
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);
|
||||
response_generate_novel.send({ error: true });
|
||||
|
||||
return 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) {
|
||||
@ -2611,14 +2611,14 @@ function putAsync(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) {
|
||||
const data = response.json();
|
||||
const data = await response.json();
|
||||
return data;
|
||||
}
|
||||
|
||||
throw new Error(response.statusText);
|
||||
throw new Error(response);
|
||||
}
|
||||
|
||||
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 args = {
|
||||
body: JSON.stringify(request.body),
|
||||
headers: {
|
||||
"body": JSON.stringify(request.body),
|
||||
"headers": {
|
||||
"Content-Type": "application/json",
|
||||
"Client-Agent": request.header('Client-Agent'),
|
||||
"apikey": api_key_horde,
|
||||
}
|
||||
};
|
||||
|
||||
console.log(args.data);
|
||||
console.log(args.body);
|
||||
try {
|
||||
const data = await postAsync(url, args);
|
||||
return response.send(data);
|
||||
} catch {
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
return response.sendStatus(500);
|
||||
}
|
||||
});
|
||||
|
Reference in New Issue
Block a user