File size: 3,914 Bytes
57cf043
 
744a170
57cf043
 
 
 
744a170
57cf043
744a170
0341212
744a170
 
57cf043
 
 
 
744a170
 
 
 
 
fd485d9
57cf043
 
 
 
 
 
 
 
 
 
744a170
57cf043
 
 
 
 
 
744a170
 
 
 
 
57cf043
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
744a170
57cf043
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
"""This module includes classes to define configurations."""

from typing import Any, Dict, Optional

from pyaml_env import parse_config


class EntitiesExtractorConfiguration:
    def __init__(self, config_data):
        self.strategy_name = str(config_data['strategy_name'])
        self.strategy_params: dict | None = config_data['strategy_params']
        self.process_tables = bool(config_data['process_tables'])
        self.neighbors_max_distance = int(config_data['neighbors_max_distance'])


class SearchConfiguration:
    def __init__(self, config_data):
        self.use_vector_search = bool(config_data['use_vector_search'])
        self.vectorizer_path = str(config_data['vectorizer_path'])
        self.device = str(config_data['device'])
        self.max_entities_per_message = int(config_data['max_entities_per_message'])
        self.max_entities_per_dialogue = int(config_data['max_entities_per_dialogue'])
        self.use_qe = bool(config_data['use_qe'])


class FilesConfiguration:
    def __init__(self, config_data):
        self.empty_start = bool(config_data['empty_start'])
        self.documents_path = str(config_data['documents_path'])


class DataBaseConfiguration:
    def __init__(self, config_data):
        self.entities = EntitiesExtractorConfiguration(config_data['entities'])
        self.search = SearchConfiguration(config_data['search'])
        self.files = FilesConfiguration(config_data['files'])


class LLMConfiguration:
    def __init__(self, config_data):
        self.base_url = (
            str(config_data['base_url'])
            if config_data['base_url'] not in ("", "null", "None")
            else None
        )
        self.api_key_env = (
            str(config_data['api_key_env'])
            if config_data['api_key_env'] not in ("", "null", "None")
            else None
        )
        self.model = str(config_data['model'])
        self.tokenizer = str(config_data['tokenizer_name'])
        self.temperature = float(config_data['temperature'])
        self.top_p = float(config_data['top_p'])
        self.min_p = float(config_data['min_p'])
        self.frequency_penalty = float(config_data['frequency_penalty'])
        self.presence_penalty = float(config_data['presence_penalty'])
        self.seed = int(config_data['seed'])


class CommonConfiguration:
    def __init__(self, config_data):
        self.log_file_path = str(config_data['log_file_path'])
        self.log_sql_path = str(config_data['log_sql_path'])
        self.log_level = str(config_data['log_level'])


class Configuration:
    """Encapsulates all configuration parameters."""

    def __init__(self, config_file_path: Optional[str] = None):
        """Creates an instance of the class.

        There is 1 possibility to load configuration data:
            - from configuration file using a path;
        If attribute is not None, the configuration file is used.

        Args:
            config_file_path: A path to config file to load configuration data from.
        """
        if config_file_path is not None:
            self._load_from_config(config_file_path)
        else:
            raise ValueError('At least one of config_path must be not None.')

    def _load_data(self, data: Dict[str, Any]):
        """Loads configuration data from dictionary.

        Args:
            data: A configuration dictionary to load configuration data from.
        """
        self.common_config = CommonConfiguration(data['common'])
        self.db_config = DataBaseConfiguration(data['bd'])
        self.llm_config = LLMConfiguration(data['llm'])

    def _load_from_config(self, config_file_path: str):
        """Reads configuration file and form configuration dictionary.

        Args:
            config_file_path: A configuration dictionary to load configuration data from.
        """
        data = parse_config(config_file_path)
        self._load_data(data)