informers 1.0.3 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f5340da0bce9d55a0339fac6b8806f09119df3e89567ecb37a77e1a5921b8fa2
4
- data.tar.gz: 66a9d275cb2999ad14ba1cfd900bdcbf9fdc3d26ce29387acdd74452bf2050ef
3
+ metadata.gz: ab4f19adb4d6ca0289784cee6c6cb5235b73a5184abffbeaf44391768be1f0ac
4
+ data.tar.gz: '0880ce4dced5ce47ceaaa5fee8d10e6324b3fc0a23e05c3da3728414dcc273d9'
5
5
  SHA512:
6
- metadata.gz: a4a0c3da3d8a3555a6f2debca8f2939b6536ac76386cdd6c7264890b2d00842d537ecfca352021fa349ff9c4636ba49c189f652a66676746d9ec2a8d97eecc2a
7
- data.tar.gz: a06aa115b5966fd1b8da7a80d8481d3e61778f31c3bb0da143f329e81ae3f73d4a1d1b2ee01672f4e90742a35d68a23dd5c871c3b68ffad0c16d8e5de480a60f
6
+ metadata.gz: eb3ee6d16e4e20eca6fae3fae8f97d78ba6bb655d48e2012640d64538785e2a9ff2afb10269cf01db928553438e8fbd08584774ba3f3d08bc25f36cbb971a99a
7
+ data.tar.gz: '0008441293f2605ec8599135d715093053e21f67f56ba59b730a3bc1f46f04f4a7fabb7fef039f156cd4183011c93b7fc9cab6ba731bf78627244bc4dedcf18d'
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 1.1.0 (2024-09-17)
2
+
3
+ - Added more pipelines
4
+
1
5
  ## 1.0.3 (2024-08-29)
2
6
 
3
7
  - Added `model_output` option
data/README.md CHANGED
@@ -240,6 +240,12 @@ The model must include a `.onnx` file ([example](https://huggingface.co/Xenova/a
240
240
 
241
241
  ## Pipelines
242
242
 
243
+ - [Text](#text)
244
+ - [Vision](#vision)
245
+ - [Multimodel](#multimodal)
246
+
247
+ ### Text
248
+
243
249
  Embedding
244
250
 
245
251
  ```ruby
@@ -275,6 +281,48 @@ qa = Informers.pipeline("question-answering")
275
281
  qa.("Who invented Ruby?", "Ruby is a programming language created by Matz")
276
282
  ```
277
283
 
284
+ Zero-shot classification
285
+
286
+ ```ruby
287
+ classifier = Informers.pipeline("zero-shot-classification")
288
+ classifier.("text", ["label1", "label2", "label3"])
289
+ ```
290
+
291
+ Text generation
292
+
293
+ ```ruby
294
+ generator = Informers.pipeline("text-generation")
295
+ generator.("I enjoy walking with my cute dog,")
296
+ ```
297
+
298
+ Text-to-text generation
299
+
300
+ ```ruby
301
+ text2text = Informers.pipeline("text2text-generation")
302
+ text2text.("translate from English to French: I'm very happy")
303
+ ```
304
+
305
+ Translation
306
+
307
+ ```ruby
308
+ translator = Informers.pipeline("translation", "Xenova/nllb-200-distilled-600M")
309
+ translator.("जीवन एक चॉकलेट बॉक्स की तरह है।", src_lang: "hin_Deva", tgt_lang: "fra_Latn")
310
+ ```
311
+
312
+ Summarization
313
+
314
+ ```ruby
315
+ summarizer = Informers.pipeline("summarization")
316
+ summarizer.("Many paragraphs of text")
317
+ ```
318
+
319
+ Fill mask
320
+
321
+ ```ruby
322
+ unmasker = Informers.pipeline("fill-mask")
323
+ unmasker.("Paris is the [MASK] of France.")
324
+ ```
325
+
278
326
  Feature extraction
279
327
 
280
328
  ```ruby
@@ -282,6 +330,80 @@ extractor = Informers.pipeline("feature-extraction")
282
330
  extractor.("We are very happy to show you the 🤗 Transformers library.")
283
331
  ```
284
332
 
333
+ ### Vision
334
+
335
+ Image classification
336
+
337
+ ```ruby
338
+ classifier = Informers.pipeline("image-classification")
339
+ classifier.("image.jpg")
340
+ ```
341
+
342
+ Zero-shot image classification
343
+
344
+ ```ruby
345
+ classifier = Informers.pipeline("zero-shot-image-classification")
346
+ classifier.("image.jpg", ["label1", "label2", "label3"])
347
+ ```
348
+
349
+ Image segmentation
350
+
351
+ ```ruby
352
+ segmenter = Informers.pipeline("image-segmentation")
353
+ segmenter.("image.jpg")
354
+ ```
355
+
356
+ Object detection
357
+
358
+ ```ruby
359
+ detector = Informers.pipeline("object-detection")
360
+ detector.("image.jpg")
361
+ ```
362
+
363
+ Zero-shot object detection
364
+
365
+ ```ruby
366
+ detector = Informers.pipeline("zero-shot-object-detection")
367
+ detector.("image.jpg", ["label1", "label2", "label3"])
368
+ ```
369
+
370
+ Depth estimation
371
+
372
+ ```ruby
373
+ estimator = Informers.pipeline("depth-estimation")
374
+ estimator.("image.jpg")
375
+ ```
376
+
377
+ Image-to-image
378
+
379
+ ```ruby
380
+ upscaler = Informers.pipeline("image-to-image")
381
+ upscaler.("image.jpg")
382
+ ```
383
+
384
+ Image feature extraction
385
+
386
+ ```ruby
387
+ extractor = Informers.pipeline("image-feature-extraction")
388
+ extractor.("image.jpg")
389
+ ```
390
+
391
+ ### Multimodal
392
+
393
+ Image captioning
394
+
395
+ ```ruby
396
+ captioner = Informers.pipeline("image-to-text")
397
+ captioner.("image.jpg")
398
+ ```
399
+
400
+ Document question answering
401
+
402
+ ```ruby
403
+ qa = Informers.pipeline("document-question-answering")
404
+ qa.("image.jpg", "What is the invoice number?")
405
+ ```
406
+
285
407
  ## Credits
286
408
 
287
409
  This library was ported from [Transformers.js](https://github.com/xenova/transformers.js) and is available under the same license.
@@ -321,5 +443,6 @@ To get started with development:
321
443
  git clone https://github.com/ankane/informers.git
322
444
  cd informers
323
445
  bundle install
446
+ bundle exec rake download:files
324
447
  bundle exec rake test
325
448
  ```
@@ -1,17 +1,19 @@
1
1
  module Informers
2
2
  class PretrainedConfig
3
- attr_reader :model_type, :problem_type, :id2label
4
-
5
3
  def initialize(config_json)
6
- @is_encoder_decoder = false
7
-
8
- @model_type = config_json["model_type"]
9
- @problem_type = config_json["problem_type"]
10
- @id2label = config_json["id2label"]
4
+ @config_json = config_json.to_h
11
5
  end
12
6
 
13
7
  def [](key)
14
- instance_variable_get("@#{key}")
8
+ @config_json[key.to_s]
9
+ end
10
+
11
+ def []=(key, value)
12
+ @config_json[key.to_s] = value
13
+ end
14
+
15
+ def to_h
16
+ @config_json.to_h
15
17
  end
16
18
 
17
19
  def self.from_pretrained(
@@ -1,19 +1,12 @@
1
1
  module Informers
2
2
  class Model
3
3
  def initialize(model_id, quantized: false)
4
- @model_id = model_id
5
4
  @model = Informers.pipeline("embedding", model_id, quantized: quantized)
5
+ @options = model_id == "mixedbread-ai/mxbai-embed-large-v1" ? {pooling: "cls", normalize: false} : {}
6
6
  end
7
7
 
8
8
  def embed(texts)
9
- case @model_id
10
- when "sentence-transformers/all-MiniLM-L6-v2", "Xenova/all-MiniLM-L6-v2", "Xenova/multi-qa-MiniLM-L6-cos-v1", "Supabase/gte-small"
11
- @model.(texts)
12
- when "mixedbread-ai/mxbai-embed-large-v1"
13
- @model.(texts, pooling: "cls", normalize: false)
14
- else
15
- raise Error, "Use the embedding pipeline for this model: #{@model_id}"
16
- end
9
+ @model.(texts, **@options)
17
10
  end
18
11
  end
19
12
  end