AI SDK v6 Core
SKILL.md
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 nextjs Server Components and API routes
- Uses Zod for schema validation (see typescript)
Patterns
Basic Text Generation
import { generateText } from 'ai'
import { openai } from '@ai-sdk/openai'
const result = await generateText({
model: openai('gpt-4'),
prompt: 'Hello, world!',
})
Structured Output
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)
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