base_url to https://api.pioneer.ai/v1, pass your Pioneer API key, and put a model ID in the model field. Everything else in your eval harness stays the same.
Choosing a model ID
Themodel field accepts any of these, so comparing a fine-tune against its base model is a one-value change:
A project name is the one identifier that keeps working after you ship a new model. Pioneer resolves it to whatever that project currently has deployed, so promoting a new fine-tune retargets it with no change on your side. A training job ID does the opposite — it pins one checkpoint forever, which is what you want when comparing two models side by side but not what you want for tracking production.
Register Pioneer as a provider in Braintrust
Passingbase_url in code works, but registering Pioneer once puts your models in the Braintrust model dropdown, so they’re available in the playground, in prompts, and in any eval without per-script configuration.
Go to Settings > AI providers, choose Custom providers > New, and configure:
Enable This endpoint supports streaming, since Pioneer streams natively.
If you fill in the optional input and output cost fields with your Pioneer per-token rates, Braintrust’s experiment cost estimates will be accurate. Note that Pioneer echoes back the model string you sent, so a request routed through a project reports the project name rather than the underlying checkpoint.
Install
Write the eval
Braintrust discovers Python files namedeval_*.py. Create evals/eval_pioneer.py:
Run it
Check that your model responds before you sign up for anything. The--no-send-logs flag runs the eval locally and prints a summary without a Braintrust account:
npx braintrust eval pioneer.eval.ts with the same environment variables.
Compare a fine-tune against its base model
Run the same file twice with a differentPIONEER_MODEL. Braintrust stores each run as a separate experiment, so you can diff them side by side:
Things to watch for
Set max_tokens to at least 512
Set max_tokens to at least 512
Reasoning-style models write out their working before the final answer. With a tight
max_tokens, the response gets cut off mid-thought and the harness scores an empty or partial string as wrong. If a model suddenly scores near zero, raise max_tokens before assuming the model is broken.Don't test your API key against GET /v1/models
Don't test your API key against GET /v1/models
That endpoint is public and returns
200 even without valid credentials, so it can’t tell you whether your key works. Verify with a real POST /v1/chat/completions request instead.Your key must start with pio_sk_
Your key must start with pio_sk_
Pioneer detects that prefix on the
Authorization: Bearer header and treats the value as an API key rather than a session token. This is what lets the standard OpenAI SDK work unchanged. Keys in other formats are rejected with a 401.braintrust eval --list needs an account key
braintrust eval --list needs an account key
braintrust eval --list authenticates before it enumerates evaluators, so it fails without BRAINTRUST_API_KEY. Use --no-send-logs for credential-free local runs.The endpoint URL must end in /v1
The endpoint URL must end in /v1
Braintrust builds the request URL by appending the route to whatever you entered, so
https://api.pioneer.ai becomes https://api.pioneer.ai/chat/completions and returns a 404. Enter https://api.pioneer.ai/v1.A provider you just added can 404 on the first call
A provider you just added can 404 on the first call
Braintrust caches provider configuration for a short period, so the first request after you add or edit a custom provider can fail with
no provider configured for '<model>'. Wait a few seconds and retry before you start changing settings.Register every model you intend to call
Register every model you intend to call
A custom provider only serves the models listed in its configuration. Registering the endpoint without adding any model names leaves it inert — every request fails with
no provider configured, even though the provider looks correctly set up.A pinned training job needs a live deployment
A pinned training job needs a live deployment
A training job ID routes only while that job still has an active inference deployment. An old checkpoint whose deployment has been torn down returns
409 with has no active inference deployment, which is a deployment problem rather than a wrong model ID. Pin training job IDs for a point-in-time comparison, and use the project name when you want something that keeps working.Encoder models
This guide covers decoder models — the text-in, text-out case Braintrust expects. GLiNER encoder tasks such as extraction and classification return structured JSON and need aschema in the request, so an off-the-shelf scorer won’t work on them directly. Use Pioneer’s own evaluation API for encoder models, which reports F1, precision, and recall with a per-entity breakdown.
Related
OpenAI-compatible API
Full endpoint reference for the compatibility layer.
Pioneer evaluations
Native evaluations with F1, precision, and recall.