hugging-face 0.3.3 → 0.3.5
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/Gemfile.lock +15 -12
- data/LICENSE +21 -0
- data/README.md +41 -2
- data/lib/hugging_face/base_api.rb +6 -3
- data/lib/hugging_face/endpoints_api.rb +29 -0
- data/lib/hugging_face/inference_api.rb +7 -1
- data/lib/hugging_face/version.rb +1 -1
- data/lib/hugging_face.rb +1 -0
- metadata +7 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e332f1b35fbd0fb35cae8001b5fa7ecae8aeb0326f49d63f7d9bba8872ae1df9
|
4
|
+
data.tar.gz: 895a1b725527941626559dc30d85b54204a3e9c2b06d196f3d061108eac5b8df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d55632ba6532b38545db4664ce8529cbb942fc41d65a7810251a04c2add4a8637311df1c2a4af91f76e3c2707dda7625104af6ad0fa9d36412f334bc27825c5c
|
7
|
+
data.tar.gz: 853625dc46f48785ba7fe257b44ccf34894adf03b81d8dcd0479c2f15b5e7b73f6c0459eac9725ae13214c77dd359a7ecd0f241dfa5c1658c136c920eba2fc32
|
data/Gemfile.lock
CHANGED
@@ -1,25 +1,27 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
hugging-face (0.3.
|
5
|
-
faraday (
|
4
|
+
hugging-face (0.3.5)
|
5
|
+
faraday (>= 1.0)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
addressable (2.8.
|
10
|
+
addressable (2.8.5)
|
11
11
|
public_suffix (>= 2.0.2, < 6.0)
|
12
|
+
base64 (0.1.1)
|
12
13
|
crack (0.4.5)
|
13
14
|
rexml
|
14
15
|
diff-lcs (1.5.0)
|
15
|
-
faraday (
|
16
|
-
|
17
|
-
|
16
|
+
faraday (2.7.11)
|
17
|
+
base64
|
18
|
+
faraday-net_http (>= 2.0, < 3.1)
|
19
|
+
ruby2_keywords (>= 0.0.4)
|
20
|
+
faraday-net_http (3.0.2)
|
18
21
|
hashdiff (1.0.1)
|
19
|
-
|
20
|
-
public_suffix (5.0.1)
|
22
|
+
public_suffix (5.0.3)
|
21
23
|
rake (13.0.6)
|
22
|
-
rexml (3.2.
|
24
|
+
rexml (3.2.6)
|
23
25
|
rspec (3.12.0)
|
24
26
|
rspec-core (~> 3.12.0)
|
25
27
|
rspec-expectations (~> 3.12.0)
|
@@ -29,18 +31,19 @@ GEM
|
|
29
31
|
rspec-expectations (3.12.3)
|
30
32
|
diff-lcs (>= 1.2.0, < 2.0)
|
31
33
|
rspec-support (~> 3.12.0)
|
32
|
-
rspec-mocks (3.12.
|
34
|
+
rspec-mocks (3.12.6)
|
33
35
|
diff-lcs (>= 1.2.0, < 2.0)
|
34
36
|
rspec-support (~> 3.12.0)
|
35
|
-
rspec-support (3.12.
|
37
|
+
rspec-support (3.12.1)
|
36
38
|
ruby2_keywords (0.0.5)
|
37
|
-
webmock (3.
|
39
|
+
webmock (3.19.1)
|
38
40
|
addressable (>= 2.8.0)
|
39
41
|
crack (>= 0.3.2)
|
40
42
|
hashdiff (>= 0.4.0, < 2.0.0)
|
41
43
|
|
42
44
|
PLATFORMS
|
43
45
|
arm64-darwin-21
|
46
|
+
arm64-darwin-22
|
44
47
|
x86_64-darwin-19
|
45
48
|
x86_64-linux
|
46
49
|
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2023 Alex Chaplinsky
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
CHANGED
@@ -18,14 +18,19 @@ $ gem install hugging-face
|
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
+
|
22
|
+
### Inference API
|
23
|
+
|
24
|
+
The inference API is a free Machine Learning API from Hugging Face. It is meant for prototyping and not produciton use, see below for Inference Endpoints, the product for use with production LLMs.
|
25
|
+
|
21
26
|
```ruby
|
22
27
|
require "hugging_face"
|
23
28
|
```
|
24
29
|
|
25
|
-
Instantiate a
|
30
|
+
Instantiate a HuggingFace Inference API client:
|
26
31
|
|
27
32
|
```ruby
|
28
|
-
client = HuggingFace::InferenceApi.new(
|
33
|
+
client = HuggingFace::InferenceApi.new(api_token: ENV['HUGGING_FACE_API_TOKEN'])
|
29
34
|
```
|
30
35
|
|
31
36
|
Question answering:
|
@@ -55,6 +60,40 @@ Embedding:
|
|
55
60
|
client.embedding(input: ['How to build a ruby gem?', 'How to install ruby gem?'])
|
56
61
|
```
|
57
62
|
|
63
|
+
Sentiment:
|
64
|
+
|
65
|
+
```ruby
|
66
|
+
client.sentiment(input: ['My life sucks', 'Life is a miracle'])
|
67
|
+
```
|
68
|
+
|
69
|
+
### Inference Endpoints
|
70
|
+
|
71
|
+
With this same gem, you can also access endpoints, which are best described by Hugging Face: "[Inference Endpoints](https://huggingface.co/docs/inference-endpoints/index) provides a secure production solution to easily deploy models on a dedicated and autoscaling infrastructure managed by Hugging Face. An Inference Endpoint is built from a model from the Hub."
|
72
|
+
|
73
|
+
Once you've created an endpoint by choosing a model and desired infrastructure, you'll be given an endpoint URL, something like: https://eyic1edp3ah0g5ln.us-east-1.aws.endpoints.huggingface.cloud
|
74
|
+
|
75
|
+
You'll need your token to access your endpoint if you've chosen for it to be protected. You can also choose to have a public endpoint.
|
76
|
+
|
77
|
+
Since you choose the LLM task in your endpoint config (e.g. Text Classification, Summarisation, Question answering), there is no need to pass that argument.
|
78
|
+
|
79
|
+
To access from the gem. instantiate a HuggingFace Endpoint API client:
|
80
|
+
|
81
|
+
```ruby
|
82
|
+
endpoint = HuggingFace::EndpointsApi.new(api_token: ENV['HUGGING_FACE_API_TOKEN'])
|
83
|
+
```
|
84
|
+
|
85
|
+
Example with input from question answering task:
|
86
|
+
|
87
|
+
```ruby
|
88
|
+
endpoint.request(endpoint_url: "https://your-end-point.us-east-1.aws.endpoints.huggingface.cloud", input: { context: some_text, question: question }
|
89
|
+
```
|
90
|
+
|
91
|
+
Example call to an endpoint configured for summarisation, including passing params:
|
92
|
+
|
93
|
+
```ruby
|
94
|
+
endpoint.request(endpoint_url: "https://your-end-point.us-east-1.aws.endpoints.huggingface.cloud", input: some_text, params: { min_length: 32, max_length: 64 } )
|
95
|
+
```
|
96
|
+
|
58
97
|
|
59
98
|
## Development
|
60
99
|
|
@@ -20,9 +20,12 @@ module HuggingFace
|
|
20
20
|
Faraday.new(url, headers: @headers)
|
21
21
|
end
|
22
22
|
|
23
|
-
def request(connection:, input:)
|
24
|
-
response = connection.post { |req|
|
25
|
-
|
23
|
+
def request(connection:, input:, params: nil)
|
24
|
+
response = connection.post { |req|
|
25
|
+
req.body = input.to_json
|
26
|
+
req.params = params if params
|
27
|
+
}
|
28
|
+
|
26
29
|
if response.success?
|
27
30
|
return parse_response response
|
28
31
|
else
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module HuggingFace
|
2
|
+
class EndpointsApi < BaseApi
|
3
|
+
|
4
|
+
def request(endpoint_url:, input:, params: nil)
|
5
|
+
retries = 0
|
6
|
+
|
7
|
+
endpoint_connection = build_connection endpoint_url
|
8
|
+
|
9
|
+
begin
|
10
|
+
return super(connection: endpoint_connection, input: { inputs: input }, params: params )
|
11
|
+
rescue ServiceUnavailable => exception
|
12
|
+
|
13
|
+
if retries < MAX_RETRY
|
14
|
+
logger.debug('Service unavailable, retrying...')
|
15
|
+
retries += 1
|
16
|
+
sleep 5
|
17
|
+
retry
|
18
|
+
else
|
19
|
+
raise exception
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
@@ -5,11 +5,12 @@ module HuggingFace
|
|
5
5
|
# Retry connecting to the model for 1 minute
|
6
6
|
MAX_RETRY = 60
|
7
7
|
|
8
|
-
#
|
8
|
+
# Default models that can be overriden by 'model' param
|
9
9
|
QUESTION_ANSWERING_MODEL = 'distilbert-base-cased-distilled-squad'
|
10
10
|
SUMMARIZATION_MODEL = "sshleifer/distilbart-xsum-12-6"
|
11
11
|
GENERATION_MODEL = "distilgpt2"
|
12
12
|
EMBEDING_MODEL = "sentence-transformers/all-MiniLM-L6-v2"
|
13
|
+
SENTIMENT_MODEL = "distilbert-base-uncased-finetuned-sst-2-english"
|
13
14
|
|
14
15
|
def call(input:, model:)
|
15
16
|
request(connection: connection(model), input: input)
|
@@ -33,6 +34,11 @@ module HuggingFace
|
|
33
34
|
request connection: connection(model), input: { inputs: input }
|
34
35
|
end
|
35
36
|
|
37
|
+
def sentiment(input:, model: SENTIMENT_MODEL)
|
38
|
+
request connection: connection(model), input: { inputs: input }
|
39
|
+
end
|
40
|
+
|
41
|
+
|
36
42
|
private
|
37
43
|
|
38
44
|
def connection(model)
|
data/lib/hugging_face/version.rb
CHANGED
data/lib/hugging_face.rb
CHANGED
metadata
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hugging-face
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Chaplinsky
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.0'
|
27
27
|
description: Ruby client for Hugging Face API
|
@@ -36,10 +36,12 @@ files:
|
|
36
36
|
- CODE_OF_CONDUCT.md
|
37
37
|
- Gemfile
|
38
38
|
- Gemfile.lock
|
39
|
+
- LICENSE
|
39
40
|
- README.md
|
40
41
|
- Rakefile
|
41
42
|
- lib/hugging_face.rb
|
42
43
|
- lib/hugging_face/base_api.rb
|
44
|
+
- lib/hugging_face/endpoints_api.rb
|
43
45
|
- lib/hugging_face/inference_api.rb
|
44
46
|
- lib/hugging_face/version.rb
|
45
47
|
- sig/hugging_face.rbs
|
@@ -64,7 +66,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
64
66
|
- !ruby/object:Gem::Version
|
65
67
|
version: '0'
|
66
68
|
requirements: []
|
67
|
-
rubygems_version: 3.3.
|
69
|
+
rubygems_version: 3.3.26
|
68
70
|
signing_key:
|
69
71
|
specification_version: 4
|
70
72
|
summary: Ruby client for Hugging Face API
|