chore: import upstream snapshot with attribution
CI / Shell Format Check (push) Has been cancelled
CI / Check Ruby (3.4) (push) Has been cancelled
CI / CI Config (push) Has been cancelled
CI / Test on Node ${{ matrix.node }} and ${{ matrix.os }}${{ matrix.shard && format(' (shard {0}/3)', matrix.shard) || '' }} (push) Has been cancelled
CI / Build on Node ${{ matrix.node }} (push) Has been cancelled
CI / Style Check (push) Has been cancelled
CI / Generate Assets (push) Has been cancelled
CI / Check Python (3.14) (push) Has been cancelled
CI / Check Python (3.9) (push) Has been cancelled
CI / Build Docs (push) Has been cancelled
CI / Code Scan Action (push) Has been cancelled
CI / Site tests (push) Has been cancelled
CI / webui tests (push) Has been cancelled
CI / Run Integration Tests (push) Has been cancelled
CI / Run Smoke Tests (push) Has been cancelled
CI / Go Tests (push) Has been cancelled
CI / Share Test (push) Has been cancelled
CI / Redteam (Production API) (push) Has been cancelled
CI / Redteam (Staging API) (push) Has been cancelled
CI / GitHub Actions Lint (push) Has been cancelled
CI / Check Ruby (3.0) (push) Has been cancelled
release-please / release-please (push) Has been cancelled
release-please / build (push) Has been cancelled
release-please / publish-npm (push) Has been cancelled
release-please / publish-npm-backfill (push) Has been cancelled
release-please / docker (push) Has been cancelled
release-please / publish-code-scan-action (push) Has been cancelled
release-please / attest-code-scan-action (push) Has been cancelled
Deploy local.promptfoo.app / Deploy to Cloudflare Pages (push) Has been cancelled
Test and Publish Multi-arch Docker Image / test (push) Has been cancelled
Test and Publish Multi-arch Docker Image / build-docker-and-push-digests (map[digest-suffix:linux-amd64 platform:linux/amd64 runner:ubuntu-latest]) (push) Has been cancelled
Test and Publish Multi-arch Docker Image / build-docker-and-push-digests (map[digest-suffix:linux-arm64 platform:linux/arm64 runner:ubuntu-24.04-arm]) (push) Has been cancelled
Test and Publish Multi-arch Docker Image / merge-docker-digests (push) Has been cancelled
Test and Publish Multi-arch Docker Image / Attest Multi-arch Image (push) Has been cancelled
Validate Renovate Config / Validate Renovate Configuration (push) Has been cancelled
CI / Shell Format Check (push) Has been cancelled
CI / Check Ruby (3.4) (push) Has been cancelled
CI / CI Config (push) Has been cancelled
CI / Test on Node ${{ matrix.node }} and ${{ matrix.os }}${{ matrix.shard && format(' (shard {0}/3)', matrix.shard) || '' }} (push) Has been cancelled
CI / Build on Node ${{ matrix.node }} (push) Has been cancelled
CI / Style Check (push) Has been cancelled
CI / Generate Assets (push) Has been cancelled
CI / Check Python (3.14) (push) Has been cancelled
CI / Check Python (3.9) (push) Has been cancelled
CI / Build Docs (push) Has been cancelled
CI / Code Scan Action (push) Has been cancelled
CI / Site tests (push) Has been cancelled
CI / webui tests (push) Has been cancelled
CI / Run Integration Tests (push) Has been cancelled
CI / Run Smoke Tests (push) Has been cancelled
CI / Go Tests (push) Has been cancelled
CI / Share Test (push) Has been cancelled
CI / Redteam (Production API) (push) Has been cancelled
CI / Redteam (Staging API) (push) Has been cancelled
CI / GitHub Actions Lint (push) Has been cancelled
CI / Check Ruby (3.0) (push) Has been cancelled
release-please / release-please (push) Has been cancelled
release-please / build (push) Has been cancelled
release-please / publish-npm (push) Has been cancelled
release-please / publish-npm-backfill (push) Has been cancelled
release-please / docker (push) Has been cancelled
release-please / publish-code-scan-action (push) Has been cancelled
release-please / attest-code-scan-action (push) Has been cancelled
Deploy local.promptfoo.app / Deploy to Cloudflare Pages (push) Has been cancelled
Test and Publish Multi-arch Docker Image / test (push) Has been cancelled
Test and Publish Multi-arch Docker Image / build-docker-and-push-digests (map[digest-suffix:linux-amd64 platform:linux/amd64 runner:ubuntu-latest]) (push) Has been cancelled
Test and Publish Multi-arch Docker Image / build-docker-and-push-digests (map[digest-suffix:linux-arm64 platform:linux/arm64 runner:ubuntu-24.04-arm]) (push) Has been cancelled
Test and Publish Multi-arch Docker Image / merge-docker-digests (push) Has been cancelled
Test and Publish Multi-arch Docker Image / Attest Multi-arch Image (push) Has been cancelled
Validate Renovate Config / Validate Renovate Configuration (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
# config-external-defaulttest (External Default Test Configuration)
|
||||
|
||||
This example demonstrates how to use the `file://` syntax to load `defaultTest` configuration from an external file.
|
||||
|
||||
You can run this example with:
|
||||
|
||||
```bash
|
||||
npx promptfoo@latest init --example config-external-defaulttest
|
||||
cd config-external-defaulttest
|
||||
```
|
||||
|
||||
## Overview
|
||||
|
||||
Instead of defining `defaultTest` inline in your main configuration file, you can reference an external YAML or JSON file. This is useful for:
|
||||
|
||||
- Sharing common test configurations across multiple projects
|
||||
- Keeping your main config file cleaner and more focused
|
||||
- Managing complex test configurations separately
|
||||
- Version controlling shared test configurations independently
|
||||
|
||||
## Structure
|
||||
|
||||
```text
|
||||
external-defaulttest/
|
||||
├── promptfooconfig.yaml # Main configuration file
|
||||
├── shared/
|
||||
│ └── defaultTest.yaml # Shared default test configuration
|
||||
└── README.md # This file
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
### Inline defaultTest (traditional approach)
|
||||
|
||||
```yaml
|
||||
# Traditional inline approach
|
||||
defaultTest:
|
||||
assert:
|
||||
- type: cost
|
||||
threshold: 0.01
|
||||
- type: latency
|
||||
threshold: 5000
|
||||
options:
|
||||
provider: openai:o4-mini
|
||||
```
|
||||
|
||||
### External defaultTest (new approach)
|
||||
|
||||
```yaml
|
||||
# New external file approach
|
||||
defaultTest: file://shared/defaultTest.yaml
|
||||
```
|
||||
|
||||
The external file (`shared/defaultTest.yaml`) contains the same configuration that would normally be inline.
|
||||
|
||||
## Benefits
|
||||
|
||||
1. **Reusability**: Share the same defaultTest configuration across multiple prompt configurations
|
||||
2. **Maintainability**: Update test defaults in one place
|
||||
3. **Organization**: Keep complex test configurations separate from your main config
|
||||
4. **Collaboration**: Teams can maintain shared test standards in a central location
|
||||
|
||||
## Running the Example
|
||||
|
||||
```bash
|
||||
cd examples/config-external-defaulttest
|
||||
npx promptfoo@latest eval
|
||||
```
|
||||
|
||||
The external defaultTest configuration will be loaded automatically and applied to all test cases that don't override the defaults.
|
||||
|
||||
## Advanced Usage
|
||||
|
||||
You can also reference defaultTest files from parent directories or absolute paths:
|
||||
|
||||
```yaml
|
||||
# Reference from parent directory
|
||||
defaultTest: file://../shared-configs/defaultTest.yaml
|
||||
|
||||
# Reference from project root
|
||||
defaultTest: file://configs/testing/defaultTest.yaml
|
||||
```
|
||||
@@ -0,0 +1,53 @@
|
||||
# yaml-language-server: $schema=https://promptfoo.dev/config-schema.json
|
||||
description: External defaultTest configuration example
|
||||
|
||||
# Load default test configuration from external file
|
||||
defaultTest: file://shared/defaultTest.yaml
|
||||
|
||||
prompts:
|
||||
- |
|
||||
You are a helpful assistant that answers questions concisely.
|
||||
|
||||
User: {{question}}
|
||||
Assistant:
|
||||
|
||||
providers:
|
||||
- openai:o4-mini
|
||||
- openai:gpt-4.1
|
||||
|
||||
tests:
|
||||
# These test cases will inherit all assertions and options from defaultTest
|
||||
- vars:
|
||||
question: What is the capital of France?
|
||||
# Additional assertions specific to this test
|
||||
assert:
|
||||
- type: icontains
|
||||
value: Paris
|
||||
|
||||
- vars:
|
||||
question: Explain photosynthesis in one sentence.
|
||||
assert:
|
||||
- type: contains-any
|
||||
value:
|
||||
- sunlight
|
||||
- plants
|
||||
- energy
|
||||
- carbon dioxide
|
||||
|
||||
- vars:
|
||||
question: What is 2 + 2?
|
||||
assert:
|
||||
- type: icontains
|
||||
value: '4'
|
||||
|
||||
# This test overrides the provider from defaultTest
|
||||
- vars:
|
||||
question: Write a haiku about programming.
|
||||
options:
|
||||
provider: openai:gpt-4.1
|
||||
assert:
|
||||
- type: javascript
|
||||
value: |
|
||||
// Check if output resembles a haiku (3 lines)
|
||||
const lines = output.trim().split('\n').filter(line => line.trim().length > 0);
|
||||
return lines.length === 3 ? 1 : 0;
|
||||
@@ -0,0 +1,38 @@
|
||||
# Shared default test configuration
|
||||
# This file defines common assertions and options that apply to all test cases
|
||||
|
||||
# Default variables that can be overridden by individual tests
|
||||
vars:
|
||||
temperature: 0.7
|
||||
max_tokens: 150
|
||||
|
||||
# Common assertions for all tests
|
||||
assert:
|
||||
# Ensure responses aren't empty
|
||||
- type: not-equals
|
||||
value: ''
|
||||
|
||||
# Check response length
|
||||
- type: javascript
|
||||
value: |
|
||||
// Ensure response is between 1 and 500 characters
|
||||
const length = output.length;
|
||||
return length >= 1 && length <= 500 ? 1 : 0;
|
||||
metric: response_length_check
|
||||
|
||||
# Cost control
|
||||
- type: cost
|
||||
threshold: 0.01 # Max 1 cent per test
|
||||
|
||||
# Default options
|
||||
options:
|
||||
# Default to using o4-mini for all tests
|
||||
provider: openai:o4-mini
|
||||
|
||||
# Transform variables to add timestamp
|
||||
transformVars: 'Object.assign({}, vars, { timestamp: new Date().toISOString(), testId: Math.random().toString(36).substring(7) })'
|
||||
|
||||
# Metadata that gets attached to all tests
|
||||
metadata:
|
||||
suite: 'default-test-example'
|
||||
version: '1.0.0'
|
||||
Reference in New Issue
Block a user