# TypeSafe (jev) — required for evaluation; without it traces are still recorded. TYPESAFE_API_KEY= OPENEVALS_JEV_MODEL=jev-latest # Server OPENEVALS_PORT=3100 OPENEVALS_DB=./data/openevals.db # Optional: if set, ingestion + REST require `Authorization: Bearer ` (or Basic :) OPENEVALS_API_KEY= # Eval worker OPENEVALS_EVAL_ENABLED=true OPENEVALS_SETTLE_MS=5000 # wait this long after the last event before judging a trace OPENEVALS_STATE_BUDGET_CHARS=90000 # ~22k tokens; jev allows 32k for state + longest question OPENEVALS_REVIEW_CONFIDENCE=0.5 # judgments with min confidence below this are flagged needs_review # Escalation: when jev's min confidence < OPENEVALS_REVIEW_CONFIDENCE (or a Noul lands within # OPENEVALS_ESCALATE_NOUL_BAND of 0.5), re-ask the same questions to a reasoning model with rationale. ANTHROPIC_API_KEY= OPENEVALS_ESCALATE=true OPENEVALS_ESCALATE_MODEL=claude-opus-5 OPENEVALS_ESCALATE_NOUL_BAND=0.15 # Per-step grading (the `step` evaluator): concurrency within a trace, max steps judged per trace (sampled evenly beyond), previous steps in each step's context # OPENEVALS_STEP_CONCURRENCY=8 # OPENEVALS_STEP_MAX=150 # OPENEVALS_STEP_CONTEXT=8 # Rubric compiler model (POST /api/v1/evaluators/compile; needs ANTHROPIC_API_KEY) # OPENEVALS_COMPILE_MODEL=claude-sonnet-5 # ---- Langfuse connector (the main path): pull observations, judge, write scores back ---- # LANGFUSE_HOST=https://cloud.langfuse.com # LANGFUSE_PUBLIC_KEY=pk-lf-... # LANGFUSE_SECRET_KEY=sk-lf-... # LANGFUSE_POLL_MS=30000 how often to pull # LANGFUSE_SETTLE_S=90 observations younger than this wait for the next poll # LANGFUSE_OVERLAP_S=300 re-read this far behind the watermark for late observations # LANGFUSE_LOOKBACK_S=3600 first start: how far back to pull # LANGFUSE_ENVIRONMENTS=production comma-separated; empty = all # LANGFUSE_TRACE_NAMES= comma-separated root/trace names; empty = all # LANGFUSE_WRITE_BACK=true # LANGFUSE_WRITE_BACK_SCORES= comma-separated score names; empty = all EVAL scores # LANGFUSE_WRITE_BACK_STEPS=true also write per-step (observation-level) scores # LANGFUSE_REVIEW_QUEUE_ID= annotation queue for failed / low-confidence traces # LANGFUSE_VERDICT_SCORE=passed human score name treated as the verdict for calibration # OPENEVALS_PUBLIC_URL= this server's public URL, for links in Langfuse score metadata # ---- jev budget ---- # OPENEVALS_JEV_RPM=1000 stay under jev's published 1,200 requests/min # OPENEVALS_JEV_CONCURRENCY=16 # OPENEVALS_DAILY_BUDGET_USD=0 0 = unlimited; jev evaluators pause once reached # ---- notifications ---- # OPENEVALS_WEBHOOK_URL= POST {event, trace, failed[], unsure[]} when a trace fails a pass gate or a judgment is unsure