def _fill_in_params(self):
        """Fill in the default parameters for each component.

        For each component, loop over the parameters from the function signature of the component
        and fill in the default in params if the key doesn't already exist.

        Priority is: component.params > default value
        """
        from inspect import signature

        for k, v in self.components.items():
            # Ignore to expose the first argument for pre_process, dataloader and post_process
            # since the first argument is dataset which is generated by load_dataset
            if_ignore_first_arg = k != DataComponentType.LOAD_DATASET.value
            component = Registry.get_component(k, v.type)

            params = signature(component).parameters
            for idx, (param, info) in enumerate(params.items()):
                # skip the first argument for pre_process, dataloader and post_process
                if if_ignore_first_arg and idx == 0:
                    continue

                # Use the default value from the function signature
                if param not in v.params:
                    if info.kind in (info.VAR_POSITIONAL, info.VAR_KEYWORD):
                        pass
                    elif info.default is info.empty:
                        logger.debug(
                            "Missing parameter %s for component %s with type %s. Set to None.", param, k, v.type
                        )
                        v.params[param] = None
                    else:
                        v.params[param] = params[param].default
Fill in the default parameters for each component.

        For each component, loop over the parameters from the function signature of the component
        and fill in the default in params if the key doesn't already exist.

        Priority is: component.params > default value
        
olive/data/config.py