v0.1.0 — Vercel AI SDK observability
First stable release of @voightxyz/vercel-ai — an OpenTelemetry SpanExporter that ingests the experimental_telemetry spans the Vercel AI SDK emits natively. Register it next to @vercel/otel, enable telemetry on your streamText / generateText / streamObject / generateObject calls, and every call lands in your Voight dashboard.
Install
npm install ai @ai-sdk/openai @vercel/otel @voightxyz/vercel-aiOr run the wizard from the main SDK:
npx -y @voightxyz/sdk initIt detects ai in your package.json and writes a ready-to-load instrumentation.ts for you.
What gets captured
streamText/generateText/streamObject/generateObject— one event per LLM call (Vercel outer wrappers are filtered out so token counts stay accurate)- OpenAI + Anthropic provider attribution (via
gen_ai.system/ai.model.provider) - Tool calls (normalised to
{id, name, arguments}JSON-string), token counts (input / output / cache_read / cache_creation), finish reason, streaming flag, sessionId - Per-user attribution via
experimental_telemetry.metadata— passing{ metadata: { userId, plan, … } }activates the dashboard Users sub-tab + per-tag filter pills automatically - Three privacy levels (
'minimal'/'standard'/'full') sharing the same 12-pattern PII catalogue as the rest of the Voight SDK family - Coexists with other observability tools via OTel's
MultiSpanProcessor
Validated against
End-to-end soak with the vercel/ai-chatbot reference app — multi-turn streaming, tool calls (getWeather, createDocument, …), per-user guest sessions, and full trace grouping all land cleanly.
Why an OTel SpanExporter
The Vercel AI SDK emits OpenTelemetry spans natively — the same wire format every observability tool listed in the Vercel AI SDK docs consumes (Langfuse, Helicone, Phoenix, Braintrust, Datadog, Sentry, W&B). We follow the same contract: drop in Voight as the sole provider, or pair it with another exporter via MultiSpanProcessor. No vendor lock, no custom middleware.