> ## Documentation Index
> Fetch the complete documentation index at: https://docs.zespan.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Vercel AI SDK

> Trace Vercel AI SDK calls — generateText, streamText, generateObject, tool calls — with Zespan via OpenTelemetry.

<Note>
  Available for: **TypeScript** only.
</Note>

## Installation

```bash theme={"theme":{"light":"github-light","dark":"one-dark-pro"}}
npm install @zespan/sdk ai
```

## Usage

Call `instrumentVercelAI()` once at startup. It returns a `telemetry` settings object to pass to Vercel AI functions.

```typescript theme={"theme":{"light":"github-light","dark":"one-dark-pro"}}
import { instrumentVercelAI, zespan } from "@zespan/sdk";
import { generateText } from "ai";
import { openai } from "@ai-sdk/openai";

zespan.init({ apiKey: process.env.ZESPAN_API_KEY! });

const { telemetry } = instrumentVercelAI();

const result = await generateText({
  model: openai("gpt-4o"),
  prompt: "Explain how LLMs work.",
  experimental_telemetry: telemetry,
});

console.log(result.text);
```

## Streaming

Pass the same `telemetry` object to `streamText`:

```typescript theme={"theme":{"light":"github-light","dark":"one-dark-pro"}}
import { streamText } from "ai";
import { anthropic } from "@ai-sdk/anthropic";

const { telemetry } = instrumentVercelAI();

const result = await streamText({
  model: anthropic("claude-sonnet-4-6"),
  prompt: "Write a short story.",
  experimental_telemetry: telemetry,
});

for await (const chunk of result.textStream) {
  process.stdout.write(chunk);
}
```

## Structured output

```typescript theme={"theme":{"light":"github-light","dark":"one-dark-pro"}}
import { generateObject } from "ai";
import { openai } from "@ai-sdk/openai";
import { z } from "zod";

const { telemetry } = instrumentVercelAI();

const result = await generateObject({
  model: openai("gpt-4o"),
  schema: z.object({ title: z.string(), summary: z.string() }),
  prompt: "Summarize the history of the internet.",
  experimental_telemetry: telemetry,
});

console.log(result.object);
```

## Using `getZespanVercelTelemetry`

If you prefer to get the telemetry settings without calling `instrumentVercelAI`, use `getZespanVercelTelemetry` directly:

```typescript theme={"theme":{"light":"github-light","dark":"one-dark-pro"}}
import { getZespanVercelTelemetry, zespan } from "@zespan/sdk";

zespan.init({ apiKey: process.env.ZESPAN_API_KEY! });

const telemetry = getZespanVercelTelemetry();

const result = await generateText({
  model: openai("gpt-4o"),
  prompt: "Hello!",
  experimental_telemetry: telemetry,
});
```

Zespan captures: `generateText`, `streamText`, `generateObject`, tool calls, `embed`, and `embedMany` operations. `streamObject` spans are not currently instrumented — calls made through `streamObject` will not appear in Zespan even with `experimental_telemetry: telemetry` set.
