Install
Demo · Vercel
Serverless demo: traces and Settings-pasted keys reset on cold start. Put provider keys in Vercel env if you want them to stick. This is not the bank deploy — that is a Node process on their disk.
Point the app at this origin

Gateway, not wrap. Your code keeps the OpenAI SDK; baseURL is this suite. Prompts and completions stay on this disk. Egress is only to OpenRouter / BYOK / Dvar keys you configure. Set EVALS_PUBLIC_URL when this is not localhost.

Origin https://dvar-evals.vercel.app/v1
Gateway key dvar_evals_1965ae6dc4e7d163e8f0cb7f5f897e44f562

This key is local auth for the evals gateway. It is not an OpenRouter or Dvar key. Add those in Settings or the gateway returns 502.

Node
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.EVALS_GATEWAY_KEY, // dvar_evals_1965ae6dc4e7d163e8f0cb7f5f897e44f562
  baseURL: "https://dvar-evals.vercel.app/v1",
  defaultHeaders: { "X-Dvar-Use-Case": "onboarding" }, // onboarding | servicing | rm-assist
});

const r = await client.chat.completions.create({
  model: "gpt-4o", // eco | balanced | pro | claude-sonnet | gemini-flash
  messages: [{ role: "user", content: "PAN mismatch on Aadhaar. Continue?" }],
});
Python
from openai import OpenAI

client = OpenAI(
    api_key="dvar_evals_1965ae6dc4e7d163e8f0cb7f5f897e44f562",
    base_url="https://dvar-evals.vercel.app/v1",
    default_headers={"X-Dvar-Use-Case": "servicing"},
)
r = client.chat.completions.create(
    model="claude-sonnet",
    messages=[{"role": "user", "content": "Card blocked after three PINs."}],
)
curl
curl https://dvar-evals.vercel.app/v1/chat/completions \
  -H "Authorization: Bearer dvar_evals_1965ae6dc4e7d163e8f0cb7f5f897e44f562" \
  -H "Content-Type: application/json" \
  -H "X-Dvar-Use-Case: rm-assist" \
  -d '{"model":"gpt-4o","messages":[{"role":"user","content":"Can I redeem the SIP on this call?"}]}'