UNPKG

@langchain/community

Version:
1 lines 7.25 kB
{"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"}