Vercel AI

Adds instrumentation for Vercel AI SDK.

Import name: Sentry.vercelAIIntegration

The vercelAIIntegration adds instrumentation for the ai SDK by Vercel to capture spans using the AI SDK's built-in Telemetry.

This integration is not enabled by default. You need to manually enable it by passing Sentry.vercelAIIntegration() to Sentry.init:

Copied
Sentry.init({
  dsn: "____PUBLIC_DSN____"
  tracesSampleRate: 1.0,
  integrations: [Sentry.vercelAIIntegration()],
});

To correctly capture spans, pass the experimental_telemetry object with isEnabled: true to every generateText, generateObject, streamText, and ToolLoopAgent call. For more details, see the AI SDK Telemetry Metadata docs.

Copied
const result = await generateText({
  model: openai("gpt-4o"),
  experimental_telemetry: {
    isEnabled: true,
    recordInputs: true,
    recordOutputs: true,
  },
});

The integration also captures spans for the ToolLoopAgent class. Each call to generate() or stream() creates an agent span with individual LLM requests and tool executions as child spans.

Pass experimental_telemetry with isEnabled: true to the ToolLoopAgent constructor to correctly capture spans:

Copied
const agent = new ToolLoopAgent({
  model: openai("gpt-4o"),
  tools: {
    /* ... */
  },
  experimental_telemetry: { isEnabled: true },
});

const result = await agent.generate({
  prompt: "What is the weather in San Francisco?",
});

In order to make it easier to correlate captured spans with the function calls we recommend setting functionId in experimental_telemetry in all generation function calls:

Copied
const result = await generateText({
  model: openai("gpt-4o"),
  experimental_telemetry: {
    isEnabled: true,
    functionId: "my-awesome-function",
  },
});

For ToolLoopAgent, set functionId in the constructor:

Copied
const agent = new ToolLoopAgent({
  model: openai("gpt-4o"),
  tools: {
    /* ... */
  },
  experimental_telemetry: {
    isEnabled: true,
    functionId: "weather-agent",
  },
});

By default this integration adds tracing support to all ai function callsites. If you need to disable span collection for a specific call, you can do so by setting experimental_telemetry.isEnabled to false in the first argument of the function call.

Copied
const result = await generateText({
  model: openai("gpt-4o"),
  experimental_telemetry: { isEnabled: false },
});

If you set experimental_telemetry.recordInputs and experimental_telemetry.recordOutputs it will override the default behavior of collecting inputs and outputs for that function call.

Copied
const result = await generateText({
  model: openai("gpt-4o"),
  experimental_telemetry: {
    isEnabled: true,
    recordInputs: true,
    recordOutputs: true,
  },
});

  • ai: >=3.0.0 <=7

Was this helpful?
Help improve this content
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").