Further loglevel updates 1. Fix missed endpoints 2. Exclude console.log from loglevel

0c8a11e28b7aae3cd89af7638eb15bcd7028c92b

Cohee <18619528+Cohee1207@users.noreply.github.com>

12 files changed, +48 -49Showing whitespace changes
src/endpoints/backends/chat-completions.js+9 -9
@@ -179,7 +179,7 @@ async function sendClaudeRequest(request, response) {
179179 additionalHeaders['anthropic-beta'] = 'prompt-caching-2024-07-31';
180180 }
181181
182182 console.logdebug('Claude request:', requestBody);
183183
184184 const generateResponse = await fetch(apiUrl + '/messages', {
185185 method: 'POST',
@@ -199,21 +199,21 @@ async function sendClaudeRequest(request, response) {
199199 } else {
200200 if (!generateResponse.ok) {
201201 const generateResponseText = await generateResponse.text();
202202 console.logwarn(color.red(`Claude API returned error: ${generateResponse.status} ${generateResponse.statusText}\n${generateResponseText}\n${divider}`));
203203 return response.status(generateResponse.status).send({ error: true });
204204 }
205205
206206 /** @type {any} */
207207 const generateResponseJson = await generateResponse.json();
208208 const responseText = generateResponseJson?.content?.[0]?.text || '';
209209 console.logdebug('Claude response:', generateResponseJson);
210210
211211 // Wrap it back to OAI format + save the original content
212212 const reply = { choices: [{ 'message': { 'content': responseText } }], content: generateResponseJson.content };
213213 return response.send(reply);
214214 }
215215 } catch (error) {
216216 console.logerror(color.red(`Error communicating with Claude: ${error}\n${divider}`));
217217 if (!response.headersSent) {
218218 return response.status(500).send({ error: true });
219219 }
@@ -383,7 +383,7 @@ async function sendMakerSuiteRequest(request, response) {
383383 const candidates = generateResponseJson?.candidates;
384384 if (!candidates || candidates.length === 0) {
385385 let message = 'Google AI Studio API returned no candidate';
386386 console.logwarn(message, generateResponseJson);
387387 if (generateResponseJson?.promptFeedback?.blockReason) {
388388 message += `\nPrompt was blocked due to : ${generateResponseJson.promptFeedback.blockReason}`;
389389 }
@@ -699,7 +699,7 @@ async function sendDeepSeekRequest(request, response) {
699699 signal: controller.signal,
700700 };
701701
702702 console.logdebug('DeepSeek request:', requestBody);
703703
704704 const generateResponse = await fetch(apiUrl + '/chat/completions', config);
705705
@@ -708,16 +708,16 @@ async function sendDeepSeekRequest(request, response) {
708708 } else {
709709 if (!generateResponse.ok) {
710710 const errorText = await generateResponse.text();
711711 console.logwarn(`DeepSeek API returned error: ${generateResponse.status} ${generateResponse.statusText} ${errorText}`);
712712 const errorJson = tryParse(errorText) ?? { error: true };
713713 return response.status(500).send(errorJson);
714714 }
715715 const generateResponseJson = await generateResponse.json();
716716 console.logdebug('DeepSeek response:', generateResponseJson);
717717 return response.send(generateResponseJson);
718718 }
719719 } catch (error) {
720720 console.logerror('Error communicating with DeepSeek API: ', error);
721721 if (!response.headersSent) {
722722 response.send({ error: true });
723723 } else {
src/endpoints/translate.js+8 -8
@@ -301,12 +301,12 @@ router.post('/onering', jsonParser, async (request, response) => {
301301 const url = secretUrl || ONERING_URL_DEFAULT;
302302
303303 if (!url) {
304304 console.logwarn('OneRing URL is not configured.');
305305 return response.sendStatus(400);
306306 }
307307
308308 if (!secretUrl && url === ONERING_URL_DEFAULT) {
309309 console.loginfo('OneRing URL is using default value.', ONERING_URL_DEFAULT);
310310 }
311311
312312 if (request.body.lang === 'pt-BR' || request.body.lang === 'pt-PT') {
@@ -326,7 +326,7 @@ router.post('/onering', jsonParser, async (request, response) => {
326326 params.append('from_lang', from_lang);
327327 params.append('to_lang', to_lang);
328328
329329 console.logdebug('Input text: ' + text);
330330
331331 const fetchUrl = new URL(url);
332332 fetchUrl.search = params.toString();
@@ -337,17 +337,17 @@ router.post('/onering', jsonParser, async (request, response) => {
337337
338338 if (!result.ok) {
339339 const error = await result.text();
340340 console.logwarn('OneRing error: ', result.statusText, error);
341341 return response.sendStatus(500);
342342 }
343343
344344 /** @type {any} */
345345 const data = await result.json();
346346 console.logdebug('Translated text: ' + data.result);
347347
348348 return response.send(data.result);
349349 } catch (error) {
350350 console.logerror('Translation error: ' + error.message);
351351 return response.sendStatus(500);
352352 }
353353});
@@ -358,12 +358,12 @@ router.post('/deeplx', jsonParser, async (request, response) => {
358358 const url = secretUrl || DEEPLX_URL_DEFAULT;
359359
360360 if (!url) {
361361 console.logwarn('DeepLX URL is not configured.');
362362 return response.sendStatus(400);
363363 }
364364
365365 if (!secretUrl && url === DEEPLX_URL_DEFAULT) {
366366 console.loginfo('DeepLX URL is using default value.', DEEPLX_URL_DEFAULT);
367367 }
368368
369369 const text = request.body.text;
src/endpoints/users-private.js+3 -3
@@ -211,9 +211,9 @@ router.post('/change-name', jsonParser, async (request, response) => {
211211router.post('/reset-step1', jsonParser, async (request, response) => {
212212 try {
213213 const resetCode = String(crypto.randomInt(1000, 9999));
214214 console.infolog();
215215 console.infolog(color.magenta(`${request.user.profile.name}, your account reset code is: `) + color.red(resetCode));
216216 console.infolog();
217217 RESET_CACHE.set(request.user.profile.handle, resetCode);
218218 return response.sendStatus(204);
219219 } catch (error) {
src/endpoints/users-public.js+3 -3
@@ -125,9 +125,9 @@ router.post('/recover-step1', jsonParser, async (request, response) => {
125125 }
126126
127127 const mfaCode = String(crypto.randomInt(1000, 9999));
128128 console.infolog();
129129 console.infolog(color.blue(`${user.name}, your password recovery code is: `) + color.magenta(mfaCode));
130130 console.infolog();
131131 MFA_CACHE.set(user.handle, mfaCode);
132132 return response.sendStatus(204);
133133 } catch (error) {
src/middleware/whitelist.js+2 -2
@@ -63,7 +63,7 @@ export default function whitelistMiddleware(whitelistMode, listen) {
6363 const userAgent = req.headers['user-agent'];
6464
6565 if (listen && !knownIPs.has(clientIp)) {
6666 console.loginfo(color.yellow(`New connection from ${clientIp}; User Agent: ${userAgent}\n`));
6767 knownIPs.add(clientIp);
6868
6969 // Write access log
@@ -84,7 +84,7 @@ export default function whitelistMiddleware(whitelistMode, listen) {
8484 const ipDetails = forwardedIp
8585 ? `${clientIp} (forwarded from ${forwardedIp})`
8686 : clientIp;
8787 console.logwarn(
8888 color.red(
8989 `Blocked connection from ${clientIp}; User Agent: ${userAgent}\n\tTo allow this connection, add its IP address to the whitelist or disable whitelist mode by editing config.yaml in the root directory of your SillyTavern installation.\n`,
9090 ),
src/users.js+2 -2
@@ -840,7 +840,7 @@ export function requireAdminMiddleware(request, response, next) {
840840export async function createBackupArchive(handle, response) {
841841 const directories = getUserDirectories(handle);
842842
843843 console.loginfo('Backup requested for', handle);
844844 const archive = archiver('zip');
845845
846846 archive.on('error', function (err) {
@@ -849,7 +849,7 @@ export async function createBackupArchive(handle, response) {
849849
850850 // On stream closed we can end the request
851851 archive.on('end', function () {
852852 console.loginfo('Archive wrote %d bytes', archive.pointer());
853853 response.end(); // End the Express response
854854 });
855855
src/util.js+5 -6
@@ -170,7 +170,7 @@ export async function extractFileFromZipBuffer(archiveBuffer, fileExtension) {
170170 zipfile.readEntry();
171171 zipfile.on('entry', (entry) => {
172172 if (entry.fileName.endsWith(fileExtension) && !entry.fileName.startsWith('__MACOSX')) {
173173 console.loginfo(`Extracting ${entry.fileName}`);
174174 zipfile.openReadStream(entry, (err, readStream) => {
175175 if (err) {
176176 reject(err);
@@ -218,7 +218,7 @@ export async function getImageBuffers(zipFilePath) {
218218 zipfile.on('entry', (entry) => {
219219 const mimeType = mime.lookup(entry.fileName);
220220 if (mimeType && mimeType.startsWith('image/') && !entry.fileName.startsWith('__MACOSX')) {
221221 console.loginfo(`Extracting ${entry.fileName}`);
222222 zipfile.openReadStream(entry, (err, readStream) => {
223223 if (err) {
224224 reject(err);
@@ -448,7 +448,7 @@ export function forwardFetchResponse(from, to) {
448448 let statusText = from.statusText;
449449
450450 if (!from.ok) {
451451 console.logwarn(`Streaming request failed with status ${statusCode} ${statusText}`);
452452 }
453453
454454 // Avoid sending 401 responses as they reset the client Basic auth.
@@ -473,7 +473,7 @@ export function forwardFetchResponse(from, to) {
473473 });
474474
475475 from.body.on('end', function () {
476476 console.loginfo('Streaming request finished');
477477 to.end();
478478 });
479479 } else {
@@ -518,7 +518,7 @@ export function makeHttp2Request(endpoint, method, body, headers) {
518518 });
519519
520520 req.on('end', () => {
521521 console.logdebug(data);
522522 resolve(data);
523523 });
524524 });
@@ -701,7 +701,6 @@ export function setupLogLevel() {
701701 const logLevel = getConfigValue('minLogLevel', LOG_LEVELS.DEBUG);
702702
703703 globalThis.console.debug = logLevel <= LOG_LEVELS.DEBUG ? console.debug : () => {};
704- globalThis.console.log = logLevel <= LOG_LEVELS.INFO ? console.log : () => {};
705704 globalThis.console.info = logLevel <= LOG_LEVELS.INFO ? console.info : () => {};
706705 globalThis.console.warn = logLevel <= LOG_LEVELS.WARN ? console.warn : () => {};
707706 globalThis.console.error = logLevel <= LOG_LEVELS.ERROR ? console.error : () => {};
src/vectors/cohere-vectors.js+3 -3
@@ -13,7 +13,7 @@ export async function getCohereBatchVector(texts, isQuery, directories, model) {
1313 const key = readSecret(directories, SECRET_KEYS.COHERE);
1414
1515 if (!key) {
1616 console.logwarn('No API key found');
1717 throw new Error('No API key found');
1818 }
1919
@@ -34,14 +34,14 @@ export async function getCohereBatchVector(texts, isQuery, directories, model) {
3434
3535 if (!response.ok) {
3636 const text = await response.text();
3737 console.logwarn('API request failed', response.statusText, text);
3838 throw new Error('API request failed');
3939 }
4040
4141 /** @type {any} */
4242 const data = await response.json();
4343 if (!Array.isArray(data?.embeddings?.float)) {
4444 console.logwarn('API response was not an array');
4545 throw new Error('API response was not an array');
4646 }
4747
src/vectors/extras-vectors.js+3 -3
@@ -36,8 +36,8 @@ async function getExtrasVectorImpl(text, apiUrl, apiKey) {
3636 url.pathname = '/api/embeddings/compute';
3737 }
3838 catch (error) {
3939 console.logerror('Failed to set up Extras API call:', error);
4040 console.logdebug('Extras API URL given was:', apiUrl);
4141 throw error;
4242 }
4343
@@ -62,7 +62,7 @@ async function getExtrasVectorImpl(text, apiUrl, apiKey) {
6262
6363 if (!response.ok) {
6464 const text = await response.text();
6565 console.logwarn('Extras request failed', response.statusText, text);
6666 throw new Error('Extras request failed');
6767 }
6868
src/vectors/makersuite-vectors.js+2 -2
@@ -23,7 +23,7 @@ export async function getMakerSuiteVector(text, directories) {
2323 const key = readSecret(directories, SECRET_KEYS.MAKERSUITE);
2424
2525 if (!key) {
2626 console.logwarn('No Google AI Studio key found');
2727 throw new Error('No Google AI Studio key found');
2828 }
2929
@@ -48,7 +48,7 @@ export async function getMakerSuiteVector(text, directories) {
4848
4949 if (!response.ok) {
5050 const text = await response.text();
5151 console.logwarn('Google AI Studio request failed', response.statusText, text);
5252 throw new Error('Google AI Studio request failed');
5353 }
5454
src/vectors/nomicai-vectors.js+4 -4
@@ -20,14 +20,14 @@ export async function getNomicAIBatchVector(texts, source, directories) {
2020 const config = SOURCES[source];
2121
2222 if (!config) {
2323 console.logerror('Unknown source', source);
2424 throw new Error('Unknown source');
2525 }
2626
2727 const key = readSecret(directories, config.secretKey);
2828
2929 if (!key) {
3030 console.logwarn('No API key found');
3131 throw new Error('No API key found');
3232 }
3333
@@ -47,14 +47,14 @@ export async function getNomicAIBatchVector(texts, source, directories) {
4747
4848 if (!response.ok) {
4949 const text = await response.text();
5050 console.logwarn('API request failed', response.statusText, text);
5151 throw new Error('API request failed');
5252 }
5353
5454 /** @type {any} */
5555 const data = await response.json();
5656 if (!Array.isArray(data?.embeddings)) {
5757 console.logwarn('API response was not an array');
5858 throw new Error('API response was not an array');
5959 }
6060
src/vectors/openai-vectors.js+4 -4
@@ -31,14 +31,14 @@ export async function getOpenAIBatchVector(texts, source, directories, model = '
3131 const config = SOURCES[source];
3232
3333 if (!config) {
3434 console.logerror('Unknown source', source);
3535 throw new Error('Unknown source');
3636 }
3737
3838 const key = readSecret(directories, config.secretKey);
3939
4040 if (!key) {
4141 console.logwarn('No API key found');
4242 throw new Error('No API key found');
4343 }
4444
@@ -57,7 +57,7 @@ export async function getOpenAIBatchVector(texts, source, directories, model = '
5757
5858 if (!response.ok) {
5959 const text = await response.text();
6060 console.logwarn('API request failed', response.statusText, text);
6161 throw new Error('API request failed');
6262 }
6363
@@ -65,7 +65,7 @@ export async function getOpenAIBatchVector(texts, source, directories, model = '
6565 const data = await response.json();
6666
6767 if (!Array.isArray(data?.data)) {
6868 console.logwarn('API response was not an array');
6969 throw new Error('API response was not an array');
7070 }
7171