UNPKG

@pinecone-database/pinecone

Version:

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

100 lines 5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const pinecone_1 = require("../../pinecone"); describe('Integration Test: Pinecone Inference API rerank endpoint', () => { let model; let query; let documents; let pinecone; beforeAll(() => { model = 'bge-reranker-v2-m3'; query = 'What are some good Turkey dishes for Thanksgiving?'; documents = [ 'document content 1 yay I am about turkey', 'document content 2', ]; const apiKey = process.env.PINECONE_API_KEY || ''; pinecone = new pinecone_1.Pinecone({ apiKey }); }); test('Confirm high-level response structure', async () => { const response = await pinecone.inference.rerank(model, query, documents); expect(response.model).toEqual(model); expect(response.data).toBeDefined(); expect(response.usage).toBeDefined(); }); test('Confirm lower-level response structure', async () => { const response = await pinecone.inference.rerank(model, query, documents); expect(response.data.length).toBe(documents.length); expect(response.data.map((doc) => doc.index)).toBeDefined(); expect(response.data.map((doc) => doc.score)).toBeDefined(); expect(response.data.map((doc) => doc.document)).toBeDefined(); // @ts-ignore // (Just ignoring the fact that technically doc.document['text'] could be undefined) expect(response.data.map((doc) => doc.document['text'])).toBeDefined(); }); test('Confirm list of strings as docs + rankFields set to customField fails', async () => { const myDocuments = ['doc1', 'doc2']; const rankFields = ['customField']; await expect(pinecone.inference.rerank(model, query, myDocuments, { rankFields })).rejects.toThrow(expect.objectContaining({ message: expect.stringContaining("field 'customField' not found in document at index 0"), })); }); test('Confirm docs as list of objects + no rankFields succeeds, if docs contain `text` key, succeeds', async () => { const myDocuments = [{ text: 'doc1' }, { text: 'doc2' }]; const resp = await pinecone.inference.rerank(model, query, myDocuments); expect(resp.usage.rerankUnits).toBeGreaterThanOrEqual(1); }); test('Confirm docs as list of objects with additional customField + no rankfields, succeeds', async () => { const myDocuments = [ { text: 'hi', customField: 'doc1' }, { text: 'bye', customField: 'doc2' }, ]; const resp = await pinecone.inference.rerank(model, query, myDocuments); expect(resp.usage.rerankUnits).toBeGreaterThanOrEqual(1); }); test('Confirm docs as list of objects with only custom fields + custom rankFields, succeeds', async () => { const myDocuments = [ { customField2: 'hi', customField: 'doc1' }, { customField2: 'bye', customField: 'doc2' }, ]; const rankFields = ['customField2']; const resp = await pinecone.inference.rerank(model, query, myDocuments, { rankFields: rankFields, }); expect(resp.usage.rerankUnits).toBeGreaterThanOrEqual(1); }); test('Confirm error thrown if docs as list of objects only has custom fields + no custom rankFields obj is passed', async () => { const myDocuments = [ { customField2: 'hi', customField: 'doc1' }, { customField2: 'bye', customField: 'doc2' }, ]; await expect(pinecone.inference.rerank(model, query, myDocuments)).rejects.toThrow(expect.objectContaining({ message: expect.stringContaining('Documents must be a list of strings or objects containing the "text" field'), })); }); test('Confirm error thrown if rankFields does not match fields in passed documents', async () => { const myDocuments = [ { text: 'doc1', title: 'title1' }, { text: 'doc2', title: 'title2' }, ]; const rankFields = ['NonExistentRankField']; await expect(pinecone.inference.rerank(model, query, myDocuments, { rankFields: rankFields, })).rejects.toThrow(expect.objectContaining({ message: expect.stringContaining("field 'NonExistentRankField' not found in document at index"), })); }); test('Confirm error thrown if rankFields > 1 for model that only allows 1', async () => { const myDocuments = [ { text: 'doc1', title: 'title1' }, { text: 'doc2', title: 'title2' }, ]; const rankFields = ['title', 'text']; await expect(pinecone.inference.rerank(model, query, myDocuments, { rankFields: rankFields, })).rejects.toThrow(expect.objectContaining({ message: expect.stringContaining('"Only one rank field is supported for model'), })); }); }); //# sourceMappingURL=rerank.test.js.map