# eval-image-classification (Image Classification Example with Promptfoo)

You can run this example with:

```bash
npx promptfoo@latest init --example eval-image-classification
cd eval-image-classification
```

This example demonstrates how to use Promptfoo for image classification tasks using the Fashion MNIST dataset. The example uses GPT-4o and GPT-4o-mini with a structured json schema to analyze images, including classification, color analysis, and additional attributes.

## Getting Started

1. Set up your OpenAI API key:

   ```sh
   export OPENAI_API_KEY='your-api-key'
   ```

2. Run the evaluation:

   ```sh
   npx promptfoo@latest eval
   ```

3. View the results:

   ```sh
   npx promptfoo@latest view
   ```

4. Optionally, re-generate or update the dataset:

   A CSV with 10 sample images is included, so you can skip regeneration and its Python dependencies.

   For regeneration, use CPython 3.12 (recommended) or 3.11. Pillow 13 requires Python 3.11 or newer, while the pinned NumPy 1.26.4 wheels limit this setup to Python 3.11–3.12.

   ```sh
   python3.12 -m venv .venv
   source .venv/bin/activate
   python -m pip install -r requirements.txt
   python dataset_gen.py
   ```

   This script creates a CSV file with 100 random images from the Fashion MNIST dataset and their labels.

   To check dataset encoding and JPEG safety without downloading Fashion MNIST or calling a model, run:

   ```sh
   python -m unittest discover -s . -p 'test_dataset_gen.py' -v
   ```

5. Experiment with the configuration:
   - Modify the JSON schema in `promptfooconfig.yaml` to add or adjust required fields
   - Try different models such as llama3.2 or Claude Sonnet 5 by changing the provider in the config
   - Adjust the system prompt to improve classification accuracy
   - Add additional assertions to validate model outputs
