informers 1.0.3 → 1.1.1

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: a61f01755798e81a975641d60e5bfe09484ced7ce6a3453020c9978dc35b1942
4
+ data.tar.gz: 811f9c1dc4499ae7de8ebf8e02c0c4e98a0c0bc0af6aaca51025e42ba8165540
5
5
  SHA512:
6
- metadata.gz: a4a0c3da3d8a3555a6f2debca8f2939b6536ac76386cdd6c7264890b2d00842d537ecfca352021fa349ff9c4636ba49c189f652a66676746d9ec2a8d97eecc2a
7
- data.tar.gz: a06aa115b5966fd1b8da7a80d8481d3e61778f31c3bb0da143f329e81ae3f73d4a1d1b2ee01672f4e90742a35d68a23dd5c871c3b68ffad0c16d8e5de480a60f
6
+ metadata.gz: 97b27363fab1e43895e368dbddc819fd4db23d42ce517359e5971347cd902b654f0c66700f07b36cd5f476bd3ea205a91e4f7e7ee0e7d8d455f0dce377bedb2b
7
+ data.tar.gz: dd1a7f795609423419ce213b00a5aca409f6b4a5bffb111250b4deffcbc6a8113fadf8d603c59fa78fa0f310904a0a3299e3bcdc48101f574171a024d13567e6
data/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## 1.1.1 (2024-10-14)
2
+
3
+ - Added `audio-classification` pipeline
4
+ - Fixed error with `sentence-transformers/all-MiniLM-L6-v2`
5
+
6
+ ## 1.1.0 (2024-09-17)
7
+
8
+ - Added more pipelines
9
+
1
10
  ## 1.0.3 (2024-08-29)
2
11
 
3
12
  - Added `model_output` option
data/README.md CHANGED
@@ -229,17 +229,17 @@ result = model.(query, docs)
229
229
 
230
230
  ### Other
231
231
 
232
- You can use the feature extraction pipeline directly.
233
-
234
- ```ruby
235
- model = Informers.pipeline("feature-extraction", "Xenova/all-MiniLM-L6-v2", quantized: false)
236
- embeddings = model.(sentences, pooling: "mean", normalize: true)
237
- ```
238
-
239
232
  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` or `onnx/model_quantized.onnx`, use the `model_file_name` option to specify the location.
240
233
 
241
234
  ## Pipelines
242
235
 
236
+ - [Text](#text)
237
+ - [Vision](#vision)
238
+ - [Audio](#audio)
239
+ - [Multimodel](#multimodal)
240
+
241
+ ### Text
242
+
243
243
  Embedding
244
244
 
245
245
  ```ruby
@@ -275,6 +275,48 @@ qa = Informers.pipeline("question-answering")
275
275
  qa.("Who invented Ruby?", "Ruby is a programming language created by Matz")
276
276
  ```
277
277
 
278
+ Zero-shot classification
279
+
280
+ ```ruby
281
+ classifier = Informers.pipeline("zero-shot-classification")
282
+ classifier.("text", ["label1", "label2", "label3"])
283
+ ```
284
+
285
+ Text generation
286
+
287
+ ```ruby
288
+ generator = Informers.pipeline("text-generation")
289
+ generator.("I enjoy walking with my cute dog,")
290
+ ```
291
+
292
+ Text-to-text generation
293
+
294
+ ```ruby
295
+ text2text = Informers.pipeline("text2text-generation")
296
+ text2text.("translate from English to French: I'm very happy")
297
+ ```
298
+
299
+ Translation
300
+
301
+ ```ruby
302
+ translator = Informers.pipeline("translation", "Xenova/nllb-200-distilled-600M")
303
+ translator.("जीवन एक चॉकलेट बॉक्स की तरह है।", src_lang: "hin_Deva", tgt_lang: "fra_Latn")
304
+ ```
305
+
306
+ Summarization
307
+
308
+ ```ruby
309
+ summarizer = Informers.pipeline("summarization")
310
+ summarizer.("Many paragraphs of text")
311
+ ```
312
+
313
+ Fill mask
314
+
315
+ ```ruby
316
+ unmasker = Informers.pipeline("fill-mask")
317
+ unmasker.("Paris is the [MASK] of France.")
318
+ ```
319
+
278
320
  Feature extraction
279
321
 
280
322
  ```ruby
@@ -282,6 +324,93 @@ extractor = Informers.pipeline("feature-extraction")
282
324
  extractor.("We are very happy to show you the 🤗 Transformers library.")
283
325
  ```
284
326
 
327
+ ### Vision
328
+
329
+ Note: [ruby-vips](https://github.com/libvips/ruby-vips) is required to load images
330
+
331
+ Image classification
332
+
333
+ ```ruby
334
+ classifier = Informers.pipeline("image-classification")
335
+ classifier.("image.jpg")
336
+ ```
337
+
338
+ Zero-shot image classification
339
+
340
+ ```ruby
341
+ classifier = Informers.pipeline("zero-shot-image-classification")
342
+ classifier.("image.jpg", ["label1", "label2", "label3"])
343
+ ```
344
+
345
+ Image segmentation
346
+
347
+ ```ruby
348
+ segmenter = Informers.pipeline("image-segmentation")
349
+ segmenter.("image.jpg")
350
+ ```
351
+
352
+ Object detection
353
+
354
+ ```ruby
355
+ detector = Informers.pipeline("object-detection")
356
+ detector.("image.jpg")
357
+ ```
358
+
359
+ Zero-shot object detection
360
+
361
+ ```ruby
362
+ detector = Informers.pipeline("zero-shot-object-detection")
363
+ detector.("image.jpg", ["label1", "label2", "label3"])
364
+ ```
365
+
366
+ Depth estimation
367
+
368
+ ```ruby
369
+ estimator = Informers.pipeline("depth-estimation")
370
+ estimator.("image.jpg")
371
+ ```
372
+
373
+ Image-to-image
374
+
375
+ ```ruby
376
+ upscaler = Informers.pipeline("image-to-image")
377
+ upscaler.("image.jpg")
378
+ ```
379
+
380
+ Image feature extraction
381
+
382
+ ```ruby
383
+ extractor = Informers.pipeline("image-feature-extraction")
384
+ extractor.("image.jpg")
385
+ ```
386
+
387
+ ### Audio
388
+
389
+ Note: [ffmpeg](https://www.ffmpeg.org/) is required to load audio files
390
+
391
+ Audio classification
392
+
393
+ ```ruby
394
+ classifier = Informers.pipeline("audio-classification")
395
+ classifier.("audio.wav")
396
+ ```
397
+
398
+ ### Multimodal
399
+
400
+ Image captioning
401
+
402
+ ```ruby
403
+ captioner = Informers.pipeline("image-to-text")
404
+ captioner.("image.jpg")
405
+ ```
406
+
407
+ Document question answering
408
+
409
+ ```ruby
410
+ qa = Informers.pipeline("document-question-answering")
411
+ qa.("image.jpg", "What is the invoice number?")
412
+ ```
413
+
285
414
  ## Credits
286
415
 
287
416
  This library was ported from [Transformers.js](https://github.com/xenova/transformers.js) and is available under the same license.
@@ -321,5 +450,6 @@ To get started with development:
321
450
  git clone https://github.com/ankane/informers.git
322
451
  cd informers
323
452
  bundle install
453
+ bundle exec rake download:files
324
454
  bundle exec rake test
325
455
  ```
@@ -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