`createProviderRegistry()`

createProviderRegistry()

여러 프로바이더와 모델로 작업할 때는 이를 중앙에서 관리하고 간단한 문자열 id로 모델에 접근하는 것이 바람직한 경우가 많습니다. createProviderRegistry를 사용하면 providerId:modelId 형식의 id로 접근할 수 있는 여러 프로바이더가 있는 레지스트리를 만들 수 있습니다.

TypeScript에서 레지스트리 모델 ID는 등록된 프로바이더 ID에서 추론됩니다. 프로바이더가 리터럴 모델 ID 타입을 노출하면 편집기가 결합된 providerId:modelId 값을 제안할 수 있습니다.

출처: 문서

본문

Setup (설정)

createProviderRegistry를 사용하여 여러 프로바이더와 모델이 있는 레지스트리를 만들 수 있습니다.

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: proces...KEY,
  }),
});

Custom Separator (커스텀 구분자)

기본적으로 레지스트리는 프로바이더와 모델 ID 사이의 구분자로 :을 사용합니다. separator 옵션을 전달하여 이 구분자를 커스터마이즈할 수 있습니다.

const registry = createProviderRegistry(
  {
    anthropic,
    openai,
  },
  { separator: ' > ' },
);

// Now you can use the custom separator
const model = registry.languageModel('anthropic > claude-3-opus-20240229');

Language models (언어 모델)

레지스트리의 languageModel 메서드를 사용하여 언어 모델에 접근할 수 있습니다. 프로바이더 id가 모델 id의 접두사가 됩니다: providerId:modelId.

import { generateText } from 'ai';
import { registry } from './registry';

const { text } = await generateText({
  model: registry.languageModel('openai:gpt-6-astra'),
  prompt: 'Invent a new holiday and describe its traditions.',
});

Text embedding models (텍스트 임베딩 모델)

레지스트리의 .embeddingModel 메서드를 사용하여 텍스트 임베딩 모델에 접근할 수 있습니다. 프로바이더 id가 모델 id의 접두사가 됩니다: providerId:modelId.

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 (이미지 모델)

레지스트리의 imageModel 메서드를 사용하여 이미지 모델에 접근할 수 있습니다. 프로바이더 id가 모델 id의 접두사가 됩니다: providerId:modelId.

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 (비디오 모델)

레지스트리의 videoModel 메서드를 사용하여 비디오 모델에 접근할 수 있습니다. 프로바이더 id가 모델 id의 접두사가 됩니다: providerId:modelId.

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 (파일과 스킬)

registry.files(providerId)와 registry.skills(providerId)를 호출하여 프로바이더의 파일 및 스킬 인터페이스에 접근할 수 있습니다.

Import

import { createProviderRegistry } from "ai"

API Signature

Parameters (파라미터)

  • providers: Record<string, Provider> — 프로바이더의 고유 식별자입니다. 레지스트리 내에서 고유해야 합니다.
    • Provider:
      • languageModel: (id: string) => LanguageModel — id로 언어 모델을 반환하는 함수입니다.
      • embeddingModel: (id: string) => EmbeddingModel<string> — id로 텍스트 임베딩 모델을 반환하는 함수입니다.
      • imageModel: (id: string) => ImageModel — id로 이미지 모델을 반환하는 함수입니다.
      • transcriptionModel: (id: string) => TranscriptionModel (선택) — id로 전사 모델을 반환하는 함수입니다.
      • speechModel: (id: string) => SpeechModel (선택) — id로 음성 모델을 반환하는 함수입니다.
      • rerankingModel: (id: string) => RerankingModel (선택) — id로 reranking 모델을 반환하는 함수입니다.
      • videoModel: (id: string) => VideoModelV4 (선택) — id로 비디오 모델을 반환하는 함수입니다.
      • files: () => FilesV4 (선택) — 프로바이더 파일 API 인터페이스를 반환하는 함수입니다.
      • skills: () => SkillsV4 (선택) — 프로바이더 스킬 API 인터페이스를 반환하는 함수입니다.
  • options: object (선택) — 레지스트리의 선택적 구성입니다.
    • separator: string (선택) — 프로바이더와 모델 ID 사이의 커스텀 구분자입니다. 기본값은 ":"입니다.
    • languageModelMiddleware: LanguageModelMiddleware | LanguageModelMiddleware[] (선택) — 레지스트리에서 얻은 모든 언어 모델을 감싸는 미들웨어입니다.
    • imageModelMiddleware: ImageModelMiddleware | ImageModelMiddleware[] (선택) — 레지스트리에서 얻은 모든 이미지 모델을 감싸는 미들웨어입니다.

Returns (반환값)

createProviderRegistry 함수는 Provider 인스턴스를 반환합니다. 다음과 같은 메서드를 가집니다.

  • languageModel: (id: string) => LanguageModel — id(형식: providerId:modelId)로 언어 모델을 반환하는 함수입니다.
  • embeddingModel: (id: string) => EmbeddingModel<string> — id(형식: providerId:modelId)로 텍스트 임베딩 모델을 반환하는 함수입니다.
  • imageModel: (id: string) => ImageModel — id(형식: providerId:modelId)로 이미지 모델을 반환하는 함수입니다.
  • transcriptionModel: (id: string) => TranscriptionModel — id(형식: providerId:modelId)로 전사 모델을 반환하는 함수입니다.
  • speechModel: (id: string) => SpeechModel — id(형식: providerId:modelId)로 음성 모델을 반환하는 함수입니다.
  • rerankingModel: (id: string) => RerankingModel — id(형식: providerId:modelId)로 reranking 모델을 반환하는 함수입니다.
  • videoModel: (id: string) => VideoModelV4 — id(형식: providerId:modelId)로 비디오 모델을 반환하는 함수입니다.
  • files: (providerId: string) => FilesV4 — 프로바이더 id로 프로바이더 파일 API 인터페이스를 반환하는 함수입니다.
  • skills: (providerId: string) => SkillsV4 — 프로바이더 id로 프로바이더 스킬 API 인터페이스를 반환하는 함수입니다.

Experimental evaluation models (실험적 평가 모델)

추론된 반환 타입은 Experimental_EvaluationModelV4를 반환하는 evaluationModel('providerId:modelId')도 노출합니다. 프로바이더는 evaluationModel 팩토리를 노출해야 합니다. 커스텀 구분자와 모델 ID 추론은 비디오 모델과 마찬가지로 동작합니다. 언어 및 이미지 미들웨어는 평가 모델을 감싸지 않습니다. ProviderRegistryProvider는 안정적인 인터페이스로 유지됩니다. 실험적 평가 접근을 유지하려면 추론된 반환 타입이나 Experimental_EvaluationProviderRegistry를 사용하세요.

사용 불가한 평가 능력 또는 모델은 modelType: 'evaluationModel'과 함께 NoSuchModelError를 발생시키고, 알 수 없는 레지스트리 프로바이더는 NoSuchProviderError를 발생시킵니다. 이러한 능력은 구조적 확장이며 안정적인 ProviderV4 계약에 추가되지 않습니다. 직접적인 평가 문자열 ID는 기본 프로바이더가 구성되지 않았을 때 기본적으로 Gateway를 사용합니다. 실행 가능한 사용 패턴은 Evaluation을 참고하세요.

더 알아보기 (Learn more)