| import numpy as np | |
| import torch | |
| import torch.nn as nn | |
| from typing import Any, Callable, Dict, List, Optional, Set, Tuple, Union | |
| import os | |
| import torch.nn.functional as F | |
| from transformers.modeling_utils import PreTrainedModel | |
| from transformers.configuration_utils import PretrainedConfig | |
| from transformers import AutoConfig | |
| from collections import OrderedDict | |
| class HybridTowerConfig(PretrainedConfig): | |
| model_type = "hybrid_vision_tower" | |
| def __init__(self, configs=None, **kwargs): | |
| """ | |
| Initializes the HybridTowerConfig. | |
| Args: | |
| configs (dict, optional): A dictionary where keys are component names and values are | |
| instances of configurations that have a `to_dict()` method. | |
| **kwargs: Additional keyword arguments that are passed to the superclass. | |
| """ | |
| super().__init__(**kwargs) | |
| self.configs = {} | |
| if configs is not None: | |
| if not isinstance(configs, dict): | |
| raise TypeError("configs must be a dictionary where keys are component names and values are configuration objects.") | |
| for component_name, config in configs.items(): | |
| if hasattr(config, 'to_dict'): | |
| self.configs[component_name] = config.to_dict() | |
| else: | |
| raise TypeError(f"The configuration for '{component_name}' does not have a to_dict() method and cannot be serialized.") | |
| def to_dict(self): | |
| """ | |
| Serializes this instance to a Python dictionary. | |
| Returns: | |
| dict: A dictionary containing all the keys and values of this configuration instance. | |
| """ | |
| config_dict = super().to_dict() | |
| config_dict['configs'] = self.configs | |
| return config_dict | |