Event Emitter
The Event Emitter utility provides a flexible event system for inter-component communication and framework lifecycle management in Agent Forge.
Overview
The Event Emitter is used throughout Agent Forge for:
- LLM response streaming
- Agent lifecycle events
- Tool execution notifications
- Framework status updates
Basic Usage
import { EventEmitter } from "agent-forge";
const eventEmitter = new EventEmitter();
// Listen for events
eventEmitter.on('custom-event', (data) => {
console.log('Event received:', data);
});
// Emit events
eventEmitter.emit('custom-event', { message: 'Hello World' });
Event Types
Framework Events
framework-init
- Framework initializationframework-ready
- Framework ready for useframework-shutdown
- Framework shutdown
Agent Events
agent-run-start
- Agent execution beginsagent-run-complete
- Agent execution completesagent-error
- Agent execution error
LLM Events
llm-request-start
- LLM request beginsllm-request-complete
- LLM request completesllm-stream-chunk
- Streaming response chunkllm-stream-complete
- Streaming response complete
Tool Events
tool-execute-start
- Tool execution beginstool-execute-complete
- Tool execution completestool-error
- Tool execution error
Methods
on(event, listener)
Register an event listener.
eventEmitter.on('event-name', (data) => {
// Handle event
});
emit(event, data)
Emit an event with optional data.
eventEmitter.emit('event-name', { key: 'value' });
off(event, listener)
Remove an event listener.
const listener = (data) => console.log(data);
eventEmitter.on('event-name', listener);
eventEmitter.off('event-name', listener);
once(event, listener)
Listen for an event only once.
eventEmitter.once('one-time-event', (data) => {
console.log('This will only run once');
});
Integration Examples
LLM Streaming
const llm = await LLM.create("openai", { apiKey: process.env.OPENAI_API_KEY });
const eventEmitter = llm.getEventEmitter();
eventEmitter.on('llm-stream-chunk', (chunk) => {
process.stdout.write(chunk.content);
});
const response = await llm.chatStream({
messages: [{ role: "user", content: "Tell me a story" }],
model: "gpt-4",
onChunk: (chunk) => {
// Additional chunk processing
}
});
Agent Monitoring
const agent = new Agent(config);
const eventEmitter = agent.getLLMProvider()?.getEventEmitter();
if (eventEmitter) {
eventEmitter.on('agent-run-start', (data) => {
console.log(`Agent ${data.agentName} started`);
});
eventEmitter.on('agent-run-complete', (data) => {
console.log(`Agent ${data.agentName} completed in ${data.duration}ms`);
});
}
Best Practices
- Use descriptive event names
- Keep event listeners lightweight
- Remove listeners when no longer needed
- Handle errors in event listeners
- Use once() for one-time events