PluginBench
Skill
Official
Review
Audit score 70

develop-ai-functions-example

vercel/ai

Create and validate AI SDK function examples across providers.

What is develop-ai-functions-example?

Develop example scripts for the Vercel AI SDK that demonstrate and test AI functions like text generation, structured output, embeddings, and agents across different providers. Use this when building provider examples, validating feature support, or creating test fixtures.

  • Create examples for AI SDK functions (generateText, streamText, generateObject, streamObject, agent, embed, generateImage, generateSpeech, transcribe, rerank)
  • Organize examples by function category in examples/ai-functions/src/ with consistent file naming
  • Run examples with pnpm tsx to validate provider support and demonstrate features
  • Use shared utility helpers (run.ts, print.ts, printFullStream, save-raw-chunks.ts) for consistent behavior
  • Define reusable tools in tools/ directory for common patterns like weather queries
  • Generate API response fixtures for testing

How to install develop-ai-functions-example

npx skills add null --skill develop-ai-functions-example
Prerequisites
  • Vercel AI SDK installed
  • pnpm package manager
  • Environment variables configured in .env for provider credentials
Claude Code
Cursor
Windsurf
Cline

How to use develop-ai-functions-example

  1. 1.Navigate to examples/ai-functions directory
  2. 2.Choose an example category (generate-text, stream-text, generate-object, etc.) matching your use case
  3. 3.Follow the file naming convention: {provider}-{feature}.ts
  4. 4.Use the appropriate template (basic, streaming, tool calling, or structured output)
  5. 5.Import shared utilities from lib/ (run.ts, print.ts, printFullStream)
  6. 6.Run the example with: pnpm tsx src/{category}/{provider}.ts
  7. 7.Verify output and token usage; iterate as needed

Use cases

Good for
  • Adding a new AI provider: create basic examples for each supported API function
  • Implementing a new feature: demonstrate with at least one provider example
  • Reproducing bugs: create an example that shows the issue for debugging
  • Adding provider-specific options: show how to use providerOptions for custom settings
  • Creating test fixtures: generate API response fixtures using the capture-api-response-test-fixture skill
Who it's for
  • SDK maintainers and contributors
  • Provider integration developers
  • AI SDK users validating provider support
  • Developers creating test fixtures and debugging examples

develop-ai-functions-example FAQ

What template should I use for a new example?

Choose based on your use case: basic template for generateText, streaming template for streamText, tool calling template for tool use, or structured output template for generateObject. All use the run() wrapper from lib/run.ts.

How do I name example files?

Follow the pattern {provider}-{feature}.ts (e.g., openai-tool-call.ts) or {provider}-{sub-provider}-{feature}.ts for sub-providers (e.g., amazon-bedrock-anthropic-cache-control.ts).

What utilities are available in lib/?

run.ts (error handling and .env loading), print.ts (clean object printing), printFullStream (colored streaming output), save-raw-chunks.ts (test fixtures), present-image.ts (terminal image display), and save-audio.ts (audio file saving).

Can I reuse tools across examples?

Yes, define reusable tools in the tools/ directory (e.g., weatherTool) and import them in examples that need them.

How do I create test fixtures from examples?

Use the save-raw-chunks.ts utility to capture streaming chunks, or refer to the capture-api-response-test-fixture skill for detailed fixture generation.

Full instructions (SKILL.md)

Source of truth, from vercel/ai.


name: develop-ai-functions-example description: Develop examples for AI SDK functions. Use when creating, running, or modifying examples under examples/ai-functions/src to validate provider support, demonstrate features, or create test fixtures. metadata: internal: true

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/:

DirectoryPurpose
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

PatternExampleDescription
{provider}.tsopenai.tsBasic provider usage
{provider}-{feature}.tsopenai-tool-call.tsSpecific feature
{provider}-{sub-provider}.tsamazon-bedrock-anthropic.tsProvider with sub-provider
{provider}-{sub-provider}-{feature}.tsgoogle-vertex-anthropic-cache-control.tsSub-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:

  1. Adding a new provider: Create basic examples for each supported API (generateText, streamText, generateObject, etc.)

  2. Implementing a new feature: Demonstrate the feature with at least one provider example

  3. Reproducing a bug: Create an example that shows the issue for debugging

  4. Adding provider-specific options: Show how to use providerOptions for provider-specific settings

  5. Creating test fixtures: Use examples to generate API response fixtures (see capture-api-response-test-fixture skill)

Utility Helpers

The lib/ directory contains shared utilities:

FilePurpose
run.tsError-handling wrapper with .env loading
print.tsClean object printing (removes undefined values)
print-full-stream.tsColored streaming output for tool calls, reasoning, text
save-raw-chunks.tsSave streaming chunks for test fixtures
present-image.tsDisplay images in terminal
save-audio.tsSave 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

  1. Keep examples focused: Each example should demonstrate one feature or use case

  2. Use descriptive prompts: Make it clear what the example is testing

  3. Handle errors gracefully: The run() wrapper handles this automatically

  4. Use realistic model IDs: Use actual model IDs that work with the provider

  5. Add comments for complex logic: Explain non-obvious code patterns

  6. Reuse tools when appropriate: Use weatherTool or create new reusable tools in tools/