0d3cb498a3
Deploy local.promptfoo.app / Deploy to Cloudflare Pages (push) Waiting to run
Test and Publish Multi-arch Docker Image / test (push) Waiting to run
Test and Publish Multi-arch Docker Image / build-docker-and-push-digests (map[digest-suffix:linux-amd64 platform:linux/amd64 runner:ubuntu-latest]) (push) Blocked by required conditions
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) Blocked by required conditions
Test and Publish Multi-arch Docker Image / merge-docker-digests (push) Blocked by required conditions
Test and Publish Multi-arch Docker Image / Attest Multi-arch Image (push) Blocked by required conditions
CI / Shell Format Check (push) Waiting to run
CI / Check Ruby (3.4) (push) Waiting to run
CI / CI Config (push) Waiting to run
CI / Test on Node ${{ matrix.node }} and ${{ matrix.os }}${{ matrix.shard && format(' (shard {0}/3)', matrix.shard) || '' }} (push) Blocked by required conditions
CI / Build on Node ${{ matrix.node }} (push) Blocked by required conditions
CI / Style Check (push) Waiting to run
CI / Generate Assets (push) Waiting to run
CI / Check Python (3.14) (push) Waiting to run
CI / Check Python (3.9) (push) Waiting to run
CI / Build Docs (push) Waiting to run
CI / Code Scan Action (push) Waiting to run
CI / Site tests (push) Waiting to run
CI / webui tests (push) Waiting to run
CI / Run Integration Tests (push) Waiting to run
CI / Run Smoke Tests (push) Waiting to run
CI / Go Tests (push) Waiting to run
CI / Share Test (push) Waiting to run
CI / Redteam (Production API) (push) Waiting to run
CI / Redteam (Staging API) (push) Waiting to run
CI / GitHub Actions Lint (push) Waiting to run
CI / Check Ruby (3.0) (push) Waiting to run
release-please / release-please (push) Waiting to run
release-please / build (push) Blocked by required conditions
release-please / publish-npm (push) Blocked by required conditions
release-please / publish-npm-backfill (push) Waiting to run
release-please / docker (push) Blocked by required conditions
release-please / publish-code-scan-action (push) Blocked by required conditions
release-please / attest-code-scan-action (push) Blocked by required conditions
Validate Renovate Config / Validate Renovate Configuration (push) Waiting to run
config-custom-prompt-function (Prompt Functions and Format Examples)
You can run this example with:
npx promptfoo@latest init --example config-custom-prompt-function
cd config-custom-prompt-function
This example demonstrates the full range of prompt formats supported by promptfoo, with special focus on prompt functions that can return both content and configuration.
Quick Start
# Copy this example to your project
npx promptfoo@latest init --example config-custom-prompt-function
# Set required API keys
export OPENAI_API_KEY=your_openai_key
export ANTHROPIC_API_KEY=your_anthropic_key
# Run the evaluation
npx promptfoo@latest eval
# View results
npx promptfoo@latest view
What This Example Shows
Supported Prompt Formats
- Raw text prompts
- File-based prompts (txt, yaml, json, jsonl, md, j2)
- Glob patterns for multiple files
- JSON chat formats
- Markdown formatted prompts
- Jinja2 template files
Prompt Functions
- JavaScript prompt functions (CommonJS and ESM)
- TypeScript prompt functions
- Python prompt functions and class methods
- Multiple functions in a single file
- Dynamic configuration - returning
{ prompt, config }objects that override provider settings
Example Structure
prompt.txt,prompt.yaml, etc. - Various prompt file formatsprompt.j2- Jinja2 template formatprompt_chat.js/ts- Chat format examplesprompt_multiple.js- Multiple functions in one fileprompt_esm.mjs- ESM module formatprompt_python.py- Python examplesprompt_config.js/py- Functions returning dynamic configurationsubfolder/- Demonstrates nested file structurespromptfooconfig.yaml- Complete configuration showing all prompt types
Configuration Features
- Dynamic adjustment of model parameters (temperature, tokens) based on content
- Content-aware JSON schema formatting
- Configuration merging (function values override provider defaults)
- Provider-specific prompt configurations
- Multiple provider comparisons (OpenAI and Anthropic)
Customization
To adapt this example:
- Explore different prompt formats to find what works best for your use case
- Use dynamic configurations to optimize model behavior based on input context
- Compare how different providers respond to the same prompts
- Create your own prompt functions for advanced use cases
Documentation
Learn more about: