anno_eval/eval/
backend_name.rs1use serde::{Deserialize, Serialize};
15use std::fmt;
16
17#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
21#[non_exhaustive]
22pub enum BackendName {
23 Pattern,
26 Heuristic,
28 Stacked,
30
31 #[cfg(feature = "onnx")]
34 BertOnnx,
35 #[cfg(feature = "onnx")]
37 GLiNEROnnx,
38 #[cfg(feature = "onnx")]
40 NuNER,
41 #[cfg(feature = "onnx")]
43 W2NER,
44 #[cfg(feature = "onnx")]
46 GLiNERMultitask,
47 #[cfg(feature = "onnx")]
49 GLiNERPoly,
50 #[cfg(feature = "onnx")]
52 DeBERTaV3,
53 #[cfg(feature = "onnx")]
55 ALBERT,
56 #[cfg(feature = "onnx")]
58 TPLinker,
59
60 #[cfg(feature = "candle")]
63 CandleNER,
64 #[cfg(feature = "candle")]
66 GLiNERCandle,
67 #[cfg(feature = "candle")]
69 GLiNERMultitaskCandle,
70
71 CorefResolver,
74
75 UniversalNER,
78}
79
80impl BackendName {
81 #[must_use]
85 pub fn as_str(&self) -> &'static str {
86 match self {
87 BackendName::Pattern => "pattern",
88 BackendName::Heuristic => "heuristic",
89 BackendName::Stacked => "stacked",
90 #[cfg(feature = "onnx")]
91 BackendName::BertOnnx => "bert_onnx",
92 #[cfg(feature = "onnx")]
93 BackendName::GLiNEROnnx => "gliner_onnx",
94 #[cfg(feature = "onnx")]
95 BackendName::NuNER => "nuner",
96 #[cfg(feature = "onnx")]
97 BackendName::W2NER => "w2ner",
98 #[cfg(feature = "onnx")]
99 BackendName::GLiNERMultitask => "gliner_multitask",
100 #[cfg(feature = "onnx")]
101 BackendName::GLiNERPoly => "gliner_poly",
102 #[cfg(feature = "onnx")]
103 BackendName::DeBERTaV3 => "deberta_v3",
104 #[cfg(feature = "onnx")]
105 BackendName::ALBERT => "albert",
106 #[cfg(feature = "onnx")]
107 BackendName::TPLinker => "tplinker",
108 #[cfg(feature = "candle")]
109 BackendName::CandleNER => "candle_ner",
110 #[cfg(feature = "candle")]
111 BackendName::GLiNERCandle => "gliner_candle",
112 #[cfg(feature = "candle")]
113 BackendName::GLiNERMultitaskCandle => "gliner_multitask_candle",
114 BackendName::CorefResolver => "coref_resolver",
115 BackendName::UniversalNER => "universal_ner",
116 }
117 }
118
119 #[must_use]
123 pub fn try_parse(s: &str) -> Option<Self> {
124 match s.to_lowercase().as_str() {
125 "pattern" | "patternner" | "regex" | "regexner" => Some(BackendName::Pattern),
126 "heuristic" | "heuristicner" => Some(BackendName::Heuristic),
127 "stacked" | "stackedner" => Some(BackendName::Stacked),
128 #[cfg(feature = "onnx")]
129 "bert_onnx" | "bertneronnx" => Some(BackendName::BertOnnx),
130 #[cfg(feature = "onnx")]
131 "gliner" => Some(BackendName::GLiNEROnnx),
132 #[cfg(feature = "onnx")]
133 "gliner_onnx" | "glineronnx" => Some(BackendName::GLiNEROnnx),
134 #[cfg(feature = "onnx")]
135 "nuner" | "nunerzero" => Some(BackendName::NuNER),
136 #[cfg(feature = "onnx")]
137 "w2ner" => Some(BackendName::W2NER),
138 #[cfg(feature = "onnx")]
139 "gliner_multitask" | "gliner_multitask_onnx" => Some(BackendName::GLiNERMultitask),
140 #[cfg(feature = "onnx")]
141 "gliner_poly" | "glinerpoly" => Some(BackendName::GLiNERPoly),
142 #[cfg(feature = "onnx")]
143 "deberta_v3" | "debertav3" => Some(BackendName::DeBERTaV3),
144 #[cfg(feature = "onnx")]
145 "albert" | "albert_ner" => Some(BackendName::ALBERT),
146 #[cfg(feature = "onnx")]
147 "tplinker" => Some(BackendName::TPLinker),
148 #[cfg(feature = "candle")]
149 "candle_ner" | "candlener" => Some(BackendName::CandleNER),
150 #[cfg(feature = "candle")]
151 "gliner_candle" | "glinercandle" => Some(BackendName::GLiNERCandle),
152 #[cfg(feature = "candle")]
153 "gliner_multitask_candle" => Some(BackendName::GLiNERMultitaskCandle),
154 "coref_resolver" | "corefresolver" | "simplecorefresolver" => {
155 Some(BackendName::CorefResolver)
156 }
157 "universal_ner" | "universal-ner" | "universalner" => Some(BackendName::UniversalNER),
158 _ => None,
159 }
160 }
161
162 #[must_use]
167 pub fn all_available() -> Vec<Self> {
168 #[allow(unused_mut)] let mut backends = vec![
170 BackendName::Pattern,
171 BackendName::Heuristic,
172 BackendName::Stacked,
173 BackendName::CorefResolver,
174 BackendName::UniversalNER,
175 ];
176
177 #[cfg(feature = "onnx")]
178 {
179 backends.extend(&[
180 BackendName::BertOnnx,
181 BackendName::GLiNEROnnx,
182 BackendName::NuNER,
183 BackendName::W2NER,
184 BackendName::GLiNERMultitask,
185 BackendName::GLiNERPoly,
186 BackendName::DeBERTaV3,
187 BackendName::ALBERT,
188 BackendName::TPLinker,
189 ]);
190 }
191
192 #[cfg(feature = "candle")]
193 {
194 backends.extend(&[BackendName::CandleNER, BackendName::GLiNERCandle]);
195 }
196
197 #[cfg(all(feature = "candle", feature = "onnx"))]
198 {
199 backends.push(BackendName::GLiNERMultitaskCandle);
200 }
201
202 backends
203 }
204}
205
206impl fmt::Display for BackendName {
207 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
208 write!(f, "{}", self.as_str())
209 }
210}
211
212impl std::str::FromStr for BackendName {
213 type Err = String;
214
215 fn from_str(s: &str) -> Result<Self, Self::Err> {
216 Self::try_parse(s).ok_or_else(|| format!("Unknown backend: '{}'", s))
217 }
218}
219
220impl From<BackendName> for String {
221 fn from(name: BackendName) -> Self {
222 name.as_str().to_string()
223 }
224}