Skill: ai-sdk-core
Scope
- Applies to: Backend AI with Vercel AI SDK v7 (
aipackage) - Does NOT cover: React chat UIs (see ai-sdk-ui)
Assumptions
- Folder major tracks the installed
aipackage inpackage.json, not a skill-file revision - Node.js 22+, ESM; Zod 4 for
inputSchema - Never write AI SDK from memory. Grep
node_modules/ai/docs/andnode_modules/ai/src/for the installed version. Else https://ai-sdk.dev/docs (append.md) or https://ai-sdk.dev/api/search-docs?q= - v6 leftovers: https://ai-sdk.dev/docs/migration-guides/migration-guide-7-0
Principles
generateText/streamTextfor request handlers and one-shot API routes;instructionsfor system-style prompt- Request-handler tool loops:
stopWhen: isStepCount(n)ongenerateText/streamText— notmaxSteps, notstepCountIs ToolLoopAgent+generate()/stream()for durable agents — not hand-rolled loops, notnew Agent()- UI streams:
createUIMessageStreamResponse+toUIMessageStream({ stream: result.stream })from'ai'. Use these for new handlers and for dedicated stream/SDK updates result.toUIMessageStreamResponse()still works in v7 (deprecated). Leave it only when the task is unrelated to streaming or the SDK- Tool results must be JSON-serializable (no
Date) - System prompt lives in
instructions. Clientmessagesmust not include{ role: 'system' }unless the server fully trusts the payload
Constraints
MUST
- Read bundled docs before writing calls
convertToModelMessageswhen the client sends UI messages- Reject untrusted
{ role: 'system' }inmessages. Do not setallowSystemInMessages: truefor client-supplied chat
AVOID
toDataStreamResponse/pipeDataStreamToResponsestepCountIs/maxSteps/result.fullStream/ top-levelsystem:(useisStepCount,result.stream,instructions)- Guessing model IDs
Interactions
- Complements ai-sdk-ui, fastify, next
- Upstream: vercel/ai use-ai-sdk
Templates
- generate-text-basic.ts
- stream-text-chat.ts
- agent-with-tools.ts
References
- Request handlers — tools +
isStepCount, Fastify SSE, system-message reject