github.com/weaviate/weaviate@v1.24.6/usecases/modules/module_config.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 modules 13 14 import ( 15 "github.com/weaviate/weaviate/entities/models" 16 "github.com/weaviate/weaviate/entities/schema" 17 ) 18 19 type ClassBasedModuleConfig struct { 20 class *models.Class 21 moduleName string 22 tenant string 23 targetVector string 24 } 25 26 func NewClassBasedModuleConfig(class *models.Class, 27 moduleName, tenant, targetVector string, 28 ) *ClassBasedModuleConfig { 29 return &ClassBasedModuleConfig{ 30 class: class, 31 moduleName: moduleName, 32 tenant: tenant, 33 targetVector: targetVector, 34 } 35 } 36 37 func NewCrossClassModuleConfig() *ClassBasedModuleConfig { 38 // explicitly setting tenant to "" in order to flag that a cross class search 39 // is being done without a tenant context 40 return &ClassBasedModuleConfig{tenant: ""} 41 } 42 43 func (cbmc *ClassBasedModuleConfig) Class() map[string]interface{} { 44 return cbmc.ClassByModuleName(cbmc.moduleName) 45 } 46 47 func (cbmc *ClassBasedModuleConfig) Tenant() string { 48 return cbmc.tenant 49 } 50 51 func (cbmc *ClassBasedModuleConfig) TargetVector() string { 52 return cbmc.targetVector 53 } 54 55 func (cbmc *ClassBasedModuleConfig) ClassByModuleName(moduleName string) map[string]interface{} { 56 defaultConf := map[string]interface{}{} 57 asMap, ok := cbmc.getModuleConfig().(map[string]interface{}) 58 if !ok { 59 return defaultConf 60 } 61 62 moduleCfg, ok := asMap[moduleName] 63 if !ok { 64 return defaultConf 65 } 66 67 asMap, ok = moduleCfg.(map[string]interface{}) 68 if !ok { 69 return defaultConf 70 } 71 72 return asMap 73 } 74 75 func (cbmc *ClassBasedModuleConfig) getModuleConfig() interface{} { 76 if cbmc.targetVector != "" { 77 if vectorConfig, ok := cbmc.class.VectorConfig[cbmc.targetVector]; ok { 78 return vectorConfig.Vectorizer 79 } 80 return nil 81 } 82 return cbmc.class.ModuleConfig 83 } 84 85 func (cbmc *ClassBasedModuleConfig) Property(propName string) map[string]interface{} { 86 defaultConf := map[string]interface{}{} 87 prop, err := schema.GetPropertyByName(cbmc.class, propName) 88 if err != nil { 89 return defaultConf 90 } 91 92 asMap, ok := prop.ModuleConfig.(map[string]interface{}) 93 if !ok { 94 return defaultConf 95 } 96 97 moduleCfg, ok := asMap[cbmc.moduleName] 98 if !ok { 99 return defaultConf 100 } 101 102 asMap, ok = moduleCfg.(map[string]interface{}) 103 if !ok { 104 return defaultConf 105 } 106 107 return asMap 108 }