informers 1.2.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +3 -9
- data/lib/informers/models.rb +58 -1
- data/lib/informers/pipelines.rb +2 -1
- data/lib/informers/utils/hub.rb +2 -2
- data/lib/informers/version.rb +1 -1
- metadata +3 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dfeaf81a8a597d5c25d340e38d0f0be665d3737a1cc271ece883e5b83472da31
|
4
|
+
data.tar.gz: 36943e4c472c864e5951a02ea336c47192e77bcc51161113e022675cce552b82
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f6f9a35abcdcb57ddd24c3d81498fa517df554a48b722d7fcee0776e950762ef6412f90916688ca273b95bac79b2441a92a26bcecdc27e2e3c504eafc2b39793
|
7
|
+
data.tar.gz: b85b9a12439001996c4a1580bfdca650ae920791867a3245531b8b13de0b082ebca5ee76be70e8581947e38cf7ebd8c6474d537234ccef4cddb04cc2c6b3dfa5
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -53,12 +53,6 @@ model = Informers.pipeline("embedding", "sentence-transformers/all-MiniLM-L6-v2"
|
|
53
53
|
embeddings = model.(sentences)
|
54
54
|
```
|
55
55
|
|
56
|
-
For a quantized version, use:
|
57
|
-
|
58
|
-
```ruby
|
59
|
-
model = Informers.pipeline("embedding", "Xenova/all-MiniLM-L6-v2", quantized: true)
|
60
|
-
```
|
61
|
-
|
62
56
|
### sentence-transformers/multi-qa-MiniLM-L6-cos-v1
|
63
57
|
|
64
58
|
[Docs](https://huggingface.co/Xenova/multi-qa-MiniLM-L6-cos-v1)
|
@@ -254,7 +248,7 @@ result = model.(query, docs)
|
|
254
248
|
|
255
249
|
### Other
|
256
250
|
|
257
|
-
The model must include a `.onnx` file ([example](https://huggingface.co/Xenova/all-MiniLM-L6-v2/tree/main/onnx)). If the file is not at `onnx/model.onnx
|
251
|
+
The model must include a `.onnx` file ([example](https://huggingface.co/Xenova/all-MiniLM-L6-v2/tree/main/onnx)). If the file is not at `onnx/model.onnx`, use the `model_file_name` option to specify the location.
|
258
252
|
|
259
253
|
## Pipelines
|
260
254
|
|
@@ -438,13 +432,13 @@ qa.("image.jpg", "What is the invoice number?")
|
|
438
432
|
|
439
433
|
## Reference
|
440
434
|
|
441
|
-
Specify a variant of the model
|
435
|
+
Specify a variant of the model if available (`fp32`, `fp16`, `int8`, `uint8`, `q8`, `q4`, `q4f16`, or `bnb4`)
|
442
436
|
|
443
437
|
```ruby
|
444
438
|
Informers.pipeline("embedding", "Xenova/all-MiniLM-L6-v2", dtype: "fp16")
|
445
439
|
```
|
446
440
|
|
447
|
-
Specify a device (
|
441
|
+
Specify a device (`cpu`, `cuda`, or `coreml`)
|
448
442
|
|
449
443
|
```ruby
|
450
444
|
Informers.pipeline("embedding", device: "cuda")
|
data/lib/informers/models.rb
CHANGED
@@ -809,12 +809,49 @@ module Informers
|
|
809
809
|
end
|
810
810
|
end
|
811
811
|
|
812
|
+
class ModernBertPreTrainedModel < PreTrainedModel
|
813
|
+
end
|
814
|
+
|
815
|
+
class ModernBertModel < ModernBertPreTrainedModel
|
816
|
+
end
|
817
|
+
|
818
|
+
class ModernBertForMaskedLM < ModernBertPreTrainedModel
|
819
|
+
def call(model_inputs)
|
820
|
+
MaskedLMOutput.new(*super(model_inputs))
|
821
|
+
end
|
822
|
+
end
|
823
|
+
|
824
|
+
class ModernBertForSequenceClassification < ModernBertPreTrainedModel
|
825
|
+
def call(model_inputs)
|
826
|
+
SequenceClassifierOutput.new(*super(model_inputs))
|
827
|
+
end
|
828
|
+
end
|
829
|
+
|
830
|
+
class ModernBertForTokenClassification < ModernBertPreTrainedModel
|
831
|
+
def call(model_inputs)
|
832
|
+
TokenClassifierOutput.new(*super(model_inputs))
|
833
|
+
end
|
834
|
+
end
|
835
|
+
|
812
836
|
class NomicBertPreTrainedModel < PreTrainedModel
|
813
837
|
end
|
814
838
|
|
815
839
|
class NomicBertModel < NomicBertPreTrainedModel
|
816
840
|
end
|
817
841
|
|
842
|
+
class ConvBertPreTrainedModel < PreTrainedModel
|
843
|
+
end
|
844
|
+
|
845
|
+
class ConvBertModel < ConvBertPreTrainedModel
|
846
|
+
end
|
847
|
+
|
848
|
+
class ElectraPreTrainedModel < PreTrainedModel
|
849
|
+
end
|
850
|
+
|
851
|
+
# TODO add ElectraForPreTraining
|
852
|
+
class ElectraModel < ElectraPreTrainedModel
|
853
|
+
end
|
854
|
+
|
818
855
|
class DebertaV2PreTrainedModel < PreTrainedModel
|
819
856
|
end
|
820
857
|
|
@@ -965,6 +1002,18 @@ module Informers
|
|
965
1002
|
end
|
966
1003
|
end
|
967
1004
|
|
1005
|
+
class RobertaForTokenClassification < RobertaPreTrainedModel
|
1006
|
+
def call(model_inputs)
|
1007
|
+
TokenClassifierOutput.new(*super(model_inputs))
|
1008
|
+
end
|
1009
|
+
end
|
1010
|
+
|
1011
|
+
class RobertaForSequenceClassification < RobertaPreTrainedModel
|
1012
|
+
def call(model_inputs)
|
1013
|
+
SequenceClassifierOutput.new(*super(model_inputs))
|
1014
|
+
end
|
1015
|
+
end
|
1016
|
+
|
968
1017
|
class XLMRobertaPreTrainedModel < PreTrainedModel
|
969
1018
|
end
|
970
1019
|
|
@@ -1173,7 +1222,10 @@ module Informers
|
|
1173
1222
|
|
1174
1223
|
MODEL_MAPPING_NAMES_ENCODER_ONLY = {
|
1175
1224
|
"bert" => ["BertModel", BertModel],
|
1225
|
+
"modernbert" => ["ModernBertModel", ModernBertModel],
|
1176
1226
|
"nomic_bert" => ["NomicBertModel", NomicBertModel],
|
1227
|
+
"electra" => ["ElectraModel", ElectraModel],
|
1228
|
+
"convbert" => ["ConvBertModel", ConvBertModel],
|
1177
1229
|
"deberta-v2" => ["DebertaV2Model", DebertaV2Model],
|
1178
1230
|
"mpnet" => ["MPNetModel", MPNetModel],
|
1179
1231
|
"distilbert" => ["DistilBertModel", DistilBertModel],
|
@@ -1208,13 +1260,17 @@ module Informers
|
|
1208
1260
|
|
1209
1261
|
MODEL_FOR_SEQUENCE_CLASSIFICATION_MAPPING_NAMES = {
|
1210
1262
|
"bert" => ["BertForSequenceClassification", BertForSequenceClassification],
|
1263
|
+
"modernbert" => ["ModernBertForSequenceClassification", ModernBertForSequenceClassification],
|
1211
1264
|
"distilbert" => ["DistilBertForSequenceClassification", DistilBertForSequenceClassification],
|
1265
|
+
"roberta" => ["RobertaForSequenceClassification", RobertaForSequenceClassification],
|
1212
1266
|
"xlm-roberta" => ["XLMRobertaForSequenceClassification", XLMRobertaForSequenceClassification],
|
1213
1267
|
"bart" => ["BartForSequenceClassification", BartForSequenceClassification]
|
1214
1268
|
}
|
1215
1269
|
|
1216
1270
|
MODEL_FOR_TOKEN_CLASSIFICATION_MAPPING_NAMES = {
|
1217
|
-
"bert" => ["BertForTokenClassification", BertForTokenClassification]
|
1271
|
+
"bert" => ["BertForTokenClassification", BertForTokenClassification],
|
1272
|
+
"modernbert" => ["ModernBertForTokenClassification", ModernBertForTokenClassification],
|
1273
|
+
"roberta" => ["RobertaForTokenClassification", RobertaForTokenClassification]
|
1218
1274
|
}
|
1219
1275
|
|
1220
1276
|
MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING_NAMES = {
|
@@ -1230,6 +1286,7 @@ module Informers
|
|
1230
1286
|
|
1231
1287
|
MODEL_FOR_MASKED_LM_MAPPING_NAMES = {
|
1232
1288
|
"bert" => ["BertForMaskedLM", BertForMaskedLM],
|
1289
|
+
"modernbert" => ["ModernBertForMaskedLM", ModernBertForMaskedLM],
|
1233
1290
|
"roberta" => ["RobertaForMaskedLM", RobertaForMaskedLM]
|
1234
1291
|
}
|
1235
1292
|
|
data/lib/informers/pipelines.rb
CHANGED
@@ -1336,6 +1336,7 @@ module Informers
|
|
1336
1336
|
stream = $stderr
|
1337
1337
|
tty = stream.tty?
|
1338
1338
|
width = tty ? stream.winsize[1] : 80
|
1339
|
+
width = 80 if width == 0
|
1339
1340
|
|
1340
1341
|
if msg[:status] == "progress" && tty
|
1341
1342
|
stream.print "\r#{Utils::Hub.display_progress(msg[:file], width, msg[:size], msg[:total_size])}"
|
@@ -1369,7 +1370,7 @@ module Informers
|
|
1369
1370
|
task = TASK_ALIASES[task] || task
|
1370
1371
|
|
1371
1372
|
if quantized == NO_DEFAULT
|
1372
|
-
# TODO
|
1373
|
+
# TODO no quantization by default in 2.0
|
1373
1374
|
quantized = ["text-classification", "token-classification", "question-answering", "feature-extraction"].include?(task)
|
1374
1375
|
end
|
1375
1376
|
|
data/lib/informers/utils/hub.rb
CHANGED
@@ -233,8 +233,8 @@ module Informers
|
|
233
233
|
end
|
234
234
|
|
235
235
|
def self.display_progress(filename, width, size, expected_size)
|
236
|
-
bar_width = width - (filename.length + 3)
|
237
|
-
progress = size / expected_size.to_f
|
236
|
+
bar_width = [width - (filename.length + 3), 1].max
|
237
|
+
progress = expected_size && expected_size > 0 ? size / expected_size.to_f : 0
|
238
238
|
done = (progress * bar_width).round
|
239
239
|
not_done = bar_width - done
|
240
240
|
"#{filename} |#{"█" * done}#{" " * not_done}|"
|
data/lib/informers/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: informers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Kane
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 2025-02-01 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: onnxruntime
|
@@ -38,7 +37,6 @@ dependencies:
|
|
38
37
|
- - ">="
|
39
38
|
- !ruby/object:Gem::Version
|
40
39
|
version: 0.5.3
|
41
|
-
description:
|
42
40
|
email: andrew@ankane.org
|
43
41
|
executables: []
|
44
42
|
extensions: []
|
@@ -70,7 +68,6 @@ homepage: https://github.com/ankane/informers
|
|
70
68
|
licenses:
|
71
69
|
- Apache-2.0
|
72
70
|
metadata: {}
|
73
|
-
post_install_message:
|
74
71
|
rdoc_options: []
|
75
72
|
require_paths:
|
76
73
|
- lib
|
@@ -85,8 +82,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
85
82
|
- !ruby/object:Gem::Version
|
86
83
|
version: '0'
|
87
84
|
requirements: []
|
88
|
-
rubygems_version: 3.
|
89
|
-
signing_key:
|
85
|
+
rubygems_version: 3.6.2
|
90
86
|
specification_version: 4
|
91
87
|
summary: Fast transformer inference for Ruby
|
92
88
|
test_files: []
|