{"version":3,"file":"ibm.cjs","names":["BaseDocumentCompressor","authenticateAndSetInstance","AsyncCaller"],"sources":["../../src/document_compressors/ibm.ts"],"sourcesContent":["import { DocumentInterface } from \"@langchain/core/documents\";\nimport { BaseDocumentCompressor } from \"@langchain/core/retrievers/document_compressors\";\nimport { WatsonXAI } from \"@ibm-cloud/watsonx-ai\";\nimport { AsyncCaller } from \"@langchain/core/utils/async_caller\";\nimport { TextRerankParams } from \"@ibm-cloud/watsonx-ai/dist/watsonx-ai-ml/vml_v1.js\";\nimport { WatsonxAuth, WatsonxRerankBasicOptions } from \"../types/ibm.js\";\nimport { authenticateAndSetInstance } from \"../utils/ibm.js\";\n\nexport interface WatsonxInputRerank\n  extends\n    Omit<TextRerankParams, \"modelId\" | \"inputs\" | \"query\">,\n    WatsonxRerankBasicOptions {\n  model: string;\n  truncateInputTokens?: number;\n  returnOptions?: {\n    topN?: number;\n    inputs?: boolean;\n  };\n}\nexport class WatsonxRerank\n  extends BaseDocumentCompressor\n  implements WatsonxInputRerank\n{\n  maxRetries = 0;\n\n  version = \"2024-05-31\";\n\n  truncateInputTokens?: number | undefined;\n\n  returnOptions?:\n    | { topN?: number; inputs?: boolean; query?: boolean }\n    | undefined;\n\n  model: string;\n\n  spaceId?: string | undefined;\n\n  projectId?: string | undefined;\n\n  maxConcurrency?: number | undefined;\n\n  serviceUrl: string;\n\n  service: WatsonXAI;\n\n  constructor(fields: WatsonxInputRerank & WatsonxAuth) {\n    super();\n    if (fields.projectId && fields.spaceId)\n      throw new Error(\"Maximum 1 id type can be specified per instance\");\n\n    if (!fields.projectId && !fields.spaceId)\n      throw new Error(\n        \"No id specified! At least id of 1 type has to be specified\"\n      );\n    this.model = fields.model;\n    this.serviceUrl = fields.serviceUrl;\n    this.version = fields.version;\n    this.projectId = fields?.projectId;\n    this.spaceId = fields?.spaceId;\n    this.maxRetries = fields.maxRetries ?? this.maxRetries;\n    this.maxConcurrency = fields.maxConcurrency;\n    this.truncateInputTokens = fields.truncateInputTokens;\n    this.returnOptions = fields.returnOptions;\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 auth = authenticateAndSetInstance({\n      watsonxAIApikey,\n      watsonxAIAuthType,\n      watsonxAIBearerToken,\n      watsonxAIUsername,\n      watsonxAIPassword,\n      watsonxAIUrl,\n      disableSSL,\n      version,\n      serviceUrl,\n    });\n    if (auth) this.service = auth;\n    else throw new Error(\"You have not provided one type of authentication\");\n  }\n\n  scopeId() {\n    if (this.projectId)\n      return { projectId: this.projectId, modelId: this.model };\n    else return { spaceId: this.spaceId, modelId: this.model };\n  }\n\n  invocationParams(options?: Partial<WatsonxInputRerank>) {\n    return {\n      truncate_input_tokens:\n        options?.truncateInputTokens ?? this.truncateInputTokens,\n      return_options: {\n        top_n: options?.returnOptions?.topN ?? this.returnOptions?.topN,\n        inputs: options?.returnOptions?.inputs ?? this.returnOptions?.inputs,\n      },\n    };\n  }\n\n  async compressDocuments(\n    documents: DocumentInterface[],\n    query: string\n  ): Promise<DocumentInterface[]> {\n    const caller = new AsyncCaller({\n      maxConcurrency: this.maxConcurrency,\n      maxRetries: this.maxRetries,\n    });\n    const inputs = documents.map((document) => ({\n      text: document.pageContent,\n    }));\n    const { result } = await caller.call(() =>\n      this.service.textRerank({\n        ...this.scopeId(),\n        inputs,\n        query,\n        parameters: {\n          truncate_input_tokens: this.truncateInputTokens,\n        },\n      })\n    );\n    const resultDocuments = result.results.map(({ index, score }) => {\n      const rankedDocument = documents[index];\n      rankedDocument.metadata.relevanceScore = score;\n      return rankedDocument;\n    });\n    return resultDocuments;\n  }\n\n  async rerank(\n    documents: Array<\n      DocumentInterface | string | Record<\"pageContent\", string>\n    >,\n    query: string,\n    options?: Partial<WatsonxInputRerank>\n  ): Promise<Array<{ index: number; relevanceScore: number; input?: string }>> {\n    const inputs = documents.map((document) => {\n      if (typeof document === \"string\") {\n        return { text: document };\n      }\n      return { text: document.pageContent };\n    });\n\n    const caller = new AsyncCaller({\n      maxConcurrency: this.maxConcurrency,\n      maxRetries: this.maxRetries,\n    });\n    const { result } = await caller.call(() =>\n      this.service.textRerank({\n        ...this.scopeId(),\n        inputs,\n        query,\n        parameters: this.invocationParams(options),\n      })\n    );\n    const response = result.results.map((document) => {\n      return document?.input\n        ? {\n            index: document.index,\n            relevanceScore: document.score,\n            input: document?.input.text,\n          }\n        : {\n            index: document.index,\n            relevanceScore: document.score,\n          };\n    });\n    return response;\n  }\n}\n"],"mappings":";;;;;;;AAmBA,IAAa,gBAAb,cACUA,gDAAAA,uBAEV;CACE,aAAa;CAEb,UAAU;CAEV;CAEA;CAIA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA,YAAY,QAA0C;AACpD,SAAO;AACP,MAAI,OAAO,aAAa,OAAO,QAC7B,OAAM,IAAI,MAAM,kDAAkD;AAEpE,MAAI,CAAC,OAAO,aAAa,CAAC,OAAO,QAC/B,OAAM,IAAI,MACR,6DACD;AACH,OAAK,QAAQ,OAAO;AACpB,OAAK,aAAa,OAAO;AACzB,OAAK,UAAU,OAAO;AACtB,OAAK,YAAY,QAAQ;AACzB,OAAK,UAAU,QAAQ;AACvB,OAAK,aAAa,OAAO,cAAc,KAAK;AAC5C,OAAK,iBAAiB,OAAO;AAC7B,OAAK,sBAAsB,OAAO;AAClC,OAAK,gBAAgB,OAAO;EAE5B,MAAM,EACJ,iBACA,mBACA,sBACA,mBACA,mBACA,cACA,YACA,SACA,eACE;EAEJ,MAAM,OAAOC,YAAAA,2BAA2B;GACtC;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD,CAAC;AACF,MAAI,KAAM,MAAK,UAAU;MACpB,OAAM,IAAI,MAAM,mDAAmD;;CAG1E,UAAU;AACR,MAAI,KAAK,UACP,QAAO;GAAE,WAAW,KAAK;GAAW,SAAS,KAAK;GAAO;MACtD,QAAO;GAAE,SAAS,KAAK;GAAS,SAAS,KAAK;GAAO;;CAG5D,iBAAiB,SAAuC;AACtD,SAAO;GACL,uBACE,SAAS,uBAAuB,KAAK;GACvC,gBAAgB;IACd,OAAO,SAAS,eAAe,QAAQ,KAAK,eAAe;IAC3D,QAAQ,SAAS,eAAe,UAAU,KAAK,eAAe;IAC/D;GACF;;CAGH,MAAM,kBACJ,WACA,OAC8B;EAC9B,MAAM,SAAS,IAAIC,mCAAAA,YAAY;GAC7B,gBAAgB,KAAK;GACrB,YAAY,KAAK;GAClB,CAAC;EACF,MAAM,SAAS,UAAU,KAAK,cAAc,EAC1C,MAAM,SAAS,aAChB,EAAE;EACH,MAAM,EAAE,WAAW,MAAM,OAAO,WAC9B,KAAK,QAAQ,WAAW;GACtB,GAAG,KAAK,SAAS;GACjB;GACA;GACA,YAAY,EACV,uBAAuB,KAAK,qBAC7B;GACF,CAAC,CACH;AAMD,SALwB,OAAO,QAAQ,KAAK,EAAE,OAAO,YAAY;GAC/D,MAAM,iBAAiB,UAAU;AACjC,kBAAe,SAAS,iBAAiB;AACzC,UAAO;IACP;;CAIJ,MAAM,OACJ,WAGA,OACA,SAC2E;EAC3E,MAAM,SAAS,UAAU,KAAK,aAAa;AACzC,OAAI,OAAO,aAAa,SACtB,QAAO,EAAE,MAAM,UAAU;AAE3B,UAAO,EAAE,MAAM,SAAS,aAAa;IACrC;EAMF,MAAM,EAAE,WAAW,MAJJ,IAAIA,mCAAAA,YAAY;GAC7B,gBAAgB,KAAK;GACrB,YAAY,KAAK;GAClB,CAAC,CAC8B,WAC9B,KAAK,QAAQ,WAAW;GACtB,GAAG,KAAK,SAAS;GACjB;GACA;GACA,YAAY,KAAK,iBAAiB,QAAQ;GAC3C,CAAC,CACH;AAaD,SAZiB,OAAO,QAAQ,KAAK,aAAa;AAChD,UAAO,UAAU,QACb;IACE,OAAO,SAAS;IAChB,gBAAgB,SAAS;IACzB,OAAO,UAAU,MAAM;IACxB,GACD;IACE,OAAO,SAAS;IAChB,gBAAgB,SAAS;IAC1B;IACL"}