Source code for haive.core.engine.embedding.config
"""Embedding configuration factory and utilities."""importloggingfromtypingimportAnyfromhaive.core.engine.embedding.baseimportBaseEmbeddingConfigfromhaive.core.engine.embedding.typesimportEmbeddingTypelogger=logging.getLogger(__name__)
[docs]classEmbeddingConfigFactory:"""Factory class for creating embedding configurations. This factory provides a convenient way to create embedding configurations without needing to import specific provider classes. Examples: Create OpenAI configuration: .. code-block:: python factory = EmbeddingConfigFactory() config = factory.create( provider="OpenAI", model="text-embedding-3-large", name="my_embeddings" ) List available providers:: factory = EmbeddingConfigFactory() providers = factory.list_providers() Get provider information:: factory = EmbeddingConfigFactory() info = factory.get_provider_info("OpenAI") """
[docs]@staticmethoddefcreate(provider:str|EmbeddingType,model:str,name:str="default_embedding",**kwargs,)->BaseEmbeddingConfig:"""Create an embedding configuration. Args: provider: Provider name or EmbeddingType enum model: Model name for the provider name: Configuration name **kwargs: Additional provider-specific parameters Returns: Configured embedding instance Raises: ValueError: If provider is not found or configuration is invalid Examples: Create OpenAI config: .. code-block:: python config = EmbeddingConfigFactory.create( provider="OpenAI", model="text-embedding-3-large", api_key="sk-..." ) Create HuggingFace config:: config = EmbeddingConfigFactory.create( provider="HuggingFace", model="sentence-transformers/all-MiniLM-L6-v2", use_cache=True ) """# Convert string to EmbeddingType if neededifisinstance(provider,str):try:provider_enum=EmbeddingType(provider)exceptValueError:# Try to find by nameprovider_enum=Noneforenum_valinEmbeddingType:ifenum_val.value==provider:provider_enum=enum_valbreakifprovider_enumisNone:available=[e.valueforeinEmbeddingType]raiseValueError(f"Unknown provider: {provider}. Available: {available}")else:provider_enum=provider# Get the configuration classconfig_class=BaseEmbeddingConfig.get_config_class(provider_enum)ifconfig_classisNone:raiseValueError(f"No configuration class found for provider: {provider_enum}")# Create configurationtry:config=config_class(name=name,model=model,**kwargs)returnconfigexceptExceptionase:raiseValueError(f"Failed to create {provider_enum} configuration: {e}")
[docs]@staticmethoddeflist_providers()->list[str]:"""List all available embedding providers. Returns: List of provider names """registered=BaseEmbeddingConfig.list_registered_types()returnlist(registered.keys())
[docs]@staticmethoddefget_provider_info(provider:str|EmbeddingType)->dict[str,Any]:"""Get information about a specific provider. Args: provider: Provider name or EmbeddingType enum Returns: Dictionary with provider information """# Convert to string for lookupprovider_str=str(provider.valueifhasattr(provider,"value")elseprovider)config_class=BaseEmbeddingConfig.get_config_class(provider_str)ifconfig_classisNone:return{}# Get basic information without instantiation to avoid dependency# issuesinfo={"provider":provider_str,"class":config_class.__name__,"description":(config_class.__doc__.split("\n")[0]ifconfig_class.__doc__else"Embedding provider configuration"),"supported_models":[],"default_model":"unknown",}# Try to get additional info from class methods if availabletry:# Some methods might be available as class methods or static# methodsifhasattr(config_class,"get_supported_models"):method=config_class.get_supported_modelsifcallable(method):try:models=method()ifisinstance(models,list):info["supported_models"]=modelsexceptBaseException:passifhasattr(config_class,"get_default_model"):method=config_class.get_default_modelifcallable(method):try:default=method()ifisinstance(default,str):info["default_model"]=defaultexceptBaseException:passexceptException:passreturninfo
[docs]@staticmethoddefvalidate_provider(provider:str|EmbeddingType)->bool:"""Check if a provider is available. Args: provider: Provider name or EmbeddingType enum Returns: True if provider is available, False otherwise """try:provider_str=str(provider.valueifhasattr(provider,"value")elseprovider)config_class=BaseEmbeddingConfig.get_config_class(provider_str)returnconfig_classisnotNoneexceptException:returnFalse
[docs]defcreate_embedding_config(provider:str|EmbeddingType,model:str,name:str="default_embedding",**kwargs,)->BaseEmbeddingConfig:"""Create an embedding configuration using the factory. This is a convenience function that wraps EmbeddingConfigFactory.create(). Args: provider: Provider name or EmbeddingType enum model: Model name for the provider name: Configuration name **kwargs: Additional provider-specific parameters Returns: Configured embedding instance Examples: Create OpenAI config: .. code-block:: python config = create_embedding_config( provider="OpenAI", model="text-embedding-3-large" ) Create with custom parameters:: config = create_embedding_config( provider="HuggingFace", model="sentence-transformers/all-MiniLM-L6-v2", use_cache=True, cache_folder="./my_cache" ) """returnEmbeddingConfigFactory.create(provider=provider,model=model,name=name,**kwargs)
[docs]deflist_embedding_providers()->list[str]:"""List all available embedding providers. Returns: List of provider names Examples: List providers: .. code-block:: python providers = list_embedding_providers() print(f"Available: {providers}") """returnEmbeddingConfigFactory.list_providers()
[docs]defget_embedding_provider_info(provider:str|EmbeddingType)->dict[str,Any]:"""Get information about an embedding provider. Args: provider: Provider name or EmbeddingType enum Returns: Dictionary with provider information Examples: Get provider info:: info = get_embedding_provider_info("OpenAI") print(f"Default model: {info['default_model']}") print(f"Supported models: {info['supported_models']}") """returnEmbeddingConfigFactory.get_provider_info(provider)
[docs]defvalidate_embedding_provider(provider:str|EmbeddingType)->bool:"""Check if an embedding provider is available. Args: provider: Provider name or EmbeddingType enum Returns: True if provider is available, False otherwise Examples: Check provider availability:: if validate_embedding_provider("OpenAI"): print("OpenAI provider is available") else: print("OpenAI provider not found") """returnEmbeddingConfigFactory.validate_provider(provider)