{"version":3,"file":"ibm.cjs","names":["Embeddings","authenticateAndSetGatewayInstance","authenticateAndSetInstance","AsyncCaller"],"sources":["../../src/embeddings/ibm.ts"],"sourcesContent":["import { Embeddings, EmbeddingsParams } from \"@langchain/core/embeddings\";\n\nimport { WatsonXAI } from \"@ibm-cloud/watsonx-ai\";\nimport { AsyncCaller } from \"@langchain/core/utils/async_caller\";\nimport { CreateEmbeddingsParams, Gateway } from \"@ibm-cloud/watsonx-ai/gateway\";\nimport {\n  WatsonxAuth,\n  WatsonxEmbeddingsBasicOptions,\n  XOR,\n} from \"../types/ibm.js\";\nimport {\n  authenticateAndSetGatewayInstance,\n  authenticateAndSetInstance,\n  checkValidProps,\n  expectOneOf,\n} from \"../utils/ibm.js\";\n\nexport interface WatsonxEmbeddingsParams\n  extends\n    EmbeddingsParams,\n    Omit<WatsonXAI.TextEmbeddingsParams, \"modelId\" | \"inputs\" | \"parameters\"> {\n  /** Represents the maximum number of input tokens accepted. This can be used to avoid requests failing due to\n   *  input being longer than configured limits. If the text is truncated, then it truncates the end of the input (on\n   *  the right), so the start of the input will remain the same. If this value exceeds the `maximum sequence length`\n   *  (refer to the documentation to find this value for the model) then the call will fail if the total number of\n   *  tokens exceeds the `maximum sequence length`.\n   */\n  truncateInputTokens?: number;\n  /** The return options for text embeddings. */\n  returnOptions?: WatsonXAI.EmbeddingReturnOptions;\n  /** The `id` of the model to be used for this request. Please refer to the [list of\n   *  models](https://dataplatform.cloud.ibm.com/docs/content/wsj/analyze-data/fm-models-embed.html?context=wx&audience=wdp).\n   */\n  model: string;\n}\nexport interface WatsonxInputEmbeddings\n  extends WatsonxEmbeddingsBasicOptions, WatsonxEmbeddingsParams {}\n\nexport type WatsonxEmbeddingsGatewayKwargs = Omit<\n  CreateEmbeddingsParams,\n  \"input\" | keyof WatsonxEmbeddingsParams\n>;\n\nexport interface WatsonxEmbeddingsGatewayParams extends EmbeddingsParams {\n  modelGatewayKwargs?: WatsonxEmbeddingsGatewayKwargs;\n  modelGateway: boolean;\n}\n\nexport interface WatsonxInputGatewayEmbeddings\n  extends\n    WatsonxEmbeddingsBasicOptions,\n    WatsonxEmbeddingsGatewayParams,\n    Omit<\n      CreateEmbeddingsParams,\n      keyof WatsonxEmbeddingsGatewayKwargs | \"input\"\n    > {}\n\nexport type WatsonxEmbeddingsConstructor = XOR<\n  WatsonxInputEmbeddings,\n  WatsonxInputGatewayEmbeddings\n> &\n  WatsonxAuth;\n\nexport class WatsonxEmbeddings\n  extends Embeddings\n  implements WatsonxEmbeddingsParams, WatsonxInputGatewayEmbeddings\n{\n  model: string;\n\n  serviceUrl: string;\n\n  version: string;\n\n  spaceId?: string;\n\n  projectId?: string;\n\n  truncateInputTokens?: number;\n\n  returnOptions?: WatsonXAI.EmbeddingReturnOptions;\n\n  maxRetries?: number;\n\n  maxConcurrency = 1;\n\n  modelGatewayKwargs?: WatsonxEmbeddingsGatewayKwargs | undefined;\n\n  modelGateway = false;\n\n  protected service?: WatsonXAI;\n\n  protected gateway?: Gateway;\n\n  // oxlint-disable-next-line typescript/no-explicit-any\n  private checkValidProperties(fields: any, includeCommonProps = true) {\n    const alwaysAllowedProps = [\"headers\", \"signal\", \"promptIndex\"];\n\n    const authProps = [\n      \"serviceUrl\",\n      \"watsonxAIApikey\",\n      \"watsonxAIBearerToken\",\n      \"watsonxAIUsername\",\n      \"watsonxAIPassword\",\n      \"watsonxAIUrl\",\n      \"watsonxAIAuthType\",\n      \"disableSSL\",\n    ];\n\n    const sharedProps = [\n      \"maxRetries\",\n      \"watsonxCallbacks\",\n      \"authenticator\",\n      \"serviceUrl\",\n      \"version\",\n      \"streaming\",\n      \"callbackManager\",\n      \"callbacks\",\n      \"maxConcurrency\",\n      \"cache\",\n      \"metadata\",\n      \"concurrency\",\n      \"onFailedAttempt\",\n      \"concurrency\",\n      \"verbose\",\n      \"tags\",\n      \"headers\",\n      \"signal\",\n      \"disableStreaming\",\n    ];\n\n    const projectOrSpaceProps = [\n      \"truncateInputTokens\",\n      \"returnOptions\",\n      \"model\",\n      \"projectId\",\n      \"spaceId\",\n    ];\n    const gatewayProps = [\"model\", \"modelGatewayKwargs\", \"modelGateway\"];\n    const validProps: string[] = [...alwaysAllowedProps];\n    if (includeCommonProps) validProps.push(...authProps, ...sharedProps);\n\n    if (this.modelGateway) {\n      validProps.push(...gatewayProps);\n    } else if (this.spaceId || this.projectId) {\n      validProps.push(...projectOrSpaceProps);\n    }\n\n    checkValidProps(fields, validProps);\n  }\n\n  constructor(fields: WatsonxEmbeddingsConstructor) {\n    super(fields);\n    expectOneOf(fields, [\"projectId\", \"spaceId\", \"modelGateway\"], true);\n    this.projectId = fields?.projectId;\n    this.spaceId = fields?.spaceId;\n    this.modelGateway = fields.modelGateway ?? this.modelGateway;\n\n    this.checkValidProperties(fields);\n\n    this.model = fields.model;\n    this.version = fields.version;\n    this.serviceUrl = fields.serviceUrl;\n    this.truncateInputTokens = fields.truncateInputTokens;\n    this.returnOptions = fields.returnOptions;\n    this.maxConcurrency = fields.maxConcurrency ?? this.maxConcurrency;\n    this.maxRetries = fields.maxRetries ?? 0;\n    this.serviceUrl = fields?.serviceUrl;\n    this.modelGatewayKwargs = fields.modelGatewayKwargs;\n\n    const {\n      watsonxAIApikey,\n      watsonxAIAuthType,\n      watsonxAIBearerToken,\n      watsonxAIUsername,\n      watsonxAIPassword,\n      watsonxAIUrl,\n      disableSSL,\n      version,\n      serviceUrl,\n    } = fields;\n\n    const authData = {\n      watsonxAIApikey,\n      watsonxAIAuthType,\n      watsonxAIBearerToken,\n      watsonxAIUsername,\n      watsonxAIPassword,\n      watsonxAIUrl,\n      disableSSL,\n      version,\n      serviceUrl,\n    };\n    if (this.modelGateway) {\n      const auth = authenticateAndSetGatewayInstance(authData);\n      if (auth) this.gateway = auth;\n      else throw new Error(\"You have not provided one type of authentication\");\n    } else {\n      const auth = authenticateAndSetInstance(authData);\n      if (auth) this.service = auth;\n      else throw new Error(\"You have not provided one type of authentication\");\n    }\n  }\n\n  scopeId():\n    | { projectId: string; modelId: string }\n    | { spaceId: string; modelId: string }\n    | { model: string } {\n    if (this.projectId)\n      return { projectId: this.projectId, modelId: this.model };\n    else if (this.spaceId)\n      return { spaceId: this.spaceId, modelId: this.model };\n    else\n      return {\n        model: this.model,\n      };\n  }\n\n  invocationParams() {\n    return {\n      truncate_input_tokens: this.truncateInputTokens,\n      return_options: this.returnOptions,\n    };\n  }\n\n  async listModels() {\n    if (this.service) {\n      const { service } = this;\n      const listModelParams = {\n        filters: \"function_embedding\",\n      };\n      const caller = new AsyncCaller({\n        maxConcurrency: this.maxConcurrency,\n        maxRetries: this.maxRetries,\n      });\n      const listModels = await caller.call(() =>\n        service.listFoundationModelSpecs(listModelParams)\n      );\n      return listModels.result.resources?.map((item) => item.model_id);\n    } else throw new Error(\"This method is not supported in model gateway\");\n  }\n\n  private async embedSingleText(inputs: string[]) {\n    const scopeId = this.scopeId();\n    if (\"modelId\" in scopeId && this.service) {\n      const { service } = this;\n      const caller = new AsyncCaller({\n        maxConcurrency: this.maxConcurrency,\n        maxRetries: this.maxRetries,\n      });\n      const embeddings = await caller.call(() =>\n        service.embedText({\n          inputs,\n          ...scopeId,\n          parameters: this.invocationParams(),\n        })\n      );\n      return embeddings.result.results.map((item) => item.embedding);\n    } else if (this.gateway && \"model\" in scopeId) {\n      const { gateway } = this;\n      const caller = new AsyncCaller({\n        maxConcurrency: this.maxConcurrency,\n        maxRetries: this.maxRetries,\n      });\n      const embeddings = await caller.call(() =>\n        gateway.embeddings.completion.create({\n          input: inputs,\n          ...scopeId,\n        })\n      );\n      const res = embeddings.result.data.map((item) => item.embedding);\n      return res;\n    }\n    throw new Error(\n      \"Invalid parameters provided. Please check passed properties to class instance\"\n    );\n  }\n\n  async embedDocuments(documents: string[]): Promise<number[][]> {\n    const data = await this.embedSingleText(documents);\n    return data;\n  }\n\n  async embedQuery(document: string): Promise<number[]> {\n    const data = await this.embedSingleText([document]);\n    return data[0];\n  }\n}\n"],"mappings":"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"}