Bugfix/Overrideconfig Analytics in AgentflowV2 (#4599)

* fix(utils/buildAgentflow): enhance analytic handler configuration to support overrides

* fix(agentflow): integrate analytic handlers for tool execution tracking
This commit is contained in:
Henry Heng
2025-06-07 01:53:31 +01:00
committed by GitHub
parent 7dfa269502
commit 02a6753498
2 changed files with 34 additions and 1 deletions
@@ -1401,10 +1401,19 @@ class Agent_Agentflow implements INode {
return { response, usedTools, sourceDocuments, artifacts, totalTokens, isWaitingForHumanInput: true }
}
let toolIds: ICommonObject | undefined
if (options.analyticHandlers) {
toolIds = await options.analyticHandlers.onToolStart(toolCall.name, toolCall.args, options.parentTraceIds)
}
try {
//@ts-ignore
let toolOutput = await selectedTool.call(toolCall.args, { signal: abortController?.signal }, undefined, flowConfig)
if (options.analyticHandlers && toolIds) {
await options.analyticHandlers.onToolEnd(toolIds, toolOutput)
}
// Extract source documents if present
if (typeof toolOutput === 'string' && toolOutput.includes(SOURCE_DOCUMENTS_PREFIX)) {
const [output, docs] = toolOutput.split(SOURCE_DOCUMENTS_PREFIX)
@@ -1459,6 +1468,10 @@ class Agent_Agentflow implements INode {
toolOutput
})
} catch (e) {
if (options.analyticHandlers && toolIds) {
await options.analyticHandlers.onToolEnd(toolIds, e)
}
console.error('Error invoking tool:', e)
usedTools.push({
tool: selectedTool.name,
@@ -1650,10 +1663,19 @@ class Agent_Agentflow implements INode {
toolsInstance = toolsInstance.filter((tool) => tool.name !== toolCall.name)
}
if (humanInput.type === 'proceed') {
let toolIds: ICommonObject | undefined
if (options.analyticHandlers) {
toolIds = await options.analyticHandlers.onToolStart(toolCall.name, toolCall.args, options.parentTraceIds)
}
try {
//@ts-ignore
let toolOutput = await selectedTool.call(toolCall.args, { signal: abortController?.signal }, undefined, flowConfig)
if (options.analyticHandlers && toolIds) {
await options.analyticHandlers.onToolEnd(toolIds, toolOutput)
}
// Extract source documents if present
if (typeof toolOutput === 'string' && toolOutput.includes(SOURCE_DOCUMENTS_PREFIX)) {
const [output, docs] = toolOutput.split(SOURCE_DOCUMENTS_PREFIX)
@@ -1708,6 +1730,10 @@ class Agent_Agentflow implements INode {
toolOutput
})
} catch (e) {
if (options.analyticHandlers && toolIds) {
await options.analyticHandlers.onToolEnd(toolIds, e)
}
console.error('Error invoking tool:', e)
usedTools.push({
tool: selectedTool.name,
+8 -1
View File
@@ -1503,7 +1503,14 @@ export const executeAgentFlow = async ({
try {
if (chatflow.analytic) {
analyticHandlers = AnalyticHandler.getInstance({ inputs: {} } as any, {
// Override config analytics
let analyticInputs: ICommonObject = {}
if (overrideConfig?.analytics && Object.keys(overrideConfig.analytics).length > 0) {
analyticInputs = {
...overrideConfig.analytics
}
}
analyticHandlers = AnalyticHandler.getInstance({ inputs: { analytics: analyticInputs } } as any, {
orgId,
workspaceId,
appDataSource,