Skip to content

Promptfoo config — CI eval gate

Source: platform/packages/eval/promptfooconfig.yaml · rendered from main on every deploy — edit in the repo, not here

platform/packages/eval/promptfooconfig.yaml
# Puccha RAG eval — golden Q&A gate (ADR-0006 thresholds: faithfulness ≥ 0.85).
#
# Runs against the LIVE `perftest` tenant (real Refund/Shipping doc, embedded in
# Vectorize on dev/uat → retrieval actually works). The original certogo set was
# orphaned by the legacy→new-account migration and is archived under
# golden-sets/_archive-certogo/ pending a corpus re-seed (see that README).
#
# Usage:
# pnpm eval # -> dev perftest (default below)
# PUCCHA_API_URL=https://app-uat.puccha.ai/c/perftest pnpm eval
# Admin: triggered from dashboard "Run eval" button
#
# NOTE: the default filter uses nunjucks `or` (NOT the Liquid `| default:` syntax,
# which promptfoo 0.121's strict nunjucks rejects with a "Column N" parse error).
description: 'Puccha RAG evaluation — perftest Refund/Shipping (live gate)'
providers:
- id: http
config:
url: '{{ PUCCHA_API_URL or "https://app-dev.puccha.ai/c/perftest" }}/api/answer'
method: POST
headers:
Content-Type: application/json
body:
query: '{{query}}'
locale: '{{locale}}'
mode: answer
responseParser: 'json.answer'
prompts:
- '{{query}}'
tests: './golden-sets/perftest/*.yaml'
# Grader for the per-test llm-rubric asserts. Faithfulness/citation asserts live
# per-test (in the golden sets) so refusal cases aren't wrongly failed for not
# citing — do NOT add global content asserts here.
#
# Grades via Anthropic direct (ANTHROPIC_API_KEY), NOT OpenRouter: chat moved to
# the AI-Gateway→Anthropic native path (ADR-0173), leaving the OpenRouter key a
# fallback that has hit its spend cap (403 "Key limit exceeded") — which would
# 403 every llm-rubric assert. CI already exports ANTHROPIC_API_KEY as a secret.
defaultTest:
options:
provider:
id: anthropic:messages:claude-haiku-4-5-20251001