| 1 | # SPDX-License-Identifier: Apache-2.0 |
| 2 | # SPDX-FileCopyrightText: Copyright contributors to the vLLM project |
| 3 | |
| 4 | # Adapted from |
| 5 | # https://github.com/modelscope/ms-swift/blob/v2.4.2/swift/utils/module_mapping.py |
| 6 | |
| 7 | from dataclasses import dataclass, field |
| 8 | |
| 9 | |
| 10 | @dataclass |
| 11 | class MultiModelKeys: |
| 12 | language_model: list[str] = field(default_factory=list) |
| 13 | connector: list[str] = field(default_factory=list) |
| 14 | # vision tower and audio tower |
| 15 | tower_model: list[str] = field(default_factory=list) |
| 16 | generator: list[str] = field(default_factory=list) |
| 17 | |
| 18 | @staticmethod |
| 19 | def from_string_field( |
| 20 | language_model: str | list[str] | None = None, |
| 21 | connector: str | list[str] | None = None, |
| 22 | tower_model: str | list[str] | None = None, |
| 23 | generator: str | list[str] | None = None, |
| 24 | **kwargs, |
| 25 | ) -> "MultiModelKeys": |
| 26 | def to_list(value): |
| 27 | if value is None: |
| 28 | return [] |
| 29 | return [value] if isinstance(value, str) else list(value) |
| 30 | |
| 31 | return MultiModelKeys( |
| 32 | language_model=to_list(language_model), |
| 33 | connector=to_list(connector), |
| 34 | tower_model=to_list(tower_model), |
| 35 | generator=to_list(generator), |
| 36 | **kwargs, |
| 37 | ) |