# config-result-hooks (Process Evaluation Results)

This example shows how to use extension hooks to process evaluation results programmatically. Use this to:

- Send metrics to monitoring systems
- Trigger alerts based on success rates
- Export data to custom formats
- Integrate with CI/CD pipelines

## Quick Start

```bash
npx promptfoo@latest init --example config-result-hooks
npx promptfoo@latest eval
```

## Usage

### Via Configuration File

```yaml
# promptfooconfig.yaml
extensions:
  - file://result-handler.js:afterAll
```

### Via CLI Flag

```bash
# Run with a one-off extension
promptfoo eval -x file://result-handler.js:afterAll

# Combine with config file extensions
promptfoo eval -x file://alert-on-failure.js:afterAll
```

## Extension Hooks

Extensions support four lifecycle hooks:

| Hook         | When Called              | Use Case                           |
| ------------ | ------------------------ | ---------------------------------- |
| `beforeAll`  | Before evaluation starts | Modify test suite, validate config |
| `beforeEach` | Before each test case    | Customize test parameters          |
| `afterEach`  | After each test case     | Process individual results         |
| `afterAll`   | After all tests complete | Aggregate results, send reports    |

## afterAll Context

The `afterAll` hook receives:

```typescript
{
  evalId: string;              // Unique evaluation ID
  config: UnifiedConfig;       // Full evaluation configuration
  suite: TestSuite;            // Test suite that was evaluated
  results: EvaluateResult[];   // All individual test results
  prompts: CompletedPrompt[];  // Prompts with metrics
}
```

## Examples in this Directory

- `result-handler.js` - JavaScript handler with monitoring examples
- `result-handler.py` - Python handler with webhook integration
- `promptfooconfig.yaml` - Configuration using the extension
