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