OpenAI model provider configuration and integration guide
OpenAI provides access to GPT models including GPT-5 and other cutting-edge language models. Braintrust integrates seamlessly with OpenAI through direct API access, wrapOpenAI wrapper functions for automatic tracing, and proxy support.
This guide covers manual instrumentation. For quicker setup, use auto-instrumentation.
For the GPT-5 family of models, the temperature parameter is not configurable. It is handled automatically by the model and is disabled in the Braintrust UI.
Click Organization provider or Project provider, depending on whether you want the provider to be available across every project in the organization or just the current project.
Under Model providers, click OpenAI.
Choose your authentication method:
API key: Visit OpenAI’s API platform, create a new API key, and paste it into the Secret field.
API keys are stored as one-way cryptographic hashes, never in plaintext.
Workload identity federation: Exchange a Braintrust-signed OIDC token for an OpenAI access token, instead of storing a long-lived OpenAI API key in Braintrust.
Workload identity federation is available only for organization-level providers on Braintrust-hosted organizations with the Braintrust gateway enabled. Project-level providers and self-hosted deployments must use API key authentication.
If you chose Workload identity federation, use the setup values shown in Braintrust to configure OpenAI:
Create a workload identity provider in OpenAI. Use the Issuer URL and Audience shown in Braintrust, set JWKS source to OIDC discovery, use the Subject pattern, and add the Required claims shown in Braintrust.
Map the workload identity provider to the OpenAI service account Braintrust should use.
Paste the OpenAI IDs back into Braintrust:
Identity provider ID: The workload identity provider ID configured for Braintrust.
Service account ID: The OpenAI service account ID Braintrust should use.
Subject suffix: A stable suffix for this OpenAI connection. It must match the final part of the subject pattern used in OpenAI.
To call OpenAI directly from your application code rather than through the Braintrust gateway, set your OpenAI API key and Braintrust API key as environment variables:
.env
OPENAI_API_KEY=<your-openai-api-key>BRAINTRUST_API_KEY=<your-braintrust-api-key># For organizations on the EU data plane, use https://api-eu.braintrust.dev# For self-hosted deployments, use your data plane URL# BRAINTRUST_API_URL=<your-braintrust-api-url>
import OpenAI from "openai";// Initialize the Braintrust loggerconst logger = initLogger({ projectName: "My Project", // Your project name apiKey: process.env.BRAINTRUST_API_KEY,});// Wrap the OpenAI client with wrapOpenAIconst client = wrapOpenAI( new OpenAI({ apiKey: process.env.OPENAI_API_KEY, }),);// All API calls are automatically loggedconst result = await client.chat.completions.create({ model: "gpt-5-mini", messages: [ { role: "system", content: "You are a helpful assistant." }, { role: "user", content: "What is machine learning?" }, ],});
wrap_openai/wrapOpenAI can automatically log metrics like prompt_tokens, completion_tokens, and tokens for streaming LLM calls if the LLM API returns them. Set include_usage to true in the stream_options parameter to receive these metrics from OpenAI.
Evaluations help you distill the non-deterministic outputs of OpenAI models into an effective feedback loop that enables you to ship more reliable, higher quality products. Braintrust Eval is a simple function composed of a dataset of user inputs, a task, and a set of scorers. To learn more about evaluations, see the Experiments guide.
You can use OpenAI models to score the outputs of other AI systems. This example uses the LLMClassifierFromSpec scorer to score the relevance of the outputs of an AI system.Install the autoevals package to use the LLMClassifierFromSpec scorer.
Create a scorer that uses the LLMClassifierFromSpec scorer to score the relevance of the outputs of an AI system. You can then include relevanceScorer as a scorer in your Eval function (see above).
OpenAI’s structured outputs are supported with the wrapper functions.
import { z } from "zod";// Define a Zod schema for the responseconst ResponseSchema = z.object({ name: z.string(), age: z.number(),});const completion = await client.beta.chat.completions.parse({ model: "gpt-5-mini", messages: [ { role: "system", content: "Extract the person's name and age." }, { role: "user", content: "My name is John and I'm 30 years old." }, ], response_format: { type: "json_schema", json_schema: { name: "person", // The Zod schema for the response schema: ResponseSchema, }, },});
Braintrust traces streaming audio transcription calls for sync and async OpenAI clients. Each span captures the audio file as an attachment and the final transcript as the span output.
with open("audio.m4a", "rb") as f: stream = client.audio.transcriptions.create( model="gpt-4o-transcribe", file=f, stream=True, ) for event in stream: if event.type == "transcript.text.delta": print(event.delta, end="", flush=True)
You can also access OpenAI models through the Braintrust gateway, which provides a unified interface for multiple providers. Use any supported provider’s SDK to call OpenAI models.
const client = new OpenAI({ baseURL: "https://gateway.braintrust.dev/v1", apiKey: process.env.BRAINTRUST_API_KEY,});const response = await client.chat.completions.create({ model: "gpt-5-mini", messages: [{ role: "user", content: "What is a proxy?" }], seed: 1, // A seed activates the proxy's cache});