Files
2026-07-13 13:34:48 +08:00

81 lines
2.5 KiB
TypeScript

/**
* Example 15: Stack Trace Handling and Error Reporting
*
* This example demonstrates LLMz's error handling and stack trace reporting capabilities.
* It shows how to:
* - Handle tool execution errors gracefully
* - Access detailed stack trace information for debugging
* - Implement error reporting and diagnostics
* - Use execution status checking for error handling
* - Display formatted error information to users
*
* Key concepts:
* - Error result status checking with isError()
* - Execution error details and stack traces
* - Tool error propagation and handling
* - Debugging information access
* - Error display and formatting patterns
*/
import { Client } from '@botpress/client'
import { z } from '@bpinternal/zui'
import chalk from 'chalk'
import { execute, Exit, Tool } from 'llmz'
import { box } from '../utils/box'
// Initialize Botpress client
const client = new Client({
botId: process.env.BOTPRESS_BOT_ID!,
token: process.env.BOTPRESS_TOKEN!,
})
// Demo tool that intentionally throws an error
// This demonstrates how errors in tools are handled and reported
const demo = new Tool({
name: 'demo',
async handler() {
// Throw an error to demonstrate stack trace handling
// In production, this could be any kind of tool failure
throw new Error('This is a demo error to test stack traces')
},
})
// Exit condition (won't be reached due to the error)
const exit = new Exit({
name: 'exit',
description: 'Exit the program',
schema: z.object({
message: z.string().describe('Output message'),
}),
})
// Execute with a tool that will fail
const result = await execute({
options: { loop: 1 }, // Limit to 1 iteration to avoid retry loops
instructions: 'call the "demo" tool',
tools: [demo],
exits: [exit],
client,
})
// Verify that we got an error as expected
if (!result.isError()) {
console.error('Expected an error due to the demo tool, but got:', result.status)
process.exit(1)
}
// Access and display detailed error information
// LLMz provides comprehensive error details including stack traces
if (result.iteration?.status.type === 'execution_error') {
console.log(
box([
chalk.red('An error occurred during the execution:'),
// Display the error message
result.iteration.status.execution_error.message,
// Display the complete stack trace for debugging
// LLMz preserves stack traces while sanitizing internal framework details
...result.iteration.status.execution_error.stack.split('\n'),
])
)
}