# config-stateful-session-management (Stateful Session Management)

This example demonstrates how to use server-generated UUIDs to identify test cases and maintain server-side conversation history when a test case has multiple turns. It is useful when your provider/target generates unique identifiers to stitch together messages into a conversation "threads".

## Quick Start

```sh
npx promptfoo@latest init --example config-stateful-session-management
cd config-stateful-session-management
```

## Requirements

- Node.js >=22.22.0 (Node.js 24 LTS recommended)
- An OpenAI API key in `OPENAI_API_KEY`

## Setup

1. Install dependencies:

   ```bash
   npm install
   ```

2. Start the demo server (in one terminal):

   ```bash
   export OPENAI_API_KEY=your-api-key && npm run server
   ```

3. Run the eval (in another terminal):

   ```bash
   promptfoo redteam eval -c redteam.yaml
   ```

## How it works

- `server.js`: A minimal Express server that manages conversation history and forwards inference requests to OpenAI.
- `hooks.js`: An [extension hook](https://www.promptfoo.dev/docs/configuration/reference/#extension-hooks) that requests a new `sessionId` from the server for each test case and cleans up the session after the test case completes.
- `promptfooconfig.yaml`: A red team configuration that includes single and multi-turn strategies and uses an HTTP provider to interface with the Express server.
- `redteam.yaml`: The generated red team test cases to evaluate against.
