@@ -151,7 +151,7 @@ PRIMARY KEY (uuid))`, s.embeddingTableName, s.collectionTableName)
151151
152152func (s Store ) AddDocuments (ctx context.Context , docs []schema.Document , options ... vectorstores.Option ) error {
153153 opts := s .getOptions (options ... )
154- if opts .Embedder != nil || opts . ScoreThreshold != 0 || opts .Filters != nil || opts .NameSpace != "" {
154+ if opts .ScoreThreshold != 0 || opts .Filters != nil || opts .NameSpace != "" {
155155 return ErrUnsupportedOptions
156156 }
157157
@@ -160,7 +160,11 @@ func (s Store) AddDocuments(ctx context.Context, docs []schema.Document, options
160160 texts = append (texts , doc .PageContent )
161161 }
162162
163- vectors , err := s .embedder .EmbedDocuments (ctx , texts )
163+ embedder := s .embedder
164+ if opts .Embedder != nil {
165+ embedder = opts .Embedder
166+ }
167+ vectors , err := embedder .EmbedDocuments (ctx , texts )
164168 if err != nil {
165169 return err
166170 }
@@ -186,11 +190,8 @@ func (s Store) SimilaritySearch(
186190 numDocuments int ,
187191 options ... vectorstores.Option ,
188192) ([]schema.Document , error ) {
189- collectionName := s .collectionName
190193 opts := s .getOptions (options ... )
191- if nameSpace := s .getNameSpace (opts ); nameSpace != "" {
192- collectionName = nameSpace
193- }
194+ collectionName := s .getNameSpace (opts )
194195 scoreThreshold , err := s .getScoreThreshold (opts )
195196 if err != nil {
196197 return nil , err
@@ -199,7 +200,11 @@ func (s Store) SimilaritySearch(
199200 if err != nil {
200201 return nil , err
201202 }
202- embedder , err := s .embedder .EmbedQuery (ctx , query )
203+ embedder := s .embedder
204+ if opts .Embedder != nil {
205+ embedder = opts .Embedder
206+ }
207+ embedderData , err := embedder .EmbedQuery (ctx , query )
203208 if err != nil {
204209 return nil , err
205210 }
@@ -236,7 +241,7 @@ LIMIT %d`, s.embeddingTableName,
236241 s .embeddingTableName ,
237242 s .collectionTableName , s .embeddingTableName , s .collectionTableName , s .collectionTableName , collectionName ,
238243 whereQuery , numDocuments )
239- rows , err := tx .Query (ctx , sql , pgvector .NewVector (embedder ))
244+ rows , err := tx .Query (ctx , sql , pgvector .NewVector (embedderData ))
240245 if err != nil {
241246 return nil , err
242247 }
@@ -295,6 +300,8 @@ func (s Store) createOrGetCollection(ctx context.Context) (string, error) {
295300 return collectionUUID , nil
296301}
297302
303+ // getOptions applies given options to default Options and returns it
304+ // This uses options pattern so clients can easily pass options without changing function signature.
298305func (s Store ) getOptions (options ... vectorstores.Option ) vectorstores.Options {
299306 opts := vectorstores.Options {}
300307 for _ , opt := range options {
@@ -307,7 +314,7 @@ func (s Store) getNameSpace(opts vectorstores.Options) string {
307314 if opts .NameSpace != "" {
308315 return opts .NameSpace
309316 }
310- return ""
317+ return s . collectionName
311318}
312319
313320func (s Store ) getScoreThreshold (opts vectorstores.Options ) (float32 , error ) {
@@ -317,6 +324,7 @@ func (s Store) getScoreThreshold(opts vectorstores.Options) (float32, error) {
317324 return opts .ScoreThreshold , nil
318325}
319326
327+ // getFilters return metadata filters, now only support map[key]value pattern
320328// TODO: should support more types like {"key1": {"key2":"values2"}} or {"key": ["value1", "values2"]}.
321329func (s Store ) getFilters (opts vectorstores.Options ) (map [string ]any , error ) {
322330 if opts .Filters != nil {
0 commit comments