Reranking is a technique used to improve search relevance by reordering a set of documents based on their relevance to a query.
Unlike embedding-based similarity search, reranking models are specifically trained to understand the relationship between queries and documents,
often producing more accurate relevance scores.
The AI SDK provides the rerank function to rerank documents based on their relevance to a query.
You can use it with reranking models, e.g. cohere.reranking('rerank-v4.0-pro') or bedrock.reranking('cohere.rerank-v3-5:0').
import { rerank } from 'ai';import { cohere } from '@ai-sdk/cohere';const documents = [ 'sunny day at the beach', 'rainy afternoon in the city', 'snowy night in the mountains',];const { ranking } = await rerank({ model: cohere.reranking('rerank-v4.0-pro'), documents, query: 'talk about rain', topN: 2, // Return top 2 most relevant documents});console.log(ranking);// [// { originalIndex: 1, score: 0.9, document: 'rainy afternoon in the city' },// { originalIndex: 0, score: 0.3, document: 'sunny day at the beach' }// ]
Reranking also supports structured documents (JSON objects), making it ideal for searching through databases, emails, or other structured content:
import { rerank } from 'ai';import { cohere } from '@ai-sdk/cohere';const documents = [ { from: 'Paul Doe', subject: 'Follow-up', text: 'We are happy to give you a discount of 20% on your next order.', }, { from: 'John McGill', subject: 'Missing Info', text: 'Sorry, but here is the pricing information from Oracle: $5000/month', },];const { ranking, rerankedDocuments } = await rerank({ model: cohere.reranking('rerank-v4.0-pro'), documents, query: 'Which pricing did we get from Oracle?', topN: 1,});console.log(rerankedDocuments[0]);// { from: 'John McGill', subject: 'Missing Info', text: '...' }
The rerank function accepts an optional maxRetries parameter of type number
that you can use to set the maximum number of retries for the reranking process.
It defaults to 2 retries (3 attempts in total). You can set it to 0 to disable retries.
import { cohere } from '@ai-sdk/cohere';import { rerank } from 'ai';const { ranking } = await rerank({ model: cohere.reranking('rerank-v4.0-pro'), documents: ['sunny day at the beach', 'rainy afternoon in the city'], query: 'talk about rain', maxRetries: 0, // Disable retries});
The rerank function accepts an optional abortSignal parameter of
type AbortSignal
that you can use to abort the reranking process or set a timeout.
import { cohere } from '@ai-sdk/cohere';import { rerank } from 'ai';const { ranking } = await rerank({ model: cohere.reranking('rerank-v4.0-pro'), documents: ['sunny day at the beach', 'rainy afternoon in the city'], query: 'talk about rain', abortSignal: AbortSignal.timeout(5000), // Abort after 5 seconds});
The rerank function accepts an optional headers parameter of type Record<string, string>
that you can use to add custom headers to the reranking request.
import { cohere } from '@ai-sdk/cohere';import { rerank } from 'ai';const { ranking } = await rerank({ model: cohere.reranking('rerank-v4.0-pro'), documents: ['sunny day at the beach', 'rainy afternoon in the city'], query: 'talk about rain', headers: { 'X-Custom-Header': 'custom-value' },});
The rerank function returns response information that includes the raw provider response:
import { cohere } from '@ai-sdk/cohere';import { rerank } from 'ai';const { ranking, response } = await rerank({ model: cohere.reranking('rerank-v4.0-pro'), documents: ['sunny day at the beach', 'rainy afternoon in the city'], query: 'talk about rain',});console.log(response); // { id, timestamp, modelId, headers, body }