Skip to content

Nola vs Vercel AI SDK

The Vercel AI SDK provides TypeScript APIs for model calls, structured output, streaming, and tools, along with UI integrations. Provider packages such as @ai-sdk/openai connect those APIs to a model.

This example uses generateText with Output.object({ schema }). The SDK infers the result’s TypeScript type from the schema and validates the completed output at runtime. Zod is one supported schema option. See the Output reference.

Both examples classify a support message, then write a reply using the category. The snippets show the calls and output shape; project setup and credentials are omitted.

AI SDK: define the output with Zod and pass the message to each call.

// not-checked — triage.ts
import { generateText, Output } from "ai";
import { openai } from "@ai-sdk/openai";
import { z } from "zod";
const Triage = z.object({
category: z.enum(["billing", "refund", "fraud", "other"]),
orderIds: z.array(z.string()),
});
const { output: triage } = await generateText({
model: openai("gpt-5-mini"),
instructions: "You are a support classifier.",
prompt: message,
output: Output.object({ schema: Triage }),
});
const { text: reply } = await generateText({
model: openai("gpt-5-mini"),
instructions: "You are a support agent.",
prompt: `Reply to this ${triage.category} case: ${message}`,
});

Nola: define the output as a TypeScript type and share the message through a contextual parameter.

classify.tsi
export type Triage = {
category: "billing" | "refund" | "fraud" | "other";
orderIds: string[];
};
export infer function classifyMessage(.message: string) {
const triage = ask `triage the customer message`: Triage;
const reply = ask `a reply for a ${triage.category} case`: string;
return { ...triage, reply };
}

The SDK snippet uses the instructions option supported by its current source. If your installed SDK expects system, use that option instead.

  • Streaming and UI. The SDK provides text and structured-output streaming, plus UI integrations for chat and completion interfaces. Nola does not have a streaming primitive. See AI SDK UI.
  • Using an existing TypeScript toolchain. The SDK is a library used from ordinary TypeScript files. It does not require support for a new source-file syntax.
  • Provider integrations. The SDK has a provider ecosystem beyond the adapters included with Nola. Check its provider list for the models and capabilities you need.
  • Reusing TypeScript types. Nola derives the schema from Triage at compile time. With Zod, you can instead make the schema the source of truth and derive the TypeScript type with z.infer; a second handwritten type is not required.
  • Shared context. Both asks see .message. In the SDK snippet, each prompt includes the input it needs. You can also wrap SDK calls in your own functions to share request construction.
  • Calling existing functions. A Nola call intent can infer arguments for a plain TypeScript function. See Function calling.
  • Diagnostics in Nola source. nola check checks asks alongside the surrounding program and reports errors at the original .tsi positions.

Both approaches validate responses at runtime. Nola’s compile-time schema derivation does not guarantee that a model’s answer is factually correct.

The AI SDK fits applications that need streaming interfaces or want to stay within an existing TypeScript library workflow.

Nola fits server-side TypeScript code where the team wants to reuse domain types and express extraction or inferred function arguments with ask. It requires the Nola compiler and a supported Node runtime.

You can also use the SDK for a streaming chat interface and Nola for typed processing steps on the server.

Next: Examples