IntentLayerDocsDashboard ↗
Docs/Integrations
Integrations

Vercel AI SDK

Gate latest user turn with LanguageModelV3 middleware and record accepted generate or stream setup.

Adapter targets LanguageModelV3Middleware from @ai-sdk/provider version 3+. Install ai, provider package, and IntentLayer.

#Configure

typescript
import { wrapLanguageModel, streamText } from "ai";
import { openai } from "@ai-sdk/openai";
import { IntentLayer } from "intentlayer";
import { intentLayerMiddleware } from "intentlayer/vercel-ai";

const il = new IntentLayer({ apiKey: process.env.INTENTLAYER_API_KEY });
const model = wrapLanguageModel({
  model: openai("gpt-4.1-mini"),
  middleware: intentLayerMiddleware(il, { sessionId: "session-6" }),
});

const result = streamText({ model, prompt: "improve the report" });

sessionId can also be (params) => string.

#Behavior

Middleware scans prompt from end for user role and joins text content parts. When user turn exists it awaits il.gate. Then:

  • wrapGenerate calls doGenerate, records accept, returns result;
  • wrapStream calls doStream, records accept, returns stream result.

No suggestion interception occurs. Core gate fallback preserves host execution. If underlying model throws, adapter does not record accept.

Source truthsdk-js/src/vercel-ai.tssdk-js/README.mdsdk-js/tests/vercel-ai.test.ts