AMHART (Adolescent Mental Health Assessment & Rating Tool) is a pipeline for evaluating LLM performance on adolescent mental health conversations.
The complete pipeline includes 3 primary steps:
- Vignette Creation: Clinical vignettes are generated based on user-specified characteristics using few-shot prompting with prior examples
- Conversation: An LLM acts as the patient from the vignette and converses with the LLM being evaluated
- Grading: Multiple LLM judges grade the conversations against the AMHART criteria
# Create your conda environment
conda create -n amhart
conda activate amhart
conda install pip
# Install dependencies
pip install -r requirements.txt
# Configure your .env file with API keys
cp .env.sample .env
# Edit .env with your API keysOption A: Python Script
python main.pyOption B: Bash Script
./run_pipeline.shThis will:
- ✅ Generate clinical vignettes using few-shot prompting
- ✅ Run conversations where an LLM acts as the patient
- ✅ Grade conversations using multiple LLM judges against AMHART criteria
Each step can be configured in two ways:
-
YAML Configuration Files (recommended): Define all parameters in a config file for reproducibility. You may look at the configs/*/default.yaml for an example.
-
Command-Line Arguments: Override specific parameters or run without a config file
Create clinical vignettes based on user-specified characteristics using few-shot prompting.
python generators/generate_vignettes.py --config configs/vignette_generation/default.yamlOutput: data/vignette_bank/vignette_bank.csv
An LLM acts as the patient from the vignette and converses with the LLM being evaluated.
python generators/converse.py --config configs/conversations/default.yamlOutput: data/conversations/<model_name>/conversation_*.csv
Evaluate conversations against the AMHART criteria (14 therapeutic dimensions).
Grades conversations using multiple LLM judges simultaneously:
python graders/AMHARTGrader.py --config configs/grading/default.yamlIndividual judge evaluation scripts are also available:
# Claude-based grading
python graders/conversation_grader_by_claude.py /path/to/input_csv_dir /path/to/output.csv
# GPT-based grading
python graders/conversation_grader_by_gpt.py /path/to/input_csv_dir /path/to/output.csv
# Gemini-based grading (Jupyter notebook)
# Open and run graders/gemini_batch_prep.ipynbOutput: data/graded_conversations.csv
All configurations are YAML files in configs/:
configs/vignette_generation/default.yaml- Customize: model, number of rounds, diversity threshold, vignette characteristics
configs/conversations/default.yaml- Customize: models (A & B), system prompts, number of rounds
configs/grading/default.yaml- Full conversation grading
AMHART/
├── main.py # Pipeline runner (Python)
├── run_pipeline.sh # Pipeline runner (Bash)
├── generators/
│ ├── generate_vignettes.py # Generate clinical vignettes
│ └── converse.py # Run model conversations
├── graders/
│ ├── AMHARTGrader.py # Multi-judge grading (recommended)
│ ├── conversation_grader_by_claude.py # Single-judge Claude grading
│ ├── conversation_grader_by_gpt.py # Single-judge GPT grading
│ ├── gemini_batch_prep.ipynb # Single-judge Gemini grading
│ └── grading_prompts/ # AMHART criteria prompts
├── configs/
│ ├── vignette_generation/
│ ├── conversations/
│ └── grading/
└── data/
├── vignette_bank/ # Generated vignettes
├── conversations/ # Model conversations
└── prompts_for_generating_vignettes/
# Generate vignettes with custom config
python generators/generate_vignettes.py --config configs/vignette_generation/custom.yaml
# Run conversations with specific models
python generators/converse.py --config configs/conversations/gpt4_vs_claude.yamlAll scripts support both YAML configs and command-line arguments. Command-line args override YAML settings when both are provided.
# Generate vignettes with command-line args (no config file)
python generators/generate_vignettes.py \
--model_name gpt-5 \
--num_rounds 10 \
--generate_n_vignettes 20
# Run conversations with CLI args
python generators/converse.py \
--ModelA gpt-5 \
--ModelB claude-sonnet-4.5 \
--num_rounds 5
# Grade conversations with CLI args
python graders/AMHARTGrader.py \
--config configs/grading/default.yaml
# Mix YAML config with CLI overrides
python graders/AMHARTGrader.py \
--config configs/grading/default.yaml \
--temperature 0.5 # Override just the temperaturedata/vignette_bank/vignette_bank.csv
- Columns:
id,title,vignette
data/conversations/<model>/conversation_<id>_<model>_iter_<n>.csv
- Columns:
turn,role,content
data/graded_conversations.csv
- Columns:
vignette_id,criteria1-14,reasoning1-14,YN_NA1-14,score,percent_score
Make sure your .env file contains:
AZURE_API_BASE_URL=your_azure_endpoint
AZURE_OPENAI_API_KEY=your_azure_key
OPENAI_API_KEY=your_openai_keyRun from the AMHART root directory:
cd /path/to/AMHART
python main.pyMake bash script executable:
chmod +x run_pipeline.shUse regressions/long_data.py to take .csvs that have been graded by graders/AMHARTGrader.py and convert them into long-form for regression analysis.
Use visualizations/charts.Rmd to create figures with this long data.