UNPKG

ai

Version:

AI SDK by Vercel - build apps like ChatGPT, Claude, Gemini, and more with a single interface for any model using the Vercel AI Gateway or go direct to OpenAI, Anthropic, Google, or any other model provider.

301 lines (260 loc) • 9.06 kB
--- 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`. In TypeScript, registry model IDs are inferred from the registered provider IDs. When a provider exposes literal model ID types, editors can suggest the combined `providerId:modelId` values. ### 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-20240229'); ``` ### 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={"5"} 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={"5"} 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={"5"} 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', }); ``` ### Video models You can access video models by using the `videoModel` method on the registry. The provider id will become the prefix of the model id: `providerId:modelId`. ```ts highlight={"7"} import { fal } from '@ai-sdk/fal'; import { createProviderRegistry, experimental_generateVideo } from 'ai'; const registry = createProviderRegistry({ fal }); const { videos } = await experimental_generateVideo({ model: registry.videoModel('fal:luma-dream-machine/ray-2'), prompt: 'A cat walking on a beach at sunset', }); ``` ### Files and skills You can access a provider's files and skills interfaces by calling `registry.files(providerId)` and `registry.skills(providerId)`. ## Import <Snippet text={`import { createProviderRegistry } from "ai"`} prompt={false} /> ## API Signature ### Parameters <PropertiesTable content={[ { name: 'providers', type: 'Record<string, Provider>', 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<string>', 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: 'transcriptionModel', type: '(id: string) => TranscriptionModel', isOptional: true, description: 'A function that returns a transcription model by its id.', }, { name: 'speechModel', type: '(id: string) => SpeechModel', isOptional: true, description: 'A function that returns a speech model by its id.', }, { name: 'rerankingModel', type: '(id: string) => RerankingModel', isOptional: true, description: 'A function that returns a reranking model by its id.', }, { name: 'videoModel', type: '(id: string) => VideoModelV4', isOptional: true, description: 'A function that returns a video model by its id.', }, { name: 'files', type: '() => FilesV4', isOptional: true, description: 'A function that returns the provider files API interface.', }, { name: 'skills', type: '() => SkillsV4', isOptional: true, description: 'A function that returns the provider skills API interface.', }, ], }, ], }, { name: 'options', type: 'object', isOptional: true, description: 'Optional configuration for the registry.', properties: [ { type: 'Options', parameters: [ { name: 'separator', type: 'string', isOptional: true, description: 'Custom separator between provider and model IDs. Defaults to ":".', }, { name: 'languageModelMiddleware', type: 'LanguageModelMiddleware | LanguageModelMiddleware[]', isOptional: true, description: 'Middleware to wrap all language models obtained from the registry.', }, { name: 'imageModelMiddleware', type: 'ImageModelMiddleware | ImageModelMiddleware[]', isOptional: true, description: 'Middleware to wrap all image models obtained from the registry.', }, ], }, ], }, ]} /> ### Returns The `createProviderRegistry` 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: 'embeddingModel', type: '(id: string) => EmbeddingModel<string>', 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)', }, { name: 'transcriptionModel', type: '(id: string) => TranscriptionModel', description: 'A function that returns a transcription model by its id (format: providerId:modelId)', }, { name: 'speechModel', type: '(id: string) => SpeechModel', description: 'A function that returns a speech model by its id (format: providerId:modelId)', }, { name: 'rerankingModel', type: '(id: string) => RerankingModel', description: 'A function that returns a reranking model by its id (format: providerId:modelId)', }, { name: 'videoModel', type: '(id: string) => VideoModelV4', description: 'A function that returns a video model by its id (format: providerId:modelId)', }, { name: 'files', type: '(providerId: string) => FilesV4', description: 'A function that returns a provider files API interface by provider id.', }, { name: 'skills', type: '(providerId: string) => SkillsV4', description: 'A function that returns a provider skills API interface by provider id.', }, ]} />