Source code for utils.config

"""Config helper functions to manage configuration and rebuilt your task pipeline.

Config format: json
(1) include attribute and entity_name to reconstruct all attributes of a pipeline.

Example:
    {  # attribute and its config to recreate the component
        "document_splitter": {
            "component_name": "DocumentSplitter",
            "component_config": {
                "split_by": "word",
                "split_length": 400,
                "split_overlap": 200,
            },
        },
        "to_embeddings": {
            "component_name": "ToEmbeddings",
            "component_config": {
                "embedder": {
                    "component_name": "Embedder",
                    "component_config": {
                        "model_client": {
                            "entity_name": "OpenAIClient",
                            "entity_config": {},
                        },
                        "model_kwargs": {
                            "model": "text-embedding-3-small",
                            "dimensions": 256,
                            "encoding_format": "float",
                        },
                    },
                    # the other config is to instantiate the entity (class and function) with the given config as arguments
                    # "entity_state": "storage/embedder.pkl", # this will load back the state of the entity
                },
                "batch_size": 100,
            },
        },
    }


(2) only include the config as arguments and does not include any entity_name or attribute.
You can use this manually to construct an entity yourself.

Example:
{
   "Embedder":   # it can be any name
    {
        "model_client": "OpenAIClient",
        "model_kwargs": {
            "api_key": "your_api_key",
            "model_name": "text-embedder"
        }
    },
    "FAISSRetriever": {
        "top_k": 2,
        "dimensions": 256,
        "vectorizer": "embedder"
    }
}
"""

from typing import Any, Dict
from adalflow.utils.registry import EntityMapping


[docs] def new_component(config: Dict[str, Any]) -> Any: r"""Create a single componenet from a configuration dictionary. Format type 1. Args: config (Dict[str, Any]): Configuration dictionary for the component. Returns: Any: The constructed component. """ assert ( "component_name" in config ), f"component_name is required in the config: {config}" component_name = config["component_name"] component_cls = EntityMapping.get(component_name) component_config: Dict = config.get("component_config", {}) initialized_config = {} for key, value in component_config.items(): if isinstance(value, dict) and "component_name" in value: # Recursively construct sub-entities initialized_config[key] = new_component(value) else: initialized_config[key] = value return component_cls(**initialized_config)
[docs] def new_components_from_config(config: Dict[str, Dict[str, Any]]) -> Dict[str, Any]: r"""Construct multiple components from a configuration dictionary. Format type 1""" components = {} for attr, component_config in config.items(): components[attr] = new_component(component_config) return components