Skip to main content
The Vercel AI SDK emits OpenTelemetry spans when experimental_telemetry is enabled. Register an OTLP exporter that points at RunAgain and every generateText / streamText call becomes a trace.

Install

npm i runagain ai @ai-sdk/anthropic @vercel/otel
pnpm add runagain ai @ai-sdk/anthropic @vercel/otel
yarn add runagain ai @ai-sdk/anthropic @vercel/otel
bun add runagain ai @ai-sdk/anthropic @vercel/otel

Configure

.env.local
RUNAGAIN_API_KEY=sk_…
RUNAGAIN_INGEST_URL=https://ingest.runagain.ai

Register the exporter

instrumentation.ts
import { registerOTel } from "@vercel/otel";
import { RunAgainSpanExporter } from "runagain/otel";

export function register() {
  registerOTel({
    serviceName: "support-bot",
    traceExporter: new RunAgainSpanExporter({
      url: process.env.RUNAGAIN_INGEST_URL!,
      apiKey: process.env.RUNAGAIN_API_KEY!,
    }),
  });
}

Enable telemetry on your calls

app/api/chat/route.ts
import { streamText } from "ai";
import { anthropic } from "@ai-sdk/anthropic";

const result = streamText({
  model: anthropic("claude-opus-4-8"),
  prompt,
  // emit OpenTelemetry spans that RunAgain ingests
  experimental_telemetry: { isEnabled: true, functionId: "support-bot" },
});

Run

npm run dev   # then hit your route to produce a trace
Deployed on Vercel? The exporter runs anywhere Node/Edge OpenTelemetry runs — set RUNAGAIN_API_KEY and RUNAGAIN_INGEST_URL as project environment variables.