@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
JavaScript
"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