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