ASD

Add Provider Package

Guía para añadir nuevos paquetes de proveedores de IA al AI SDK. Úsala al crear un paquete @ai-sdk/<provider> para integrar un servicio de IA en el SDK.

Oficial
Estrellas
26.2k

en todo el repo

Actividad
56

0–100, la ruta de este skill

Actualizado
el mes pasado

último commit aquí

Commits
2

últimos 90 días

Contexto
2.7k tok

37 tok en reposo

Paquete
1 archivo

10 KB

Instalar

Funciona con cualquier agente que lea SKILL.md

npx -y skills add vercel/ai --skill add-provider-package --agent claude-code

Se instala solo en este repositorio.

Este skill makes network requests.

Qué hace

  • Guía la creación de una nueva estructura de paquete `packages/<provider>` con configuración completa (package.json, tsconfig, tsup, vitest)
  • Define patrones para implementar la clase provider, modelos (`LanguageModelV4`, etc.) y manejo de errores con `AISDKError`
  • Especifica convenciones de nombres de archivos, métodos del provider y buenas prácticas de seguridad (`loadApiKey`, `parseJSON`)
  • Detalla pasos para crear tests, ejemplos, documentación y el changeset de publicación

Úsalo cuando

  • Al crear un nuevo paquete `@ai-sdk/<provider>` para integrar un servicio de IA en el AI SDK

No lo uses cuando

    Qué lo activa

    Di cualquiera de estas frases y el agente debería cargar este skill.

    • Quiero crear un nuevo paquete @ai-sdk/miproveedor para el AI SDK
    • Ayúdame a estructurar un provider de IA de primera parte
    • ¿Cómo integro un nuevo servicio de IA como paquete first-party en el AI SDK?

    SKILL.md

    En inglés

    Adding a New Provider Package

    This guide covers the process of creating a new @ai-sdk/<provider> package to integrate an AI service into the AI SDK.

    First-Party vs Third-Party Providers

    • Third-party packages: Any provider can create a third-party package. We're happy to link to it from our documentation.
    • First-party @ai-sdk/<provider> packages: If you prefer a first-party package, please create an issue first to discuss.

    Reference Example

    See https://github.com/vercel/ai/pull/8136/files for a complete example of adding a new provider.

    Provider Architecture

    The AI SDK uses a layered provider architecture following the adapter pattern:

    1. Specifications (@ai-sdk/provider): Defines interfaces like LanguageModelV4, EmbeddingModelV4, etc.
    2. Utilities (@ai-sdk/provider-utils): Shared code for implementing providers
    3. Providers (@ai-sdk/<provider>): Concrete implementations for each AI service
    4. Core (ai): High-level functions like generateText, streamText, generateObject

    Step-by-Step Guide

    1. Create Package Structure

    Create a new folder packages/<provider> with the following structure:

    packages/<provider>/
    ├── src/
    │   ├── index.ts                  # Main exports
    │   ├── version.ts                # Package version
    │   ├── <provider>-provider.ts    # Provider implementation
    │   ├── <provider>-provider.test.ts
    │   ├── <provider>-*-options.ts   # Model-specific options
    │   └── <provider>-*-model.ts     # Model implementations (e.g., language, embedding, image)
    ├── package.json
    ├── tsconfig.json
    ├── tsconfig.build.json
    ├── tsup.config.ts
    ├── turbo.json
    ├── vitest.node.config.js
    ├── vitest.edge.config.js
    └── README.md
    

    Do not create a CHANGELOG.md file. It will be auto-generated.

    2. Configure package.json

    Set up your package.json with:

    • "name": "@ai-sdk/<provider>"
    • "version": "0.0.0" (initial version, will be updated by changeset)
    • "type": "module"
    • "license": "Apache-2.0"
    • "sideEffects": false
    • Dependencies on @ai-sdk/provider and @ai-sdk/provider-utils (use workspace:*)
    • Dev dependencies: @ai-sdk/test-server, @types/node, @vercel/ai-tsconfig, tsup, typescript, zod
    • "engines": { "node": ">=22" }
    • Peer dependency on zod (both v3 and v4): "zod": "^3.25.76 || ^4.1.8"

    Example package entry point configuration:

    {
      "type": "module",
      "main": "./dist/index.js",
      "types": "./dist/index.d.ts",
      "exports": {
        "./package.json": "./package.json",
        ".": {
          "types": "./dist/index.d.ts",
          "import": "./dist/index.js",
          "default": "./dist/index.js"
        }
      }
    }
    

    3. Create TypeScript Configurations

    tsconfig.json:

    {
      "extends": "@vercel/ai-tsconfig/base.json",
      "include": ["src/**/*.ts"],
      "exclude": ["node_modules", "dist"]
    }
    

    tsconfig.build.json:

    {
      "extends": "./tsconfig.json",
      "exclude": [
        "**/*.test.ts",
        "**/*.test-d.ts",
        "**/__snapshots__",
        "**/__fixtures__"
      ]
    }
    

    4. Configure Build Tool (tsup)

    Create tsup.config.ts:

    import { defineConfig } from 'tsup';
    
    export default defineConfig({
      entry: ['src/index.ts'],
      format: ['cjs', 'esm'],
      dts: true,
      sourcemap: true,
      clean: true,
    });
    

    5. Configure Test Runners

    Create both vitest.node.config.js and vitest.edge.config.js (copy from existing provider like anthropic).

    6. Implement Provider

    Provider implementation pattern:

    // <provider>-provider.ts
    import { NoSuchModelError } from '@ai-sdk/provider';
    import { loadApiKey } from '@ai-sdk/provider-utils';
    
    export interface ProviderSettings {
      apiKey?: string;
      baseURL?: string;
      // provider-specific settings
    }
    
    export class ProviderInstance {
      readonly apiKey?: string;
      readonly baseURL?: string;
    
      constructor(options: ProviderSettings = {}) {
        this.apiKey = options.apiKey;
        this.baseURL = options.baseURL;
      }
    
      private get baseConfig() {
        return {
          apiKey: () =>
            loadApiKey({
              apiKey: this.apiKey,
              environmentVariableName: 'PROVIDER_API_KEY',
              description: 'Provider API key',
            }),
          baseURL: this.baseURL ?? 'https://api.provider.com',
        };
      }
    
      languageModel(modelId: string) {
        return new ProviderLanguageModel(modelId, this.baseConfig);
      }
    
      // Shorter alias
      chat(modelId: string) {
        return this.languageModel(modelId);
      }
    }
    
    // Export default instance
    export const providerName = new ProviderInstance();
    

    7. Implement Model Classes

    Each model type (language, embedding, image, etc.) should implement the appropriate interface from @ai-sdk/provider:

    • LanguageModelV4 for text generation models
    • EmbeddingModelV4 for embedding models
    • ImageModelV4 for image generation models
    • etc.

    Schema guidelines:

    Provider Options (user-facing):

    • Use .optional() unless null is meaningful
    • Be as restrictive as possible for future flexibility

    Response Schemas (API responses):

    • Use .nullish() instead of .optional()
    • Keep minimal - only include properties you need
    • Allow flexibility for provider API changes

    8. Create README.md

    Include:

    • Brief description linking to documentation
    • Installation instructions
    • Basic usage example
    • Link to full documentation

    9. Write Tests

    • Unit tests for provider logic
    • API response parsing tests using fixtures in __fixtures__ subdirectory
    • Both Node.js and Edge runtime tests

    See capture-api-response-test-fixture skill for capturing real API responses for testing.

    10. Add Examples

    Create examples in examples/ai-functions/src/ for each model type the provider supports:

    • generate-text/<provider>.ts - Basic text generation
    • stream-text/<provider>.ts - Streaming text
    • generate-object/<provider>.ts - Structured output (if supported)
    • stream-object/<provider>.ts - Streaming structured output (if supported)
    • embed/<provider>.ts - Embeddings (if supported)
    • generate-image/<provider>.ts - Image generation (if supported)
    • etc.

    Add feature-specific examples as needed (e.g., <provider>-tool-call.ts, <provider>-cache-control.ts).

    11. Add Documentation

    Create documentation in content/providers/01-ai-sdk-providers/<last number + 10>-<provider>.mdx

    Include:

    • Setup instructions
    • Available models
    • Model capabilities
    • Provider-specific options
    • Usage examples
    • API configuration

    12. Create Changeset

    Run pnpm changeset and:

    • Select the new provider package
    • Choose major version (for new packages starting at 0.0.0)
    • Describe what the package provides

    13. Update References

    Run pnpm update-references from the workspace root to update tsconfig references.

    14. Build and Test

    # From workspace root
    pnpm build
    
    # From provider package
    cd packages/<provider>
    pnpm test              # Run all tests
    pnpm test:node         # Run Node.js tests
    pnpm test:edge         # Run Edge tests
    pnpm type-check        # Type checking
    
    # From workspace root
    pnpm type-check:full   # Full type check including examples
    

    15. Run Examples

    Test your examples:

    cd examples/ai-functions
    pnpm tsx src/generate-text/<provider>.ts
    pnpm tsx src/stream-text/<provider>.ts
    

    Provider Method Naming

    • Full names: languageModel(id), imageModel(id), embeddingModel(id) (required)
    • Short aliases: .chat(id), .image(id), .embedding(id) (for DX)

    File Naming Conventions

    • Source files: kebab-case.ts
    • Test files: kebab-case.test.ts
    • Type test files: kebab-case.test-d.ts
    • Provider classes: <Provider>Provider, <Provider>LanguageModel, etc.

    Security Best Practices

    • Never use JSON.parse directly - use parseJSON or safeParseJSON from @ai-sdk/provider-utils
    • Load API keys securely using loadApiKey from @ai-sdk/provider-utils
    • Validate all API responses against schemas

    Error Handling

    Errors should extend AISDKError from @ai-sdk/provider and use a marker pattern:

    import { AISDKError } from '@ai-sdk/provider';
    
    const name = 'AI_ProviderError';
    const marker = `vercel.ai.error.${name}`;
    const symbol = Symbol.for(marker);
    
    export class ProviderError extends AISDKError {
      private readonly [symbol] = true;
    
      constructor({ message, cause }: { message: string; cause?: unknown }) {
        super({ name, message, cause });
      }
    
      static isInstance(error: unknown): error is ProviderError {
        return AISDKError.hasMarker(error, marker);
      }
    }
    

    Pre-release Mode

    If main is set up to publish beta releases, no further action is necessary. Just make sure not to backport it to the vX.Y stable branch since it will result in an npm version conflict once we exit pre-release mode on main.

    Checklist

    • Package structure created in packages/<provider>
    • package.json configured with correct dependencies
    • TypeScript configs set up (tsconfig.json, tsconfig.build.json)
    • Build configuration (tsup.config.ts)
    • Test configurations (vitest.node.config.js, vitest.edge.config.js)
    • Provider implementation complete
    • Model classes implement appropriate interfaces
    • Unit tests written and passing
    • API response test fixtures captured
    • Examples created in examples/ai-functions/src/
    • Documentation added in content/providers/01-ai-sdk-providers/
    • README.md written
    • Major changeset created
    • pnpm update-references run
    • All tests passing (pnpm test from package)
    • Type checking passing (pnpm type-check:full from root)
    • Examples run successfully

    Common Issues

    • Missing tsconfig references: Run pnpm update-references from workspace root
    • Type errors in examples: Run pnpm type-check:full to catch issues early
    • Test failures: Ensure both Node and Edge tests pass
    • Build errors: Check that tsup.config.ts is configured correctly

    Related Documentation

    Reproducido de vercel/ai bajo licencia NOASSERTION. Leer esta página en markdown.

    Archivos

    1 archivo en el paquete. Solo se lee SKILL.md al activarse — las referencias se cargan si el skill decide que las necesita.

    Antes de instalar

    Requiere trabajar dentro del monorepo del AI SDK con pnpm y, para paquetes first-party, abrir primero un issue de discusión.

    Necesita en el PATH:pnpm

    Detalles

    Creador
    vercel
    Licencia
    NOASSERTION
    Recursos incluidos
    Solo SKILL.md
    Repositorio
    vercel/ai
    Código fuente
    Ver SKILL.md

    Etiquetas

    Más de vercel/ai

    Este repo incluye 13 skills. Si instalas uno, normalmente ya tienes los demás.

    Actualiza las dependencias SDK principales de los paquetes harness. Úsalo cuando te pidan actualizar los SDKs de harness o sus dependencias adaptadoras.

    Costo de contexto al activarse
    951 tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 6 días
    Oficialherramientas desarrollo

    Guía para añadir nuevos paquetes harness de AI SDK. Úsala al crear un paquete @ai-sdk/harness-<name> que adapte un runtime de coding-agent a HarnessV1.

    Costo de contexto al activarse
    3.1k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    el mes pasado
    Oficialherramientas desarrollo

    Ai Sdk

    26.2k

    Responde preguntas sobre la AI SDK y ayuda a construir funciones con IA: agentes, chatbots, RAG, streaming, tool calling, salida estructurada, embeddings y hooks como useChat.

    Costo de contexto al activarse
    1.4k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    el mes pasado
    Oficialdesarrollo apis

    Añade nuevos IDs de modelo o elimina IDs obsoletos en los proveedores existentes del AI SDK, incluyendo tipos, docs, ejemplos y tests.

    Costo de contexto al activarse
    2.4k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    el mes pasado
    Oficialherramientas desarrollo

    Migra aplicaciones de AI SDK 6.x a AI SDK 7.0; útil al actualizar paquetes de Vercel AI SDK o corregir errores de migración a v7.

    Costo de contexto al activarse
    2.1k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    el mes pasado
    Oficialherramientas desarrollo

    Crea y mantiene Architecture Decision Records (ADR) optimizados para agentes de código: propone, redacta, actualiza, acepta/rechaza, deprecia o supersede ADRs usando preguntas socráticas y una checklist de validación.

    Costo de contexto al activarse
    4.1k tok
    Tamaño del paquete
    11 archivos
    Última actualización
    hace 3 meses
    Oficialdocumentos

    Skills relacionados

    Ai Sdk

    26.2k

    Responde preguntas sobre la AI SDK y ayuda a construir funciones con IA: agentes, chatbots, RAG, streaming, tool calling, salida estructurada, embeddings y hooks como useChat.

    Costo de contexto al activarse
    1.4k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    el mes pasado
    Oficialdesarrollo apis

    Domina el sistema de tipos avanzado de TypeScript: generics, tipos condicionales, mapped types, template literals y utility types para aplicaciones type-safe.

    Costo de contexto al activarse
    2k tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 2 meses
    herramientas desarrollo

    Patrones de resiliencia en Python: reintentos automáticos, backoff exponencial, timeouts y decoradores tolerantes a fallos para servicios.

    Costo de contexto al activarse
    1.5k tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 2 meses
    herramientas desarrollo