# Instrument: Vercel AI SDK

The best default for AI apps. One integration registered at startup; no
per-call flags on AI SDK 7; runs anywhere the AI SDK runs (Node, Cloudflare
Workers, Edge, Bun, Deno).

## AI SDK 7 (recommended)

```bash
npm i @getloopops/sdk
```

```js
import { registerTelemetry } from "ai";
import { loopOps } from "@getloopops/sdk/ai";

registerTelemetry(loopOps({ agent: "my-app" })); // reads LOOPOPS_URL + LOOPOPS_INGEST_KEY
```

Producer policy lives in that one call — deploy identity for regression
joins, capture privacy, sampling:

```js
registerTelemetry(loopOps({
  agent: "my-app",
  serviceVersion: process.env.GIT_SHA,      // anchors verify + regression detection
  environment: process.env.NODE_ENV,
  recordInputs: false,                       // capture privacy flags
  recordOutputs: true,
  sampleRate: 0.25
}));
```

Fold a conversation into one session:

```js
await generateText({ model, prompt,
  runtimeContext: { thread_id: conversationId },
  telemetry: { functionId: "my-app", includeRuntimeContext: { thread_id: true } } });
```

## AI SDK 6, or you already run OpenTelemetry

`@getloopops/sdk/otel` stands up an OTLP exporter the way `Sentry.init()`
does — Node-only, keeps the per-call flag:

```js
// instrument.mjs  ->  node --import ./instrument.mjs agent.mjs
import { registerLoopOps } from "@getloopops/sdk/otel";
await registerLoopOps({ agent: "my-app" });

// per call:
import { telemetry } from "@getloopops/sdk/otel";
await generateText({ model, prompt, experimental_telemetry: telemetry({ thread_id: conversationId }) });
```

Peer deps for the v6 path: `@opentelemetry/api`, `@opentelemetry/sdk-node`,
`@opentelemetry/exporter-trace-otlp-http`, `@opentelemetry/resources`,
`@opentelemetry/semantic-conventions`.

## What you get

Model, tokens, latency, tool calls, and — because AI SDK telemetry carries the
`gen_ai.*` capture contract — **replayable failures**: diagnose clusters
report `replayable_count > 0`, and prompt fixes can be proven against captured
inputs *before* shipping (`loopops_replay`).

**Next:** [First-event proof and limits →](/docs/limits-and-health) ·
[Connect your coding agent →](/docs/connect-your-coding-agent)