Passed
Push — llm-ensemble-backend ( 5ea851 )
by Juho
08:01
created

annif.backend._llm_ensemble()   A

Complexity

Conditions 1

Size

Total Lines 4
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nop 0
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
"""Registry of backend types for Annif"""
2
3
from __future__ import annotations
4
5
from typing import TYPE_CHECKING, Type
6
7
if TYPE_CHECKING:
8
    from annif.backend.backend import AnnifBackend
9
10
11
# define functions for lazily importing each backend (alphabetical order)
12
def _dummy() -> Type[AnnifBackend]:
13
    from . import dummy
14
15
    return dummy.DummyBackend
16
17
18
def _ensemble() -> Type[AnnifBackend]:
19
    from . import ensemble
20
21
    return ensemble.EnsembleBackend
22
23
24
def _fasttext() -> Type[AnnifBackend]:
25
    try:
26
        from . import fasttext
27
28
        return fasttext.FastTextBackend
29
    except ImportError:
30
        raise ValueError("fastText not available, cannot use fasttext backend")
31
32
33
def _http() -> Type[AnnifBackend]:
34
    from . import http
35
36
    return http.HTTPBackend
37
38
39
def _llm_ensemble() -> Type[AnnifBackend]:
40
    from . import llm
41
42
    return llm.LLMEnsembleBackend
43
44
45
def _mllm() -> Type[AnnifBackend]:
46
    from . import mllm
47
48
    return mllm.MLLMBackend
49
50
51
def _nn_ensemble() -> Type[AnnifBackend]:
52
    try:
53
        from . import nn_ensemble
54
55
        return nn_ensemble.NNEnsembleBackend
56
    except ImportError:
57
        raise ValueError(
58
            "Keras and TensorFlow not available, cannot use " + "nn_ensemble backend"
59
        )
60
61
62
def _omikuji() -> Type[AnnifBackend]:
63
    try:
64
        from . import omikuji
65
66
        return omikuji.OmikujiBackend
67
    except ImportError:
68
        raise ValueError("Omikuji not available, cannot use omikuji backend")
69
70
71
def _pav() -> Type[AnnifBackend]:
72
    from . import pav
73
74
    return pav.PAVBackend
75
76
77
def _stwfsa() -> Type[AnnifBackend]:
78
    try:
79
        from . import stwfsa
80
81
        return stwfsa.StwfsaBackend
82
    except ImportError:
83
        raise ValueError("STWFSA not available, cannot use stwfsa backend")
84
85
86
def _svc() -> Type[AnnifBackend]:
87
    from . import svc
88
89
    return svc.SVCBackend
90
91
92
def _tfidf() -> Type[AnnifBackend]:
93
    from . import tfidf
94
95
    return tfidf.TFIDFBackend
96
97
98
def _yake() -> Type[AnnifBackend]:
99
    try:
100
        from . import yake
101
102
        return yake.YakeBackend
103
    except ImportError:
104
        raise ValueError("YAKE not available, cannot use yake backend")
105
106
107
# registry of the above functions
108
_backend_fns = {
109
    "dummy": _dummy,
110
    "ensemble": _ensemble,
111
    "fasttext": _fasttext,
112
    "http": _http,
113
    "llm_ensemble": _llm_ensemble,
114
    "mllm": _mllm,
115
    "nn_ensemble": _nn_ensemble,
116
    "omikuji": _omikuji,
117
    "pav": _pav,
118
    "stwfsa": _stwfsa,
119
    "svc": _svc,
120
    "tfidf": _tfidf,
121
    "yake": _yake,
122
}
123
124
125
def get_backend(backend_id: str) -> Type[AnnifBackend]:
126
    if backend_id in _backend_fns:
127
        return _backend_fns[backend_id]()
128
    else:
129
        raise ValueError("No such backend type {}".format(backend_id))
130