github.com/weaviate/weaviate@v1.24.6/modules/qna-openai/ask/searcher.go (about) 1 // _ _ 2 // __ _____ __ ___ ___ __ _| |_ ___ 3 // \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \ 4 // \ V V / __/ (_| |\ V /| | (_| | || __/ 5 // \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___| 6 // 7 // Copyright © 2016 - 2024 Weaviate B.V. All rights reserved. 8 // 9 // CONTACT: hello@weaviate.io 10 // 11 12 package ask 13 14 import ( 15 "context" 16 17 "github.com/weaviate/weaviate/entities/modulecapabilities" 18 "github.com/weaviate/weaviate/entities/moduletools" 19 ) 20 21 type vectorFromAskParam struct { 22 nearTextDep modulecapabilities.Dependency 23 } 24 25 func (s *vectorFromAskParam) vectorForAskParamFn(ctx context.Context, params interface{}, 26 className string, 27 findVectorFn modulecapabilities.FindVectorFn, 28 cfg moduletools.ClassConfig, 29 ) ([]float32, error) { 30 return s.vectorFromAskParam(ctx, params.(*AskParams), className, findVectorFn, cfg) 31 } 32 33 func (s *vectorFromAskParam) vectorFromAskParam(ctx context.Context, 34 params *AskParams, className string, 35 findVectorFn modulecapabilities.FindVectorFn, 36 cfg moduletools.ClassConfig, 37 ) ([]float32, error) { 38 arg := s.nearTextDep.GraphQLArgument() 39 40 rawNearTextParam := map[string]interface{}{} 41 rawNearTextParam["concepts"] = []interface{}{params.Question} 42 43 nearTextParam := arg.ExtractFunction(rawNearTextParam) 44 vectorSearchFn := s.nearTextDep.VectorSearch() 45 46 return vectorSearchFn(ctx, nearTextParam, className, findVectorFn, cfg) 47 } 48 49 type Searcher struct { 50 // nearText modules dependencies 51 nearTextDeps []modulecapabilities.Dependency 52 } 53 54 func NewSearcher(nearTextDeps []modulecapabilities.Dependency) *Searcher { 55 return &Searcher{nearTextDeps} 56 } 57 58 func (s *Searcher) VectorSearches() map[string]modulecapabilities.ArgumentVectorForParams { 59 vectorSearchers := map[string]modulecapabilities.ArgumentVectorForParams{} 60 for _, nearTextDep := range s.nearTextDeps { 61 vectorSearchers[nearTextDep.ModuleName()] = s.vectorSearches(nearTextDep) 62 } 63 return vectorSearchers 64 } 65 66 func (s *Searcher) vectorSearches(nearTextDep modulecapabilities.Dependency) map[string]modulecapabilities.VectorForParams { 67 vectorSearches := map[string]modulecapabilities.VectorForParams{} 68 vectorFromAsk := &vectorFromAskParam{nearTextDep} 69 vectorSearches["ask"] = vectorFromAsk.vectorForAskParamFn 70 return vectorSearches 71 }