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  }