{"version":3,"sources":["../src/index.ts","../src/voyage-provider.ts","../src/voyage-embedding-model.ts","../src/voyage-error.ts"],"sourcesContent":["export { createVoyage, voyage } from './voyage-provider';\nexport type { VoyageProvider, VoyageProviderSettings } from './voyage-provider';\n","import type {\n  EmbeddingModelV1,\n  LanguageModelV1,\n  ProviderV1,\n} from '@ai-sdk/provider';\nimport {\n  type FetchFunction,\n  loadApiKey,\n  withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport { VoyageEmbeddingModel } from './voyage-embedding-model';\nimport type {\n  VoyageEmbeddingModelId,\n  VoyageEmbeddingSettings,\n} from './voyage-embedding-settings';\n\nexport interface VoyageProvider extends ProviderV1 {\n  (\n    modelId: VoyageEmbeddingModelId,\n    settings?: VoyageEmbeddingSettings,\n  ): EmbeddingModelV1<string>;\n\n  /**\n  @deprecated Use `textEmbeddingModel()` instead.\n     */\n  embedding(\n    modelId: VoyageEmbeddingModelId,\n    settings?: VoyageEmbeddingSettings,\n  ): EmbeddingModelV1<string>;\n\n  /**\n  @deprecated Use `textEmbeddingModel()` instead.\n     */\n  textEmbedding(\n    modelId: VoyageEmbeddingModelId,\n    settings?: VoyageEmbeddingSettings,\n  ): EmbeddingModelV1<string>;\n\n  textEmbeddingModel: (\n    modelId: VoyageEmbeddingModelId,\n    settings?: VoyageEmbeddingSettings,\n  ) => EmbeddingModelV1<string>;\n}\n\nexport interface VoyageProviderSettings {\n  /**\n  Use a different URL prefix for API calls, e.g. to use proxy servers.\n  The default prefix is `https://api.voyageai.com/v1`.\n     */\n  baseURL?: string;\n\n  /**\n  API key that is being send using the `Authorization` header.\n  It defaults to the `VOYAGE_API_KEY` environment variable.\n     */\n  apiKey?: string;\n\n  /**\n  Custom headers to include in the requests.\n       */\n  headers?: Record<string, string>;\n\n  /**\n  Custom fetch implementation. You can use it as a middleware to intercept requests,\n  or to provide a custom fetch implementation for e.g. testing.\n      */\n  fetch?: FetchFunction;\n}\n\n/**\n  Create a Voyage AI provider instance.\n   */\nexport function createVoyage(\n  options: VoyageProviderSettings = {},\n): VoyageProvider {\n  const baseURL =\n    withoutTrailingSlash(options.baseURL) ?? 'https://api.voyageai.com/v1';\n\n  const getHeaders = () => ({\n    Authorization: `Bearer ${loadApiKey({\n      apiKey: options.apiKey,\n      environmentVariableName: 'VOYAGE_API_KEY',\n      description: 'Voyage',\n    })}`,\n    ...options.headers,\n  });\n\n  const createEmbeddingModel = (\n    modelId: VoyageEmbeddingModelId,\n    settings: VoyageEmbeddingSettings = {},\n  ) =>\n    new VoyageEmbeddingModel(modelId, settings, {\n      provider: 'voyage.embedding',\n      baseURL,\n      headers: getHeaders,\n      fetch: options.fetch,\n    });\n\n  const provider = function (\n    modelId: VoyageEmbeddingModelId,\n    settings?: VoyageEmbeddingSettings,\n  ) {\n    if (new.target) {\n      throw new Error(\n        'The Voyage model function cannot be called with the new keyword.',\n      );\n    }\n\n    return createEmbeddingModel(modelId, settings);\n  };\n\n  provider.embedding = createEmbeddingModel;\n  provider.textEmbedding = createEmbeddingModel;\n  provider.textEmbeddingModel = createEmbeddingModel;\n\n  provider.chat = provider.languageModel = (): LanguageModelV1 => {\n    throw new Error('languageModel method is not implemented.');\n  };\n\n  return provider as VoyageProvider;\n}\n\n/**\n  Default Voyage provider instance.\n   */\nexport const voyage = createVoyage();\n","import {\n  type EmbeddingModelV1,\n  TooManyEmbeddingValuesForCallError,\n} from '@ai-sdk/provider';\nimport {\n  createJsonResponseHandler,\n  postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nimport type {\n  VoyageEmbeddingModelId,\n  VoyageEmbeddingSettings,\n} from '@/voyage-embedding-settings';\nimport { voyageFailedResponseHandler } from '@/voyage-error';\n\ntype VoyageEmbeddingConfig = {\n  baseURL: string;\n  fetch?: typeof fetch;\n  headers: () => Record<string, string | undefined>;\n  provider: string;\n};\n\nexport class VoyageEmbeddingModel implements EmbeddingModelV1<string> {\n  readonly specificationVersion = 'v1';\n  readonly modelId: VoyageEmbeddingModelId;\n\n  private readonly config: VoyageEmbeddingConfig;\n  private readonly settings: VoyageEmbeddingSettings;\n\n  get provider(): string {\n    return this.config.provider;\n  }\n\n  get maxEmbeddingsPerCall(): number {\n    return 128;\n  }\n\n  get supportsParallelCalls(): boolean {\n    return false;\n  }\n\n  constructor(\n    modelId: VoyageEmbeddingModelId,\n    settings: VoyageEmbeddingSettings,\n    config: VoyageEmbeddingConfig,\n  ) {\n    this.modelId = modelId;\n    this.settings = settings;\n    this.config = config;\n  }\n\n  async doEmbed({\n    abortSignal,\n    values,\n  }: Parameters<EmbeddingModelV1<string>['doEmbed']>[0]): Promise<\n    Awaited<ReturnType<EmbeddingModelV1<string>['doEmbed']>>\n  > {\n    if (values.length > this.maxEmbeddingsPerCall) {\n      throw new TooManyEmbeddingValuesForCallError({\n        maxEmbeddingsPerCall: this.maxEmbeddingsPerCall,\n        modelId: this.modelId,\n        provider: this.provider,\n        values,\n      });\n    }\n\n    const { responseHeaders, value: response } = await postJsonToApi({\n      abortSignal,\n      body: {\n        input: values,\n        model: this.modelId,\n        input_type: this.settings.inputType,\n        truncation: this.settings.truncation,\n        output_dimension: this.settings.outputDimension,\n        output_dtype: this.settings.outputDtype,\n      },\n      failedResponseHandler: voyageFailedResponseHandler,\n      fetch: this.config.fetch,\n      headers: this.config.headers(),\n      successfulResponseHandler: createJsonResponseHandler(\n        voyageTextEmbeddingResponseSchema,\n      ),\n      url: `${this.config.baseURL}/embeddings`,\n    });\n\n    return {\n      embeddings: response.data.map((item) => item.embedding),\n      usage: response.usage\n        ? { tokens: response.usage.total_tokens }\n        : undefined,\n      rawResponse: { headers: responseHeaders },\n    };\n  }\n}\n\n// minimal version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst voyageTextEmbeddingResponseSchema = z.object({\n  data: z.array(z.object({ embedding: z.array(z.number()) })),\n  usage: z.object({ total_tokens: z.number() }).nullish(),\n});\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nconst voyageErrorDataSchema = z.object({\n  error: z.object({\n    code: z.string().nullable(),\n    message: z.string(),\n    param: z.any().nullable(),\n    type: z.string(),\n  }),\n});\n\nexport type VoyageErrorData = z.infer<typeof voyageErrorDataSchema>;\n\nexport const voyageFailedResponseHandler = createJsonErrorResponseHandler({\n  errorSchema: voyageErrorDataSchema,\n  errorToMessage: (data) => data.error.message,\n});\n"],"mappings":"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","names":["import_provider_utils","import_provider_utils","import_zod"]}