h2o-llmstudio

Форк
0
75 строк · 2.2 Кб
1
from collections import defaultdict
2
from dataclasses import dataclass
3
from typing import DefaultDict, List, Optional, Set, Union
4

5

6
@dataclass
7
class Dependency:
8
    """Dependency class.
9

10
    Args:
11
        key: key of the dependency
12
        value: required value of the dependency, None for empty condition
13
        is_set: whether the dependency should be set, or not set
14
    """
15

16
    key: str
17
    value: Union[str, bool, int, None] = True
18
    is_set: bool = True
19

20
    def check(self, dependency_values: Optional[List[str]]) -> bool:
21
        """
22
        Check if dependency is satisfied
23

24
        Args:
25
            dependency_values: list of dependency values
26

27
        Returns:
28
            True if the dependency is satisfied, False otherwise
29
        """
30

31
        if dependency_values is None:
32
            dependency_values = []
33

34
        if self.value is None and self.is_set and len(dependency_values):
35
            return False
36
        elif self.value is None and not self.is_set and not len(dependency_values):
37
            return False
38
        elif self.is_set and self.value not in dependency_values:
39
            return False
40
        elif (
41
            not self.is_set
42
            and len([v for v in dependency_values if v != self.value]) == 0
43
        ):
44
            return False
45
        return True
46

47

48
class Nesting:
49
    """
50
    A tree-like structure to specify nested dependencies of key-value pairs
51
    In detail it maps dependencies of key requiring any number of key:value pairs
52

53
    Primarily useful for specifying nested dependencies of UI elements shown in Wave.
54
    """
55

56
    def __init__(self):
57
        self.dependencies: DefaultDict[str, List[Dependency]] = defaultdict(list)
58
        self.triggers: Set[str] = set()
59

60
    def add(self, keys: List[str], dependencies: List[Dependency]):
61
        """
62
        Append dependencies (key:value) for a given key
63

64
        Args:
65
            keys: keys to add dependencies for
66
            dependencies: key:value pairs to depend on
67
        """
68

69
        if len(set(keys)) != len(keys):
70
            raise ValueError("Nesting keys must be unique.")
71

72
        for dependency in dependencies:
73
            self.triggers.add(dependency.key)
74
            for key in set(keys):
75
                self.dependencies[key].append(dependency)
76

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.