develop-ai-functions-example▌
vercel/ai · updated Apr 8, 2026
Development and validation scripts for AI SDK functions across multiple providers and capabilities.
- ›Organized by AI SDK function category (text generation, streaming, structured output, embeddings, image generation, speech, transcription, reranking, and agents)
- ›File naming convention maps provider and feature combinations (e.g., openai-tool-call.ts , amazon-bedrock-anthropic-cache-control.ts ) for quick identification
- ›Includes shared utility helpers for error handling, environment lo
AI Functions Examples
The examples/ai-functions/ directory contains scripts for validating, testing, and iterating on AI SDK functions across providers.
Example Categories
Examples are organized by AI SDK function in examples/ai-functions/src/:
| Directory | Purpose |
|---|---|
generate-text/ |
Non-streaming text generation with generateText() |
stream-text/ |
Streaming text generation with streamText() |
generate-object/ |
Structured output generation with generateObject() |
stream-object/ |
Streaming structured output with streamObject() |
agent/ |
ToolLoopAgent examples for agentic workflows |
embed/ |
Single embedding generation with embed() |
embed-many/ |
Batch embedding generation with embedMany() |
generate-image/ |
Image generation with generateImage() |
generate-speech/ |
Text-to-speech with generateSpeech() |
transcribe/ |
Audio transcription with transcribe() |
rerank/ |
Document reranking with rerank() |
middleware/ |
Custom middleware implementations |
registry/ |
Provider registry setup and usage |
telemetry/ |
OpenTelemetry integration |
complex/ |
Multi-component examples (agents, routers) |
lib/ |
Shared utilities (not examples) |
tools/ |
Reusable tool definitions |
File Naming Convention
Examples follow the pattern: {provider}-{feature}.ts
| Pattern | Example | Description |
|---|---|---|
{provider}.ts |
openai.ts |
Basic provider usage |
{provider}-{feature}.ts |
openai-tool-call.ts |
Specific feature |
{provider}-{sub-provider}.ts |
amazon-bedrock-anthropic.ts |
Provider with sub-provider |
{provider}-{sub-provider}-{feature}.ts |
google-vertex-anthropic-cache-control.ts |
Sub-provider with feature |
Example Structure
All examples use the run() wrapper from lib/run.ts which:
- Loads environment variables from
.env - Provides error handling with detailed API error logging
Basic Template
import { providerName } from '@ai-sdk/provider-name';
import { generateText } from 'ai';
import { run } from '../lib/run';
run(async () => {
const result = await generateText({
model: providerName('model-id'),
prompt: 'Your prompt here.',
});
console.log(result.text);
console.log('Token usage:', result.usage);
console.log('Finish reason:', result.finishReason);
});
Streaming Template
import { providerName } from '@ai-sdk/provider-name';
import { streamText } from 'ai';
import { printFullStream } from '../lib/print-full-stream';
import { run } from '../lib/run';
run(async () => {
const result = streamText({
model: providerName('model-id'),
prompt: 'Your prompt here.',
});
await printFullStream({ result });
});
Tool Calling Template
import { providerName } from '@ai-sdk/provider-name';
import { generateText, tool } from 'ai';
import { z } from 'zod';
import { run } from '../lib/run';
run(async () => {
const result = await generateText({
model: providerName('model-id'),
tools: {
myTool: tool({
description: 'Tool description',
inputSchema: z.object({
param: z.string().describe('Parameter description'),
}),
execute: async ({ param }) => {
return { result: `Processed: ${param}` };
},
}),
},
prompt: 'Use the tool to...',
});
console.log(JSON.stringify(result, null, 2));
});
Structured Output Template
import { providerName } from '@ai-sdk/provider-name';
import { generateObject } from 'ai';
import { z } from 'zod';
import { run } from '../lib/run';
run(async () => {
const result = await generateObject({
model: providerName('model-id'),
schema: z.object({
name: z.string(),
items: z.array(z.string()),
}),
prompt: 'Generate a...',
});
console.log(JSON.stringify(result.object, null, 2));
console.log('Token usage:', result.usage);
});
Running Examples
From the examples/ai-functions directory:
pnpm tsx src/generate-text/openai.ts
pnpm tsx src/stream-text/openai-tool-call.ts
pnpm tsx src/agent/openai-generate.ts
When to Write Examples
Write examples when:
-
Adding a new provider: Create basic examples for each supported API (
generateText,streamText,generateObject, etc.) -
Implementing a new feature: Demonstrate the feature with at least one provider example
-
Reproducing a bug: Create an example that shows the issue for debugging
-
Adding provider-specific options: Show how to use
providerOptionsfor provider-specific settings -
Creating test fixtures: Use examples to generate API response fixtures (see
capture-api-response-test-fixtureskill)
Utility Helpers
The lib/ directory contains shared utilities:
| File | Purpose |
|---|---|
run.ts |
Error-handling wrapper with .env loading |
print.ts |
Clean object printing (removes undefined values) |
print-full-stream.ts |
Colored streaming output for tool calls, reasoning, text |
save-raw-chunks.ts |
Save streaming chunks for test fixtures |
present-image.ts |
Display images in terminal |
save-audio.ts |
Save audio files to disk |
Using print utilities
import { print } from '../lib/print';
// Pretty print objects without undefined values
print('Result:', result);
print('Usage:', result.usage, { depth: 2 });
Using printFullStream
import { printFullStream } from '../lib/print-full-stream';
const result = streamText({ ... });
await printFullStream({ result }); // Colored output for text, tool calls, reasoning
Reusable Tools
The tools/ directory contains reusable tool definitions:
import { weatherTool } from '../tools/weather-tool';
const result = await generateText({
model: openai('gpt-4o'),
tools: { weather: weatherTool },
prompt: 'What is the weather in San Francisco?',
});
Best Practices
-
Keep examples focused: Each example should demonstrate one feature or use case
-
Use descriptive prompts: Make it clear what the example is testing
-
Handle errors gracefully: The
run()wrapper handles this automatically -
Use realistic model IDs: Use actual model IDs that work with the provider
-
Add comments for complex logic: Explain non-obvious code patterns
-
Reuse tools when appropriate: Use
weatherToolor create new reusable tools intools/
Discussion
Product Hunt–style comments (not star reviews)- No comments yet — start the thread.
Ratings
4.5★★★★★52 reviews- ★★★★★Alexander Haddad· Dec 28, 2024
Useful defaults in develop-ai-functions-example — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
- ★★★★★Camila Farah· Dec 24, 2024
develop-ai-functions-example is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
- ★★★★★Dhruvi Jain· Dec 16, 2024
develop-ai-functions-example has been reliable in day-to-day use. Documentation quality is above average for community skills.
- ★★★★★Isabella Chawla· Dec 12, 2024
develop-ai-functions-example reduced setup friction for our internal harness; good balance of opinion and flexibility.
- ★★★★★Alexander Nasser· Dec 8, 2024
Solid pick for teams standardizing on skills: develop-ai-functions-example is focused, and the summary matches what you get after install.
- ★★★★★Kofi Li· Dec 8, 2024
Registry listing for develop-ai-functions-example matched our evaluation — installs cleanly and behaves as described in the markdown.
- ★★★★★Amelia Khanna· Nov 27, 2024
Registry listing for develop-ai-functions-example matched our evaluation — installs cleanly and behaves as described in the markdown.
- ★★★★★Kaira White· Nov 27, 2024
Solid pick for teams standardizing on skills: develop-ai-functions-example is focused, and the summary matches what you get after install.
- ★★★★★Alexander Lopez· Nov 19, 2024
I recommend develop-ai-functions-example for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.
- ★★★★★Oshnikdeep· Nov 7, 2024
Keeps context tight: develop-ai-functions-example is the kind of skill you can hand to a new teammate without a long onboarding doc.
showing 1-10 of 52