AI SDK Core: customProvider

ID: 1595https://ai-sdk.dev/docs/reference/ai-sdk-core/custom-provider
Source

customProvider()

With a custom provider, you can map ids to any model. This allows you to set up custom model configurations, alias names, and more. The custom provider also supports a fallback provider, which is useful for wrapping existing providers and adding additional functionality.

Example: custom model settings

You can create a custom provider using customProvider.

import { openai } from '@ai-sdk/openai';
import { customProvider } from 'ai';

// custom provider with different model settings:
export const myOpenAI = customProvider({
  languageModels: {
    // replacement model with custom settings:
    'gpt-4': wrapLanguageModel({
      model: openai('gpt-4'),
      middleware: defaultSettingsMiddleware({
        settings: {
          providerOptions: {
            openai: {
              reasoningEffort: 'high',
            },
          },
        },
      }),
    }),
    // alias model with custom settings:
    'gpt-4o-reasoning-high': wrapLanguageModel({
      model: openai('gpt-4o'),
      middleware: defaultSettingsMiddleware({
        settings: {
          providerOptions: {
            openai: {
              reasoningEffort: 'high',
            },
          },
        },
      }),
    }),
  },
  fallbackProvider: openai,
});

Import

<Snippet text={import { customProvider } from "ai"} prompt={false} />

API Signature

Parameters

<PropertiesTable content={[ { name: 'languageModels', type: 'Record<string, LanguageModel>', isOptional: true, description: 'A record of language models, where keys are model IDs and values are LanguageModel instances.', }, { name: 'textEmbeddingModels', type: 'Record<string, EmbeddingModel>', isOptional: true, description: 'A record of text embedding models, where keys are model IDs and values are EmbeddingModel instances.', }, { name: 'imageModels', type: 'Record<string, ImageModel>', isOptional: true, description: 'A record of image models, where keys are model IDs and values are ImageModelV2 instances.', }, { name: 'fallbackProvider', type: 'Provider', isOptional: true, description: 'An optional fallback provider to use when a requested model is not found in the custom provider.', }, ]} />

Returns

The customProvider function returns a Provider instance. It has the following methods:

<PropertiesTable content={[ { name: 'languageModel', type: '(id: string) => LanguageModel', description: 'A function that returns a language model by its id (format: providerId:modelId)', }, { name: 'textEmbeddingModel', type: '(id: string) => EmbeddingModel', description: 'A function that returns a text embedding model by its id (format: providerId:modelId)', }, { name: 'imageModel', type: '(id: string) => ImageModel', description: 'A function that returns an image model by its id (format: providerId:modelId)', }, ]} />