{"version":3,"sources":["../src/index.ts","../src/jina-provider.ts","../src/jina-embedding-model.ts","../src/jina-embedding-options.ts","../src/jina-error.ts"],"sourcesContent":["export { createJina, jina } from './jina-provider';\nexport type { JinaEmbeddingOptions } from './jina-embedding-options';\nexport type {\n  JinaProvider,\n  JinaProviderSettings,\n  MultimodalEmbeddingInput,\n} from './jina-provider';\n","import type {\n  EmbeddingModelV2,\n  ImageModelV2,\n  LanguageModelV2,\n  ProviderV2,\n} from '@ai-sdk/provider';\nimport {\n  type FetchFunction,\n  loadApiKey,\n  withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport {\n  JinaEmbeddingModel,\n  type MultimodalEmbeddingInput,\n  type TextEmbeddingInput,\n} from './jina-embedding-model';\nimport type { JinaEmbeddingModelId } from './jina-embedding-options';\n\nexport interface JinaProvider extends ProviderV2 {\n  /**\n   * Create a text embedding model for string inputs only.\n   * This ensures type safety by only allowing string arrays.\n   * @param modelId - The Jina model ID\n   * @param settings - Optional model settings\n   */\n  textEmbeddingModel(modelId: JinaEmbeddingModelId): EmbeddingModelV2<string>;\n\n  /**\n   * Create a multimodal embedding model for MultimodalEmbeddingInput only.\n   * This ensures type safety by only allowing MultimodalEmbeddingInput arrays.\n   * @param modelId - The Jina model ID\n   * @param settings - Optional model settings\n   */\n  multiModalEmbeddingModel(\n    modelId: JinaEmbeddingModelId,\n  ): EmbeddingModelV2<MultimodalEmbeddingInput>;\n}\n\nexport interface JinaProviderSettings {\n  /**\n   * Use a different URL prefix for API calls, e.g. to use proxy servers.\n   * The default prefix is `https://api.jina.ai/v1`.\n   */\n  baseURL?: string;\n\n  /**\n   * API key that is being send using the `Authorization` header.\n   * It defaults to the `JINA_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\nexport function createJina(options: JinaProviderSettings = {}): JinaProvider {\n  const baseURL =\n    withoutTrailingSlash(options.baseURL) ?? 'https://api.jina.ai/v1';\n\n  const getHeaders = () => ({\n    Authorization: `Bearer ${loadApiKey({\n      apiKey: options.apiKey,\n      environmentVariableName: 'JINA_API_KEY',\n      description: 'Jina',\n    })}`,\n    ...options.headers,\n  });\n\n  const createTextEmbeddingModel = (modelId: JinaEmbeddingModelId) =>\n    new JinaEmbeddingModel<TextEmbeddingInput>(modelId, {\n      provider: 'jina.text.embedding',\n      baseURL,\n      headers: getHeaders,\n      fetch: options.fetch,\n    });\n\n  const createMultiModalEmbeddingModel = (modelId: JinaEmbeddingModelId) =>\n    new JinaEmbeddingModel<MultimodalEmbeddingInput>(modelId, {\n      provider: 'jina.multimodal.embedding',\n      baseURL,\n      headers: getHeaders,\n      fetch: options.fetch,\n    });\n\n  const provider = function (modelId: JinaEmbeddingModelId) {\n    if (new.target) {\n      throw new Error(\n        'The Jina model function cannot be called with the new keyword.',\n      );\n    }\n\n    return createTextEmbeddingModel(modelId);\n  };\n\n  provider.textEmbeddingModel = createTextEmbeddingModel;\n  provider.multiModalEmbeddingModel = createMultiModalEmbeddingModel;\n\n  provider.chat = provider.languageModel = (): LanguageModelV2 => {\n    throw new Error('languageModel method is not implemented.');\n  };\n  provider.imageModel = (): ImageModelV2 => {\n    throw new Error('imageModel method is not implemented.');\n  };\n  return provider as JinaProvider;\n}\n\nexport const jina = createJina();\n\nexport type { MultimodalEmbeddingInput, JinaEmbeddingModelId };\n","import {\n  type EmbeddingModelV2,\n  TooManyEmbeddingValuesForCallError,\n} from '@ai-sdk/provider';\nimport {\n  combineHeaders,\n  createJsonResponseHandler,\n  type FetchFunction,\n  parseProviderOptions,\n  postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nimport {\n  jinaEmbeddingOptions,\n  type JinaEmbeddingModelId,\n} from '@/jina-embedding-options';\nimport { voyageFailedResponseHandler } from '@/jina-error';\n\ntype JinaEmbeddingConfig = {\n  provider: string;\n  baseURL: string;\n  headers: () => Record<string, string | undefined>;\n  fetch?: FetchFunction;\n};\n\nexport type TextEmbeddingInput = string;\n\nexport type MultimodalEmbeddingInput = {\n  text?: string;\n  image?: string;\n};\n\nexport class JinaEmbeddingModel<T> implements EmbeddingModelV2<T> {\n  readonly specificationVersion = 'v2' as const;\n  readonly modelId: JinaEmbeddingModelId;\n\n  private readonly config: JinaEmbeddingConfig;\n\n  get provider(): string {\n    return this.config.provider;\n  }\n\n  get maxEmbeddingsPerCall(): number {\n    return 2048;\n  }\n\n  get supportsParallelCalls(): boolean {\n    return false;\n  }\n\n  constructor(modelId: JinaEmbeddingModelId, config: JinaEmbeddingConfig) {\n    this.modelId = modelId;\n    this.config = config;\n  }\n\n  async doEmbed({\n    abortSignal,\n    values,\n    headers,\n    providerOptions,\n  }: Parameters<EmbeddingModelV2<T>['doEmbed']>[0]): Promise<\n    Awaited<ReturnType<EmbeddingModelV2<T>['doEmbed']>>\n  > {\n    const embeddingOptions = await parseProviderOptions({\n      provider: 'jina',\n      providerOptions,\n      schema: jinaEmbeddingOptions,\n    });\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        model: this.modelId,\n        input: values,\n        task: embeddingOptions?.inputType,\n        embedding_type: embeddingOptions?.embeddingType,\n        dimensions: embeddingOptions?.outputDimension,\n        normalized: embeddingOptions?.normalized ?? true,\n        late_chunking: embeddingOptions?.lateChunking,\n        truncate: embeddingOptions?.truncate ?? false,\n      },\n      failedResponseHandler: voyageFailedResponseHandler,\n      fetch: this.config.fetch,\n      headers: combineHeaders(this.config.headers(), headers),\n      successfulResponseHandler: createJsonResponseHandler(\n        jinaEmbeddingResponseSchema,\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      response: { headers: responseHeaders },\n    };\n  }\n}\n\nconst jinaEmbeddingResponseSchema = z.object({\n  data: z.array(\n    z.object({\n      object: z.literal('embedding'),\n      embedding: z.array(z.number()),\n      index: z.number().optional(),\n    }),\n  ),\n  usage: z\n    .object({\n      total_tokens: z.number(),\n      prompt_tokens: z.number().optional(),\n    })\n    .nullish(),\n  model: z.string().optional(),\n});\n","import { z } from 'zod/v4';\n\nexport type JinaEmbeddingModelId =\n  // Text Embedding Models\n  | 'jina-embeddings-v3'\n  | 'jina-embeddings-v2-base-en'\n  | 'jina-embeddings-v2-base-code'\n\n  // Multimodal Embedding Models\n  | 'jina-clip-v2'\n  | 'jina-clip-v1'\n  | (string & {});\n\nexport const jinaEmbeddingOptions = z.object({\n  /**\n   * The input type for the embeddings.\n   *\n   * Defaults to `retrieval.passage`.\n   *\n   * Used to convey intended downstream application to help the model produce better embeddings.\n   *\n   * Must be one of the following values:\n   * - `retrieval.query`: Specifies the given text is a query in a search or retrieval setting.\n   * - `retrieval.passage`: Specifies the given text is a document in a search or retrieval setting.\n   * - `text-matching`: Specifies the given text is used for Semantic Textual Similarity.\n   * - `classification`: Specifies that the embedding is used for classification.\n   * - `separation`: Specifies that the embedding is used for clustering.\n   */\n\n  inputType: z\n    .enum([\n      'text-matching',\n      'retrieval.query',\n      'retrieval.passage',\n      'separation',\n      'classification',\n    ])\n    .optional(),\n\n  /**\n   * The number of dimensions for the resulting output embeddings.\n   *\n   * - `jina-embeddings-v3`:\n   *   - Min Output Dimensions: 32 for better performance\n   *   - Max Output Dimensions: 1,024\n   *\n   * - `jina-clip-v2`:\n   *   - Min Output Dimensions: 64\n   *   - Max Output Dimensions: 1,024\n   *\n   * - `jina-clip-v1`:\n   *   - Output Dimensions: 768\n   *\n   * Please refer to the model documentation for the supported values.\n   *\n   * @see https://jina.ai/api-dashboard/embedding\n   */\n  outputDimension: z.number().optional(),\n\n  /**\n   * Late chunking\n   *\n   * When enabled, the model will automatically split the input into chunks of 1024 tokens each.\n   *\n   * @see https://jina.ai/news/jina-embeddings-v3-a-frontier-multilingual-embedding-model/#parameter-latechunking\n   *\n   * Defaults to false.\n   *\n   * This is only supported in text embedding models.\n   */\n  lateChunking: z.boolean().optional(),\n\n  /**\n   * The data type for the resulting output embeddings.\n   *\n   * Defaults to `float`.\n   *\n   * - `float`: 32-bit floating-point numbers\n   * - `binary`: 8-bit binary values\n   * - `ubinary`: 8-bit unsigned binary values\n   * - `base64`: Base64 encoded strings\n   */\n  embeddingType: z.enum(['float', 'binary', 'ubinary', 'base64']).optional(),\n\n  /**\n   * Whether to normalize the resulting output embeddings.\n   * Scales the embedding so its Euclidean (L2) norm becomes 1, preserving direction. Useful when downstream involves dot-product, classification, visualization.\n   * Defaults to true.\n   */\n  normalized: z.boolean().optional(),\n\n  /**\n   * Truncate at Maximum Context Length which is 8k tokens\n   *\n   * When enabled, the model will automatically drop the tail that extends beyond the maximum context length allowed by the model instead of throwing an error.\n   *\n   * Defaults to false.\n   */\n  truncate: z.boolean().optional(),\n});\n\nexport type JinaEmbeddingOptions = z.infer<typeof jinaEmbeddingOptions>;\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_v4"]}