# config-tests-per-provider (Isolated Test Suites)

This example demonstrates how to run different tests against different providers in a single evaluation using the `providers` filter on test cases.

## What You'll Learn

- How to filter which providers run specific tests
- How to run separate test suites without cross-pollination
- Using wildcards and labels for provider matching
- Using `defaultTest` to set provider filters globally

## Setup

```bash
npx promptfoo@latest init --example config-tests-per-provider
npx promptfoo@latest eval
```

## The Problem

Without filtering, promptfoo creates a cross-product of all tests × providers. If you have 2 tests and 2 providers, you get 4 test cases. This example shows how to run specific tests only against specific providers.

## Features Demonstrated

### Provider Filtering

Each test case can specify which providers it should run against:

```yaml
tests:
  - vars:
      question: 'Quick math question'
    providers:
      - fast-model # Only runs on fast-model
    assert:
      - type: latency
        threshold: 2000

  - vars:
      question: 'Complex reasoning'
    providers:
      - smart-model # Only runs on smart-model
```

### Matching Patterns

The `providers` filter supports multiple matching patterns:

| Pattern  | Example        | Matches                               |
| -------- | -------------- | ------------------------------------- |
| Label    | `fast-model`   | Provider with `label: fast-model`     |
| Exact ID | `openai:gpt-4` | Provider with that exact ID           |
| Wildcard | `openai:*`     | All providers starting with `openai:` |
| Prefix   | `openai`       | All providers starting with `openai:` |

### Default Filters

Use `defaultTest.providers` to apply filters to all tests:

```yaml
defaultTest:
  providers:
    - openai:* # All tests default to OpenAI only

tests:
  - vars:
      question: 'Question 1'
  - vars:
      question: 'Question 2'
    providers:
      - anthropic:* # Override for this test only
```

## Result

Instead of 6 test cases (3 tests × 2 providers), this example runs exactly 3 test cases:

- Quick facts test → fast-model only
- Complex reasoning test → smart-model only
- Basic test → both providers

## Learn More

- [Test Case Configuration](/docs/configuration/test-cases#filtering-tests-by-provider)
- [Provider Configuration](/docs/configuration/providers)
