mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-17 08:50:15 +01:00
🛠️ refactor: Improve Logging and Error Handling in ToolService and useSSE (#2922)
* refactor(ToolService): streamline logging and tool error handling, also ensure generated outputs always have `output` field * refactor(useSSE): error message for server connection issue * refactor: add back capture group of sensitive information.js * hotfix: cohere chinese character unicode issue, return aggregated reply
This commit is contained in:
parent
a6058c5669
commit
08d6bea359
4 changed files with 34 additions and 30 deletions
|
|
@ -438,9 +438,17 @@ class ChatGPTClient extends BaseClient {
|
||||||
|
|
||||||
if (message.eventType === 'text-generation' && message.text) {
|
if (message.eventType === 'text-generation' && message.text) {
|
||||||
onTokenProgress(message.text);
|
onTokenProgress(message.text);
|
||||||
} else if (message.eventType === 'stream-end' && message.response) {
|
reply += message.text;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
Cohere API Chinese Unicode character replacement hotfix.
|
||||||
|
Should be un-commented when the following issue is resolved:
|
||||||
|
https://github.com/cohere-ai/cohere-typescript/issues/151
|
||||||
|
|
||||||
|
else if (message.eventType === 'stream-end' && message.response) {
|
||||||
reply = message.response.text;
|
reply = message.response.text;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
return reply;
|
return reply;
|
||||||
|
|
|
||||||
|
|
@ -27,26 +27,25 @@ function getMatchingSensitivePatterns(valueStr) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Redacts sensitive information from a console message.
|
* Redacts sensitive information from a console message and trims it to a specified length if provided.
|
||||||
*
|
|
||||||
* @param {string} str - The console message to be redacted.
|
* @param {string} str - The console message to be redacted.
|
||||||
* @returns {string} - The redacted console message.
|
* @param {number} [trimLength] - The optional length at which to trim the redacted message.
|
||||||
|
* @returns {string} - The redacted and optionally trimmed console message.
|
||||||
*/
|
*/
|
||||||
function redactMessage(str) {
|
function redactMessage(str, trimLength) {
|
||||||
if (!str) {
|
if (!str) {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
const patterns = getMatchingSensitivePatterns(str);
|
const patterns = getMatchingSensitivePatterns(str);
|
||||||
|
|
||||||
if (patterns.length === 0) {
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
patterns.forEach((pattern) => {
|
patterns.forEach((pattern) => {
|
||||||
str = str.replace(pattern, '$1[REDACTED]');
|
str = str.replace(pattern, '$1[REDACTED]');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (trimLength !== undefined && str.length > trimLength) {
|
||||||
|
return `${str.substring(0, trimLength)}...`;
|
||||||
|
}
|
||||||
|
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -340,29 +340,26 @@ async function processRequiredActions(client, requiredActions) {
|
||||||
currentAction.toolInput = currentAction.toolInput.input;
|
currentAction.toolInput = currentAction.toolInput.input;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
const handleToolError = (error) => {
|
||||||
const promise = tool
|
|
||||||
._call(currentAction.toolInput)
|
|
||||||
.then(handleToolOutput)
|
|
||||||
.catch((error) => {
|
|
||||||
logger.error(`Error processing tool ${currentAction.tool}`, error);
|
|
||||||
return {
|
|
||||||
tool_call_id: currentAction.toolCallId,
|
|
||||||
output: `Error processing tool ${currentAction.tool}: ${redactMessage(error.message)}`,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
promises.push(promise);
|
|
||||||
} catch (error) {
|
|
||||||
logger.error(
|
logger.error(
|
||||||
`tool_call_id: ${currentAction.toolCallId} | Error processing tool ${currentAction.tool}`,
|
`tool_call_id: ${currentAction.toolCallId} | Error processing tool ${currentAction.tool}`,
|
||||||
error,
|
error,
|
||||||
);
|
);
|
||||||
promises.push(
|
return {
|
||||||
Promise.resolve({
|
tool_call_id: currentAction.toolCallId,
|
||||||
tool_call_id: currentAction.toolCallId,
|
output: `Error processing tool ${currentAction.tool}: ${redactMessage(error.message, 256)}`,
|
||||||
error: error.message,
|
};
|
||||||
}),
|
};
|
||||||
);
|
|
||||||
|
try {
|
||||||
|
const promise = tool
|
||||||
|
._call(currentAction.toolInput)
|
||||||
|
.then(handleToolOutput)
|
||||||
|
.catch(handleToolError);
|
||||||
|
promises.push(promise);
|
||||||
|
} catch (error) {
|
||||||
|
const toolOutputError = handleToolError(error);
|
||||||
|
promises.push(Promise.resolve(toolOutputError));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -367,7 +367,7 @@ export default function useSSE(submission: TSubmission | null, index = 0) {
|
||||||
if (!data) {
|
if (!data) {
|
||||||
const convoId = conversationId ?? v4();
|
const convoId = conversationId ?? v4();
|
||||||
const errorResponse = parseErrorResponse({
|
const errorResponse = parseErrorResponse({
|
||||||
text: 'Error connecting to server',
|
text: 'Error connecting to server, try refreshing the page.',
|
||||||
...submission,
|
...submission,
|
||||||
conversationId: convoId,
|
conversationId: convoId,
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue