File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -43,9 +43,13 @@ class DocsContextProvider extends BaseContextProvider {
4343 try {
4444 const scores = await reranker . rerank ( fullInput , chunksCopy ) ;
4545
46- chunksCopy . sort (
47- ( a , b ) => scores [ chunksCopy . indexOf ( b ) ] - scores [ chunksCopy . indexOf ( a ) ] ,
48- ) ;
46+ if ( Array . isArray ( scores ) ) {
47+ // reranker model has returned a valid array
48+ chunksCopy . sort (
49+ ( a , b ) =>
50+ scores [ chunksCopy . indexOf ( b ) ] - scores [ chunksCopy . indexOf ( a ) ] ,
51+ ) ;
52+ }
4953
5054 chunksCopy = chunksCopy . splice (
5155 0 ,
Original file line number Diff line number Diff line change @@ -27,7 +27,7 @@ export default class RerankerRetrievalPipeline extends BaseRetrievalPipeline {
2727
2828 let embeddingsChunks : Chunk [ ] = [ ] ;
2929 try {
30- embeddingsChunks = ! ! config . selectedModelByRole . embed
30+ embeddingsChunks = Boolean ( config . selectedModelByRole . embed )
3131 ? await this . retrieveEmbeddings ( input , nRetrieve )
3232 : [ ] ;
3333 } catch ( error ) {
@@ -116,7 +116,7 @@ export default class RerankerRetrievalPipeline extends BaseRetrievalPipeline {
116116 const chunkIndexMap = new Map < Chunk , number > ( ) ;
117117 chunks . forEach ( ( chunk , idx ) => chunkIndexMap . set ( chunk , idx ) ) ;
118118
119- results . sort (
119+ results ? .sort (
120120 ( a , b ) => scores [ chunkIndexMap . get ( b ) ! ] - scores [ chunkIndexMap . get ( a ) ! ] ,
121121 ) ;
122122 results = results . slice ( 0 , this . options . nFinal ) ;
Original file line number Diff line number Diff line change 1- import { Chunk , LLMOptions } from "../../index.js " ;
1+ import { z } from "zod " ;
22
3+ import { Chunk , LLMOptions } from "../../index.js" ;
34import OpenAI from "./OpenAI.js" ;
45
6+ /**used to check a valid response from voyage is received
7+ * reference: https://docs.voyageai.com/reference/reranker-api
8+ */
9+ const VoyageRerankSuccessResponseSchema = z . object ( {
10+ data : z . array (
11+ z . object ( {
12+ index : z . number ( ) ,
13+ relevance_score : z . number ( ) ,
14+ document : z . string ( ) ,
15+ } ) ,
16+ ) ,
17+ } ) ;
18+
519class Voyage extends OpenAI {
620 static providerName = "voyage" ;
721 static defaultOptions : Partial < LLMOptions > | undefined = {
@@ -36,7 +50,10 @@ class Voyage extends OpenAI {
3650 const data = ( await resp . json ( ) ) as {
3751 data : Array < { index : number ; relevance_score : number } > ;
3852 } ;
39- const results = data . data . sort ( ( a , b ) => a . index - b . index ) ;
53+
54+ const parsedData = VoyageRerankSuccessResponseSchema . parse ( data ) ;
55+
56+ const results = parsedData . data . sort ( ( a , b ) => a . index - b . index ) ;
4057 return results . map ( ( result ) => result . relevance_score ) ;
4158 }
4259}
You can’t perform that action at this time.
0 commit comments