Agent Callbacks
Register global callbacks for display events and approval requests.Display Callbacks
Copy
import { registerDisplayCallback, DisplayTypes } from 'praisonai';
// Register callback for agent output
registerDisplayCallback(DisplayTypes.AGENT_OUTPUT, (data) => {
console.log(`[${data.agentName}] ${data.content}`);
});
// Register callback for tool calls
registerDisplayCallback(DisplayTypes.TOOL_CALL, (data) => {
console.log(`Tool: ${data.toolName}`);
});
// Async callback
registerDisplayCallback(DisplayTypes.LLM_RESPONSE, async (data) => {
await saveToDatabase(data);
}, true); // isAsync = true
Display Types
Copy
import { DisplayTypes } from 'praisonai';
// Agent events
DisplayTypes.AGENT_OUTPUT // Agent response
DisplayTypes.AGENT_THINKING // Agent reasoning
// Tool events
DisplayTypes.TOOL_CALL // Before tool execution
DisplayTypes.TOOL_RESULT // After tool execution
// LLM events
DisplayTypes.LLM_REQUEST // Before LLM call
DisplayTypes.LLM_RESPONSE // After LLM call
// Status events
DisplayTypes.ERROR // Error occurred
DisplayTypes.WARNING // Warning
DisplayTypes.INFO // Information
DisplayTypes.DEBUG // Debug info
// Workflow events
DisplayTypes.WORKFLOW_START // Workflow started
DisplayTypes.WORKFLOW_COMPLETE // Workflow done
DisplayTypes.STEP_START // Step started
DisplayTypes.STEP_COMPLETE // Step done
Approval Callbacks
Request human approval for risky operations:Copy
import { registerApprovalCallback, requestApproval } from 'praisonai';
// Register approval handler
registerApprovalCallback(async (request) => {
console.log(`Approval needed: ${request.action}`);
console.log(`Risk level: ${request.risk}`);
console.log(`Arguments:`, request.arguments);
// Auto-approve low risk
if (request.risk === 'low') {
return { approved: true };
}
// For higher risk, prompt user
const answer = await promptUser(`Approve ${request.action}?`);
return {
approved: answer === 'yes',
reason: answer === 'yes' ? undefined : 'User denied'
};
});
// Request approval somewhere in your code
const decision = await requestApproval({
action: 'delete_file',
arguments: { path: '/important/file.txt' },
risk: 'high',
toolName: 'file_operations',
description: 'Delete an important file'
});
if (decision.approved) {
// Proceed with operation
} else {
console.log('Denied:', decision.reason);
}
Risk Levels
Copy
type RiskLevel = 'low' | 'medium' | 'high' | 'critical';
// low: Safe operations, usually auto-approved
// medium: Some caution needed
// high: Requires explicit approval
// critical: Always requires human confirmation
Callback Management
Copy
import {
registerDisplayCallback,
unregisterDisplayCallback,
getRegisteredDisplayTypes,
clearAllCallbacks
} from 'praisonai';
// Register
const handler = (data) => console.log(data);
registerDisplayCallback('agent_output', handler);
// Check registered types
const types = getRegisteredDisplayTypes();
console.log('Registered:', types);
// Unregister specific callback
unregisterDisplayCallback('agent_output', handler);
// Clear all callbacks
clearAllCallbacks();
Execute Callbacks
Copy
import { executeCallback, executeSyncCallback } from 'praisonai';
// Execute async (preferred)
await executeCallback('agent_output', {
content: 'Hello!',
agentName: 'Assistant'
});
// Execute sync only
executeSyncCallback('agent_output', {
content: 'Hello!',
agentName: 'Assistant'
});
Related
- Hooks Manager - Operation hooks
- Workflow Hooks - Workflow lifecycle
- Guardrails - Input/output validation

