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
RUNAGAIN_API_KEY=sk_…
RUNAGAIN_INGEST_URL=https://ingest.runagain.ai
Register the exporter
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
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.