refactor(agents): extract agent log handler for improved clarity and reusability

Refactored the agent log handling logic by extracting it into a dedicated function, `agentLogHandler`, enhancing code clarity and reusability across different modules. Updated the event handlers in both the OpenAI and responses controllers to utilize the new handler, ensuring consistent logging behavior throughout the application.
This commit is contained in:
Danny Avila 2026-03-11 22:50:25 -04:00
parent 1bfc9bfa3a
commit 70fbff4a6d
No known key found for this signature in database
GPG key ID: BF31EEB2C5CA0956
3 changed files with 19 additions and 24 deletions

View file

@ -283,16 +283,7 @@ function getDefaultHandlers({
};
}
handlers[GraphEvents.ON_AGENT_LOG] = {
handle: (_event, data) => {
const logFn = typeof logger[data.level] === 'function' ? logger[data.level] : logger.info;
logFn(`[agents:${data.scope}] ${data.message}`, {
...data.data,
runId: data.runId,
agentId: data.agentId,
});
},
};
handlers[GraphEvents.ON_AGENT_LOG] = { handle: agentLogHandler };
return handlers;
}
@ -717,6 +708,15 @@ function createResponsesToolEndCallback({ req, res, tracker, artifactPromises })
};
}
function agentLogHandler(_event, data) {
const logFn = typeof logger[data.level] === 'function' ? logger[data.level] : logger.info;
logFn(`[agents:${data.scope}] ${data.message}`, {
...data.data,
runId: data.runId,
agentId: data.agentId,
});
}
function markSummarizationUsage(usage, metadata) {
const node = metadata?.langgraph_node;
if (typeof node === 'string' && node.startsWith(GraphNodeKeys.SUMMARIZE)) {
@ -725,8 +725,9 @@ function markSummarizationUsage(usage, metadata) {
}
module.exports = {
agentLogHandler,
getDefaultHandlers,
createToolEndCallback,
createResponsesToolEndCallback,
markSummarizationUsage,
createResponsesToolEndCallback,
};

View file

@ -25,6 +25,7 @@ const { loadAgentTools, loadToolsForExecution } = require('~/server/services/Too
const {
createToolEndCallback,
markSummarizationUsage,
agentLogHandler,
} = require('~/server/controllers/agents/callbacks');
const { findAccessibleResources } = require('~/server/services/PermissionService');
const db = require('~/models');
@ -440,6 +441,7 @@ const OpenAIChatCompletionController = async (req, res) => {
on_chain_stream: createHandler(),
on_chain_end: createHandler(),
on_agent_update: createHandler(),
on_agent_log: { handle: agentLogHandler },
on_custom_event: createHandler(),
// Event-driven tool execution handler
on_tool_execute: createToolExecuteHandler(toolExecuteOptions),

View file

@ -32,8 +32,9 @@ const {
} = require('@librechat/api');
const {
createResponsesToolEndCallback,
createToolEndCallback,
markSummarizationUsage,
createToolEndCallback,
agentLogHandler,
} = require('~/server/controllers/agents/callbacks');
const { loadAgentTools, loadToolsForExecution } = require('~/server/services/ToolService');
const { findAccessibleResources } = require('~/server/services/PermissionService');
@ -50,16 +51,7 @@ function setAppConfig(config) {
appConfig = config;
}
const agentLogHandler = {
handle: (_event, data) => {
const logFn = typeof logger[data.level] === 'function' ? logger[data.level] : logger.info;
logFn(`[agents:${data.scope}] ${data.message}`, {
...data.data,
runId: data.runId,
agentId: data.agentId,
});
},
};
const agentLogHandlerObj = { handle: agentLogHandler };
/**
* Creates a tool loader function for the agent.
@ -471,7 +463,7 @@ const createResponse = async (req, res) => {
on_agent_update: { handle: () => {} },
on_custom_event: { handle: () => {} },
on_tool_execute: createToolExecuteHandler(toolExecuteOptions),
on_agent_log: agentLogHandler,
on_agent_log: agentLogHandlerObj,
...(summarizationConfig?.enabled !== false
? {
on_summarize_start: {
@ -657,7 +649,7 @@ const createResponse = async (req, res) => {
on_agent_update: { handle: () => {} },
on_custom_event: { handle: () => {} },
on_tool_execute: createToolExecuteHandler(toolExecuteOptions),
on_agent_log: agentLogHandler,
on_agent_log: agentLogHandlerObj,
...(summarizationConfig?.enabled !== false
? {
on_summarize_start: { handle: () => {} },