Skill: ai-sdk-core
Scope
- •Applies to: Backend AI features with Vercel AI SDK v5/v6, server-side text generation, structured outputs, AI agents with tools, multi-provider integration
- •Does NOT cover: React chat UIs (see ai-sdk-ui), frontend hooks, embeddings, image generation
Assumptions
- •AI SDK v5.0.98+ (stable) or v6.0.0-beta.107+ (beta)
- •Node.js 18+ or Cloudflare Workers
- •Zod v3.23.8+ or v4.x for schema validation
- •TypeScript v5+ with strict mode
Principles
- •Use
generateTextfor simple text generation - •Use
generateObjectfor structured outputs with Zod schemas - •Use
streamTextfor streaming responses - •Use
ToolLoopAgent(v6) for agent workflows with tool calling - •Use tool execution approval for human-in-the-loop patterns
- •Use
callOptionsfor dynamic runtime configuration - •Handle errors with specific error types (
AI_APICallError,AI_NoObjectGeneratedError, etc.) - •Use provider abstraction (
openai,anthropic,google) for multi-provider support
Constraints
MUST
- •Handle
response.errorfor typed error responses - •Use Zod schemas for structured output validation
- •Use
onErrorcallback instreamTextfor error handling - •Validate API keys at startup
SHOULD
- •Use
ToolLoopAgent(v6) for agent workflows instead of manual tool orchestration - •Implement retry logic with exponential backoff for rate limits
- •Use
mode: 'json'when available for structured outputs - •Prefer GPT-4+ for complex structured output
AVOID
- •Top-level imports in Cloudflare Workers (causes startup overhead)
- •Skipping error handling for API calls
- •Using
anytypes (use proper error types) - •Mixing v5 and v6 APIs without migration
Interactions
- •Complements ai-sdk-ui for React chat interfaces
- •Works with Next.js Server Components and API routes
- •Uses TypeScript with Zod for schema validation
Patterns
Basic Text Generation
typescript
import { generateText } from 'ai'
import { openai } from '@ai-sdk/openai'
const result = await generateText({
model: openai('gpt-4'),
prompt: 'Hello, world!',
})
Structured Output
typescript
import { generateObject } from 'ai'
import { z } from 'zod'
const result = await generateObject({
model: openai('gpt-4'),
schema: z.object({
name: z.string(),
age: z.number(),
}),
prompt: 'Generate a person',
})
Agent with Tools (v6)
typescript
import { ToolLoopAgent } from 'ai'
import { openai } from '@ai-sdk/openai'
const agent = new ToolLoopAgent({
model: openai('gpt-4'),
tools: { /* tool definitions */ },
})
const result = await agent.run({ prompt: 'Task' })
See Production Patterns and Templates for detailed examples.
References
- •Production Patterns - Deployment and optimization patterns
- •Top Errors - Common error solutions and troubleshooting