Further loglevel updates

1. Fix missed endpoints
2. Exclude console.log from loglevel
This commit is contained in:
Cohee 2025-02-02 15:40:37 +02:00
parent 76d1661768
commit 0c8a11e28b
12 changed files with 48 additions and 49 deletions

View File

@ -179,7 +179,7 @@ async function sendClaudeRequest(request, response) {
additionalHeaders['anthropic-beta'] = 'prompt-caching-2024-07-31'; additionalHeaders['anthropic-beta'] = 'prompt-caching-2024-07-31';
} }
console.log('Claude request:', requestBody); console.debug('Claude request:', requestBody);
const generateResponse = await fetch(apiUrl + '/messages', { const generateResponse = await fetch(apiUrl + '/messages', {
method: 'POST', method: 'POST',
@ -199,21 +199,21 @@ async function sendClaudeRequest(request, response) {
} else { } else {
if (!generateResponse.ok) { if (!generateResponse.ok) {
const generateResponseText = await generateResponse.text(); const generateResponseText = await generateResponse.text();
console.log(color.red(`Claude API returned error: ${generateResponse.status} ${generateResponse.statusText}\n${generateResponseText}\n${divider}`)); console.warn(color.red(`Claude API returned error: ${generateResponse.status} ${generateResponse.statusText}\n${generateResponseText}\n${divider}`));
return response.status(generateResponse.status).send({ error: true }); return response.status(generateResponse.status).send({ error: true });
} }
/** @type {any} */ /** @type {any} */
const generateResponseJson = await generateResponse.json(); const generateResponseJson = await generateResponse.json();
const responseText = generateResponseJson?.content?.[0]?.text || ''; const responseText = generateResponseJson?.content?.[0]?.text || '';
console.log('Claude response:', generateResponseJson); console.debug('Claude response:', generateResponseJson);
// Wrap it back to OAI format + save the original content // Wrap it back to OAI format + save the original content
const reply = { choices: [{ 'message': { 'content': responseText } }], content: generateResponseJson.content }; const reply = { choices: [{ 'message': { 'content': responseText } }], content: generateResponseJson.content };
return response.send(reply); return response.send(reply);
} }
} catch (error) { } catch (error) {
console.log(color.red(`Error communicating with Claude: ${error}\n${divider}`)); console.error(color.red(`Error communicating with Claude: ${error}\n${divider}`));
if (!response.headersSent) { if (!response.headersSent) {
return response.status(500).send({ error: true }); return response.status(500).send({ error: true });
} }
@ -383,7 +383,7 @@ async function sendMakerSuiteRequest(request, response) {
const candidates = generateResponseJson?.candidates; const candidates = generateResponseJson?.candidates;
if (!candidates || candidates.length === 0) { if (!candidates || candidates.length === 0) {
let message = 'Google AI Studio API returned no candidate'; let message = 'Google AI Studio API returned no candidate';
console.log(message, generateResponseJson); console.warn(message, generateResponseJson);
if (generateResponseJson?.promptFeedback?.blockReason) { if (generateResponseJson?.promptFeedback?.blockReason) {
message += `\nPrompt was blocked due to : ${generateResponseJson.promptFeedback.blockReason}`; message += `\nPrompt was blocked due to : ${generateResponseJson.promptFeedback.blockReason}`;
} }
@ -699,7 +699,7 @@ async function sendDeepSeekRequest(request, response) {
signal: controller.signal, signal: controller.signal,
}; };
console.log('DeepSeek request:', requestBody); console.debug('DeepSeek request:', requestBody);
const generateResponse = await fetch(apiUrl + '/chat/completions', config); const generateResponse = await fetch(apiUrl + '/chat/completions', config);
@ -708,16 +708,16 @@ async function sendDeepSeekRequest(request, response) {
} else { } else {
if (!generateResponse.ok) { if (!generateResponse.ok) {
const errorText = await generateResponse.text(); const errorText = await generateResponse.text();
console.log(`DeepSeek API returned error: ${generateResponse.status} ${generateResponse.statusText} ${errorText}`); console.warn(`DeepSeek API returned error: ${generateResponse.status} ${generateResponse.statusText} ${errorText}`);
const errorJson = tryParse(errorText) ?? { error: true }; const errorJson = tryParse(errorText) ?? { error: true };
return response.status(500).send(errorJson); return response.status(500).send(errorJson);
} }
const generateResponseJson = await generateResponse.json(); const generateResponseJson = await generateResponse.json();
console.log('DeepSeek response:', generateResponseJson); console.debug('DeepSeek response:', generateResponseJson);
return response.send(generateResponseJson); return response.send(generateResponseJson);
} }
} catch (error) { } catch (error) {
console.log('Error communicating with DeepSeek API: ', error); console.error('Error communicating with DeepSeek API: ', error);
if (!response.headersSent) { if (!response.headersSent) {
response.send({ error: true }); response.send({ error: true });
} else { } else {

View File

@ -301,12 +301,12 @@ router.post('/onering', jsonParser, async (request, response) => {
const url = secretUrl || ONERING_URL_DEFAULT; const url = secretUrl || ONERING_URL_DEFAULT;
if (!url) { if (!url) {
console.log('OneRing URL is not configured.'); console.warn('OneRing URL is not configured.');
return response.sendStatus(400); return response.sendStatus(400);
} }
if (!secretUrl && url === ONERING_URL_DEFAULT) { if (!secretUrl && url === ONERING_URL_DEFAULT) {
console.log('OneRing URL is using default value.', ONERING_URL_DEFAULT); console.info('OneRing URL is using default value.', ONERING_URL_DEFAULT);
} }
if (request.body.lang === 'pt-BR' || request.body.lang === 'pt-PT') { if (request.body.lang === 'pt-BR' || request.body.lang === 'pt-PT') {
@ -326,7 +326,7 @@ router.post('/onering', jsonParser, async (request, response) => {
params.append('from_lang', from_lang); params.append('from_lang', from_lang);
params.append('to_lang', to_lang); params.append('to_lang', to_lang);
console.log('Input text: ' + text); console.debug('Input text: ' + text);
const fetchUrl = new URL(url); const fetchUrl = new URL(url);
fetchUrl.search = params.toString(); fetchUrl.search = params.toString();
@ -337,17 +337,17 @@ router.post('/onering', jsonParser, async (request, response) => {
if (!result.ok) { if (!result.ok) {
const error = await result.text(); const error = await result.text();
console.log('OneRing error: ', result.statusText, error); console.warn('OneRing error: ', result.statusText, error);
return response.sendStatus(500); return response.sendStatus(500);
} }
/** @type {any} */ /** @type {any} */
const data = await result.json(); const data = await result.json();
console.log('Translated text: ' + data.result); console.debug('Translated text: ' + data.result);
return response.send(data.result); return response.send(data.result);
} catch (error) { } catch (error) {
console.log('Translation error: ' + error.message); console.error('Translation error: ' + error.message);
return response.sendStatus(500); return response.sendStatus(500);
} }
}); });
@ -358,12 +358,12 @@ router.post('/deeplx', jsonParser, async (request, response) => {
const url = secretUrl || DEEPLX_URL_DEFAULT; const url = secretUrl || DEEPLX_URL_DEFAULT;
if (!url) { if (!url) {
console.log('DeepLX URL is not configured.'); console.warn('DeepLX URL is not configured.');
return response.sendStatus(400); return response.sendStatus(400);
} }
if (!secretUrl && url === DEEPLX_URL_DEFAULT) { if (!secretUrl && url === DEEPLX_URL_DEFAULT) {
console.log('DeepLX URL is using default value.', DEEPLX_URL_DEFAULT); console.info('DeepLX URL is using default value.', DEEPLX_URL_DEFAULT);
} }
const text = request.body.text; const text = request.body.text;

View File

@ -211,9 +211,9 @@ router.post('/change-name', jsonParser, async (request, response) => {
router.post('/reset-step1', jsonParser, async (request, response) => { router.post('/reset-step1', jsonParser, async (request, response) => {
try { try {
const resetCode = String(crypto.randomInt(1000, 9999)); const resetCode = String(crypto.randomInt(1000, 9999));
console.info(); console.log();
console.info(color.magenta(`${request.user.profile.name}, your account reset code is: `) + color.red(resetCode)); console.log(color.magenta(`${request.user.profile.name}, your account reset code is: `) + color.red(resetCode));
console.info(); console.log();
RESET_CACHE.set(request.user.profile.handle, resetCode); RESET_CACHE.set(request.user.profile.handle, resetCode);
return response.sendStatus(204); return response.sendStatus(204);
} catch (error) { } catch (error) {

View File

@ -125,9 +125,9 @@ router.post('/recover-step1', jsonParser, async (request, response) => {
} }
const mfaCode = String(crypto.randomInt(1000, 9999)); const mfaCode = String(crypto.randomInt(1000, 9999));
console.info(); console.log();
console.info(color.blue(`${user.name}, your password recovery code is: `) + color.magenta(mfaCode)); console.log(color.blue(`${user.name}, your password recovery code is: `) + color.magenta(mfaCode));
console.info(); console.log();
MFA_CACHE.set(user.handle, mfaCode); MFA_CACHE.set(user.handle, mfaCode);
return response.sendStatus(204); return response.sendStatus(204);
} catch (error) { } catch (error) {

View File

@ -63,7 +63,7 @@ export default function whitelistMiddleware(whitelistMode, listen) {
const userAgent = req.headers['user-agent']; const userAgent = req.headers['user-agent'];
if (listen && !knownIPs.has(clientIp)) { if (listen && !knownIPs.has(clientIp)) {
console.log(color.yellow(`New connection from ${clientIp}; User Agent: ${userAgent}\n`)); console.info(color.yellow(`New connection from ${clientIp}; User Agent: ${userAgent}\n`));
knownIPs.add(clientIp); knownIPs.add(clientIp);
// Write access log // Write access log
@ -84,7 +84,7 @@ export default function whitelistMiddleware(whitelistMode, listen) {
const ipDetails = forwardedIp const ipDetails = forwardedIp
? `${clientIp} (forwarded from ${forwardedIp})` ? `${clientIp} (forwarded from ${forwardedIp})`
: clientIp; : clientIp;
console.log( console.warn(
color.red( color.red(
`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`, `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`,
), ),

View File

@ -840,7 +840,7 @@ export function requireAdminMiddleware(request, response, next) {
export async function createBackupArchive(handle, response) { export async function createBackupArchive(handle, response) {
const directories = getUserDirectories(handle); const directories = getUserDirectories(handle);
console.log('Backup requested for', handle); console.info('Backup requested for', handle);
const archive = archiver('zip'); const archive = archiver('zip');
archive.on('error', function (err) { archive.on('error', function (err) {
@ -849,7 +849,7 @@ export async function createBackupArchive(handle, response) {
// On stream closed we can end the request // On stream closed we can end the request
archive.on('end', function () { archive.on('end', function () {
console.log('Archive wrote %d bytes', archive.pointer()); console.info('Archive wrote %d bytes', archive.pointer());
response.end(); // End the Express response response.end(); // End the Express response
}); });

View File

@ -170,7 +170,7 @@ export async function extractFileFromZipBuffer(archiveBuffer, fileExtension) {
zipfile.readEntry(); zipfile.readEntry();
zipfile.on('entry', (entry) => { zipfile.on('entry', (entry) => {
if (entry.fileName.endsWith(fileExtension) && !entry.fileName.startsWith('__MACOSX')) { if (entry.fileName.endsWith(fileExtension) && !entry.fileName.startsWith('__MACOSX')) {
console.log(`Extracting ${entry.fileName}`); console.info(`Extracting ${entry.fileName}`);
zipfile.openReadStream(entry, (err, readStream) => { zipfile.openReadStream(entry, (err, readStream) => {
if (err) { if (err) {
reject(err); reject(err);
@ -218,7 +218,7 @@ export async function getImageBuffers(zipFilePath) {
zipfile.on('entry', (entry) => { zipfile.on('entry', (entry) => {
const mimeType = mime.lookup(entry.fileName); const mimeType = mime.lookup(entry.fileName);
if (mimeType && mimeType.startsWith('image/') && !entry.fileName.startsWith('__MACOSX')) { if (mimeType && mimeType.startsWith('image/') && !entry.fileName.startsWith('__MACOSX')) {
console.log(`Extracting ${entry.fileName}`); console.info(`Extracting ${entry.fileName}`);
zipfile.openReadStream(entry, (err, readStream) => { zipfile.openReadStream(entry, (err, readStream) => {
if (err) { if (err) {
reject(err); reject(err);
@ -448,7 +448,7 @@ export function forwardFetchResponse(from, to) {
let statusText = from.statusText; let statusText = from.statusText;
if (!from.ok) { if (!from.ok) {
console.log(`Streaming request failed with status ${statusCode} ${statusText}`); console.warn(`Streaming request failed with status ${statusCode} ${statusText}`);
} }
// Avoid sending 401 responses as they reset the client Basic auth. // Avoid sending 401 responses as they reset the client Basic auth.
@ -473,7 +473,7 @@ export function forwardFetchResponse(from, to) {
}); });
from.body.on('end', function () { from.body.on('end', function () {
console.log('Streaming request finished'); console.info('Streaming request finished');
to.end(); to.end();
}); });
} else { } else {
@ -518,7 +518,7 @@ export function makeHttp2Request(endpoint, method, body, headers) {
}); });
req.on('end', () => { req.on('end', () => {
console.log(data); console.debug(data);
resolve(data); resolve(data);
}); });
}); });
@ -701,7 +701,6 @@ export function setupLogLevel() {
const logLevel = getConfigValue('minLogLevel', LOG_LEVELS.DEBUG); const logLevel = getConfigValue('minLogLevel', LOG_LEVELS.DEBUG);
globalThis.console.debug = logLevel <= LOG_LEVELS.DEBUG ? console.debug : () => {}; globalThis.console.debug = logLevel <= LOG_LEVELS.DEBUG ? console.debug : () => {};
globalThis.console.log = logLevel <= LOG_LEVELS.INFO ? console.log : () => {};
globalThis.console.info = logLevel <= LOG_LEVELS.INFO ? console.info : () => {}; globalThis.console.info = logLevel <= LOG_LEVELS.INFO ? console.info : () => {};
globalThis.console.warn = logLevel <= LOG_LEVELS.WARN ? console.warn : () => {}; globalThis.console.warn = logLevel <= LOG_LEVELS.WARN ? console.warn : () => {};
globalThis.console.error = logLevel <= LOG_LEVELS.ERROR ? console.error : () => {}; globalThis.console.error = logLevel <= LOG_LEVELS.ERROR ? console.error : () => {};

View File

@ -13,7 +13,7 @@ export async function getCohereBatchVector(texts, isQuery, directories, model) {
const key = readSecret(directories, SECRET_KEYS.COHERE); const key = readSecret(directories, SECRET_KEYS.COHERE);
if (!key) { if (!key) {
console.log('No API key found'); console.warn('No API key found');
throw new Error('No API key found'); throw new Error('No API key found');
} }
@ -34,14 +34,14 @@ export async function getCohereBatchVector(texts, isQuery, directories, model) {
if (!response.ok) { if (!response.ok) {
const text = await response.text(); const text = await response.text();
console.log('API request failed', response.statusText, text); console.warn('API request failed', response.statusText, text);
throw new Error('API request failed'); throw new Error('API request failed');
} }
/** @type {any} */ /** @type {any} */
const data = await response.json(); const data = await response.json();
if (!Array.isArray(data?.embeddings?.float)) { if (!Array.isArray(data?.embeddings?.float)) {
console.log('API response was not an array'); console.warn('API response was not an array');
throw new Error('API response was not an array'); throw new Error('API response was not an array');
} }

View File

@ -36,8 +36,8 @@ async function getExtrasVectorImpl(text, apiUrl, apiKey) {
url.pathname = '/api/embeddings/compute'; url.pathname = '/api/embeddings/compute';
} }
catch (error) { catch (error) {
console.log('Failed to set up Extras API call:', error); console.error('Failed to set up Extras API call:', error);
console.log('Extras API URL given was:', apiUrl); console.debug('Extras API URL given was:', apiUrl);
throw error; throw error;
} }
@ -62,7 +62,7 @@ async function getExtrasVectorImpl(text, apiUrl, apiKey) {
if (!response.ok) { if (!response.ok) {
const text = await response.text(); const text = await response.text();
console.log('Extras request failed', response.statusText, text); console.warn('Extras request failed', response.statusText, text);
throw new Error('Extras request failed'); throw new Error('Extras request failed');
} }

View File

@ -23,7 +23,7 @@ export async function getMakerSuiteVector(text, directories) {
const key = readSecret(directories, SECRET_KEYS.MAKERSUITE); const key = readSecret(directories, SECRET_KEYS.MAKERSUITE);
if (!key) { if (!key) {
console.log('No Google AI Studio key found'); console.warn('No Google AI Studio key found');
throw new Error('No Google AI Studio key found'); throw new Error('No Google AI Studio key found');
} }
@ -48,7 +48,7 @@ export async function getMakerSuiteVector(text, directories) {
if (!response.ok) { if (!response.ok) {
const text = await response.text(); const text = await response.text();
console.log('Google AI Studio request failed', response.statusText, text); console.warn('Google AI Studio request failed', response.statusText, text);
throw new Error('Google AI Studio request failed'); throw new Error('Google AI Studio request failed');
} }

View File

@ -20,14 +20,14 @@ export async function getNomicAIBatchVector(texts, source, directories) {
const config = SOURCES[source]; const config = SOURCES[source];
if (!config) { if (!config) {
console.log('Unknown source', source); console.error('Unknown source', source);
throw new Error('Unknown source'); throw new Error('Unknown source');
} }
const key = readSecret(directories, config.secretKey); const key = readSecret(directories, config.secretKey);
if (!key) { if (!key) {
console.log('No API key found'); console.warn('No API key found');
throw new Error('No API key found'); throw new Error('No API key found');
} }
@ -47,14 +47,14 @@ export async function getNomicAIBatchVector(texts, source, directories) {
if (!response.ok) { if (!response.ok) {
const text = await response.text(); const text = await response.text();
console.log('API request failed', response.statusText, text); console.warn('API request failed', response.statusText, text);
throw new Error('API request failed'); throw new Error('API request failed');
} }
/** @type {any} */ /** @type {any} */
const data = await response.json(); const data = await response.json();
if (!Array.isArray(data?.embeddings)) { if (!Array.isArray(data?.embeddings)) {
console.log('API response was not an array'); console.warn('API response was not an array');
throw new Error('API response was not an array'); throw new Error('API response was not an array');
} }

View File

@ -31,14 +31,14 @@ export async function getOpenAIBatchVector(texts, source, directories, model = '
const config = SOURCES[source]; const config = SOURCES[source];
if (!config) { if (!config) {
console.log('Unknown source', source); console.error('Unknown source', source);
throw new Error('Unknown source'); throw new Error('Unknown source');
} }
const key = readSecret(directories, config.secretKey); const key = readSecret(directories, config.secretKey);
if (!key) { if (!key) {
console.log('No API key found'); console.warn('No API key found');
throw new Error('No API key found'); throw new Error('No API key found');
} }
@ -57,7 +57,7 @@ export async function getOpenAIBatchVector(texts, source, directories, model = '
if (!response.ok) { if (!response.ok) {
const text = await response.text(); const text = await response.text();
console.log('API request failed', response.statusText, text); console.warn('API request failed', response.statusText, text);
throw new Error('API request failed'); throw new Error('API request failed');
} }
@ -65,7 +65,7 @@ export async function getOpenAIBatchVector(texts, source, directories, model = '
const data = await response.json(); const data = await response.json();
if (!Array.isArray(data?.data)) { if (!Array.isArray(data?.data)) {
console.log('API response was not an array'); console.warn('API response was not an array');
throw new Error('API response was not an array'); throw new Error('API response was not an array');
} }