UNPKG

@pinecone-database/pinecone

Version:

This is the official Node.js SDK for [Pinecone](https://www.pinecone.io), written in TypeScript.

77 lines 3.46 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const errors_1 = require("../../errors"); const rerank_1 = require("../rerank"); const rerankModel = 'test-model'; const myQuery = 'test-query'; const setupRerankResponse = (response = {}, isSuccess = true) => { const fakeRerank = jest .fn() .mockImplementation(() => isSuccess ? Promise.resolve(response) : Promise.reject(response)); const IA = { rerank: fakeRerank }; return IA; }; describe('rerank', () => { test('Confirm throws error if no documents are passed', async () => { const IA = setupRerankResponse(); const rerankCmd = (0, rerank_1.rerank)(IA); await expect(rerankCmd(rerankModel, myQuery, [], {})).rejects.toThrow(new errors_1.PineconeArgumentError('You must pass at least one document to rerank')); }); test('Confirm docs as list of strings is converted to list of objects with `text` key', async () => { const myDocuments = ['doc1', 'doc2']; const expectedDocuments = [{ text: 'doc1' }, { text: 'doc2' }]; const IA = setupRerankResponse({ model: 'some-model', data: [{}], usage: { rerankUnits: 1 }, }); await (0, rerank_1.rerank)(IA)(rerankModel, myQuery, myDocuments, {}); const expectedReq = { model: rerankModel, query: myQuery, documents: expectedDocuments, parameters: {}, rankFields: ['text'], returnDocuments: true, topN: 2, }; expect(IA.rerank).toHaveBeenCalledWith({ rerankRequest: expectedReq }); }); test('Confirm provided rankFields override default `text` field for reranking', async () => { const myDocuments = [ { text: 'doc1', title: 'title1' }, { text: 'doc2', title: 'title2' }, ]; const rankFields = ['title']; const IA = setupRerankResponse({ rerankResponse: {} }); await (0, rerank_1.rerank)(IA)(rerankModel, myQuery, myDocuments, { rankFields, }); const expectedReq = { model: rerankModel, query: myQuery, documents: myDocuments, rankFields, parameters: {}, returnDocuments: true, topN: 2, }; expect(IA.rerank).toHaveBeenCalledWith({ rerankRequest: expectedReq }); }); test('Confirm error thrown if query is missing', async () => { const myQuery = ''; const myDocuments = [{ text: 'doc1' }, { text: 'doc2' }]; const IA = setupRerankResponse(); const rerankCmd = (0, rerank_1.rerank)(IA); await expect(rerankCmd(rerankModel, myQuery, myDocuments, {})).rejects.toThrow(new errors_1.PineconeArgumentError('You must pass a query to rerank')); }); test('Confirm error thrown if model is missing', async () => { const rerankModel = ''; const myDocuments = [{ text: 'doc1' }, { text: 'doc2' }]; const IA = setupRerankResponse(); const rerankCmd = (0, rerank_1.rerank)(IA); await expect(rerankCmd(rerankModel, myQuery, myDocuments, {})).rejects.toThrow(new errors_1.PineconeArgumentError('You must pass the name of a supported reranking model in order to rerank' + ' documents. See https://docs.pinecone.io/models for supported models.')); }); }); //# sourceMappingURL=rerank.test.js.map