@@ -3,6 +3,7 @@ import { OpenAIEmbeddings } from "@langchain/openai";
33import path from "node:path" ;
44import fs from "node:fs/promises" ;
55import semver from "semver" ;
6+ import { logger } from "../utils/logger" ;
67import type { SearchResult , VectorStoreProgressCallback } from "../types" ;
78import type { Document } from "@langchain/core/documents" ;
89import { RecursiveCharacterTextSplitter } from "langchain/text_splitter" ;
@@ -46,6 +47,7 @@ export class VectorStoreManager {
4647 library : string ,
4748 version : string
4849 ) : Promise < MemoryVectorStore > {
50+ logger . info ( `💾 Creating store for ${ library } @${ version } ` ) ;
4951 const storePath = this . getStorePath ( library , version ) ;
5052 await fs . mkdir ( storePath , { recursive : true } ) ;
5153
@@ -56,6 +58,9 @@ export class VectorStoreManager {
5658 library : string ,
5759 targetVersion ?: string
5860 ) : Promise < string | null > {
61+ logger . info (
62+ `🔍 Finding best version for ${ library } ${ targetVersion ? `@${ targetVersion } ` : "" } `
63+ ) ;
5964 try {
6065 const libraryPath = path . join ( this . baseDir , library ) ;
6166 const versions = await fs . readdir ( libraryPath ) ;
@@ -79,13 +84,24 @@ export class VectorStoreManager {
7984 )
8085 ) . filter ( ( v ) : v is string => v !== null ) ;
8186
82- if ( validVersions . length === 0 ) return null ;
87+ if ( validVersions . length === 0 ) {
88+ logger . warn ( `⚠️ No valid versions found for ${ library } ` ) ;
89+ return null ;
90+ }
91+
92+ const result = ! targetVersion
93+ ? semver . maxSatisfying ( validVersions , "*" )
94+ : semver . maxSatisfying ( validVersions , `<=${ targetVersion } ` ) ;
8395
84- if ( ! targetVersion ) {
85- return semver . maxSatisfying ( validVersions , "*" ) || null ;
96+ if ( result ) {
97+ logger . info ( `✅ Found version ${ result } for ${ library } ` ) ;
98+ } else {
99+ logger . warn (
100+ `⚠️ No matching version found for ${ library } ${ targetVersion ? `@${ targetVersion } ` : "" } `
101+ ) ;
86102 }
87103
88- return semver . maxSatisfying ( validVersions , `<= ${ targetVersion } ` ) || null ;
104+ return result || null ;
89105 } catch ( error ) {
90106 if ( ( error as NodeJS . ErrnoException ) . code === "ENOENT" ) {
91107 return null ;
@@ -95,6 +111,7 @@ export class VectorStoreManager {
95111 }
96112
97113 async clearStore ( library : string , version : string ) : Promise < void > {
114+ logger . info ( `🗑️ Clearing store for ${ library } @${ version } ` ) ;
98115 const storePath = this . getStorePath ( library , version ) ;
99116 const storeFile = path . join ( storePath , STORE_FILENAME ) ;
100117 try {
@@ -112,6 +129,9 @@ export class VectorStoreManager {
112129 version : string ,
113130 document : Document
114131 ) : Promise < void > {
132+ logger . info (
133+ `📚 Adding document: ${ document . metadata . title } for ${ library } @${ version } `
134+ ) ;
115135 const store = await this . createStore ( library , version ) ;
116136 const splitter = new RecursiveCharacterTextSplitter ( {
117137 chunkSize : 4000 ,
@@ -125,6 +145,7 @@ export class VectorStoreManager {
125145
126146 // Split document into smaller chunks
127147 const splitDocs = await splitter . splitDocuments ( [ document ] ) ;
148+ logger . info ( `📄 Split document into ${ splitDocs . length } chunks` ) ;
128149
129150 // Report progress
130151 if ( this . onProgress ) {
@@ -174,20 +195,23 @@ export class VectorStoreManager {
174195 k : limit * 2 ,
175196 searchType : "similarity" ,
176197 } ) ;
177- const results = await retriever . invoke ( query ) ;
178- const rerankedResults = await BM25Retriever . fromDocuments ( results , {
179- k : limit ,
180- includeScore : true ,
181- } ) . invoke ( query ) ;
198+ const initialResults = await retriever . invoke ( query ) ;
199+ const rerankedResults = await BM25Retriever . fromDocuments (
200+ initialResults ,
201+ {
202+ k : limit ,
203+ includeScore : true ,
204+ }
205+ ) . invoke ( query ) ;
182206
183207 return rerankedResults . map ( ( doc ) => ( {
184208 content : doc . pageContent ,
185209 score : ( doc . metadata . bm25Score as number ) ?? 0 ,
186210 metadata : {
187- url : doc . metadata . url ,
188- title : doc . metadata . title ,
189- library : doc . metadata . library ,
190- version : doc . metadata . version ,
211+ url : doc . metadata . url as string ,
212+ title : doc . metadata . title as string ,
213+ library : doc . metadata . library as string ,
214+ version : doc . metadata . version as string ,
191215 } ,
192216 } ) ) ;
193217 } catch ( error ) {
0 commit comments