@@ -40,47 +40,53 @@ export class DialoqbaseHybridRetrival extends BaseRetriever {
40
40
protected async similaritySearch (
41
41
query : string ,
42
42
k : number ,
43
- _callbacks ?: Callbacks ,
43
+ _callbacks ?: Callbacks
44
44
) : Promise < SearchResult [ ] > {
45
45
try {
46
+ const embeddedQuery = await this . embeddings . embedQuery ( query ) ;
46
47
47
- const embeddedQuery = await this . embeddings . embedQuery ( query ) ;
48
+ const vector = `[${ embeddedQuery . join ( "," ) } ]` ;
49
+ const bot_id = this . botId ;
48
50
49
- const vector = `[${ embeddedQuery . join ( "," ) } ]` ;
50
- const bot_id = this . botId ;
51
-
52
- const data = await prisma . $queryRaw `
51
+ const data = await prisma . $queryRaw `
53
52
SELECT * FROM "similarity_search_v2"(query_embedding := ${ vector } ::vector, botId := ${ bot_id } ::text,match_count := ${ k } ::int)
54
53
` ;
55
54
56
- const result : [ Document , number , number ] [ ] = (
57
- data as SearchEmbeddingsResponse [ ]
58
- ) . map ( ( resp ) => [
59
- new Document ( {
60
- metadata : resp . metadata ,
61
- pageContent : resp . content ,
62
- } ) ,
63
- resp . similarity * 10 ,
64
- resp . id ,
65
- ] ) ;
66
-
67
-
68
- return result ;
69
- } catch ( e ) {
70
- console . log ( e )
71
- return [ ]
72
- }
55
+ const result : [ Document , number , number ] [ ] = (
56
+ data as SearchEmbeddingsResponse [ ]
57
+ ) . map ( ( resp ) => [
58
+ new Document ( {
59
+ metadata : resp . metadata ,
60
+ pageContent : resp . content ,
61
+ } ) ,
62
+ resp . similarity * 10 ,
63
+ resp . id ,
64
+ ] ) ;
65
+
66
+ return result ;
67
+ } catch ( e ) {
68
+ console . log ( e ) ;
69
+ return [ ] ;
70
+ }
73
71
}
74
72
75
73
protected async keywordSearch (
76
74
query : string ,
77
- k : number ,
75
+ k : number
78
76
) : Promise < SearchResult [ ] > {
79
77
const query_text = query ;
80
78
const bot_id = this . botId ;
81
79
80
+ const botInfo = await prisma . bot . findFirst ( {
81
+ where : {
82
+ id : bot_id ,
83
+ } ,
84
+ } ) ;
85
+
86
+ const match_count = botInfo ?. noOfDocumentsToRetrieve || k ;
87
+
82
88
const data = await prisma . $queryRaw `
83
- SELECT * FROM "kw_match_documents"(query_text := ${ query_text } ::text, bot_id := ${ bot_id } ::text,match_count := ${ k } ::int)
89
+ SELECT * FROM "kw_match_documents"(query_text := ${ query_text } ::text, bot_id := ${ bot_id } ::text,match_count := ${ match_count } ::int)
84
90
` ;
85
91
86
92
const result : [ Document , number , number ] [ ] = (
@@ -104,12 +110,12 @@ export class DialoqbaseHybridRetrival extends BaseRetriever {
104
110
query : string ,
105
111
similarityK : number ,
106
112
keywordK : number ,
107
- callbacks ?: Callbacks ,
113
+ callbacks ?: Callbacks
108
114
) : Promise < SearchResult [ ] > {
109
115
const similarity_search = this . similaritySearch (
110
116
query ,
111
117
similarityK ,
112
- callbacks ,
118
+ callbacks
113
119
) ;
114
120
115
121
const keyword_search = this . keywordSearch ( query , keywordK ) ;
@@ -136,13 +142,13 @@ export class DialoqbaseHybridRetrival extends BaseRetriever {
136
142
137
143
async _getRelevantDocuments (
138
144
query : string ,
139
- runManager ?: CallbackManagerForRetrieverRun ,
145
+ runManager ?: CallbackManagerForRetrieverRun
140
146
) : Promise < Document [ ] > {
141
147
const searchResults = await this . hybridSearch (
142
148
query ,
143
149
this . similarityK ,
144
150
this . keywordK ,
145
- runManager ?. getChild ( "hybrid_search" ) ,
151
+ runManager ?. getChild ( "hybrid_search" )
146
152
) ;
147
153
148
154
return searchResults . map ( ( [ doc ] ) => doc ) ;
0 commit comments