# Braintrust exporter

[Braintrust](https://www.braintrust.dev/) is an evaluation and monitoring platform that helps you measure and improve LLM application quality. The Braintrust exporter sends your traces to Braintrust, enabling systematic evaluation, scoring, and experimentation.

## Installation

**npm**:

```bash
npm install @mastra/braintrust@latest
```

**pnpm**:

```bash
pnpm add @mastra/braintrust@latest
```

**Yarn**:

```bash
yarn add @mastra/braintrust@latest
```

**Bun**:

```bash
bun add @mastra/braintrust@latest
```

## Configuration

### Prerequisites

1. **Braintrust Account**: Sign up at [braintrust.dev](https://www.braintrust.dev/)
2. **Project**: Create or select a project for your traces
3. **API Key**: Generate in Braintrust Settings → API Keys
4. **Environment Variables**: Set your credentials:

```bash
BRAINTRUST_API_KEY=sk-xxxxxxxxxxxxxxxx

# Optional
BRAINTRUST_ENDPOINT=https://api.braintrust.dev  # Custom endpoint if needed
```

### Zero-Config Setup

With environment variables set, use the exporter with no configuration:

```typescript
import { Mastra } from '@mastra/core'
import { Observability } from '@mastra/observability'
import { BraintrustExporter } from '@mastra/braintrust'

export const mastra = new Mastra({
  observability: new Observability({
    configs: {
      braintrust: {
        serviceName: 'my-service',
        exporters: [new BraintrustExporter()],
      },
    },
  }),
})
```

### Explicit Configuration

You can also pass credentials directly (takes precedence over environment variables):

```typescript
import { Mastra } from '@mastra/core'
import { Observability } from '@mastra/observability'
import { BraintrustExporter } from '@mastra/braintrust'

export const mastra = new Mastra({
  observability: new Observability({
    configs: {
      braintrust: {
        serviceName: 'my-service',
        exporters: [
          new BraintrustExporter({
            apiKey: process.env.BRAINTRUST_API_KEY,
            projectName: 'my-project',
          }),
        ],
      },
    },
  }),
})
```

### Complete Configuration

```typescript
new BraintrustExporter({
  // Required
  apiKey: process.env.BRAINTRUST_API_KEY!,

  // Optional settings
  projectName: 'my-project', // Default: 'mastra-tracing'
  endpoint: 'https://api.braintrust.dev', // Custom endpoint if needed
  logLevel: 'info', // Diagnostic logging: debug | info | warn | error
})
```

## Querying Braintrust with returned `spanId`

For Braintrust, use `spanId` as the root span identifier when searching for traces because Braintrust root-span queries are typically faster than trace-id queries.

```typescript
const result = await agent.stream('Summarize this ticket')

console.log('Mastra trace ID:', result.traceId)
console.log('Braintrust root span ID:', result.spanId)

// Use result.spanId in your Braintrust lookup/query path
```

The same applies to `agent.generate()` and workflow run results (`run.start()`, `run.stream()` final state, `run.resume()`).

## Related

- [Tracing Overview](https://mastra.ai/docs/observability/tracing/overview)
- [Braintrust Documentation](https://www.braintrust.dev/docs)