hugging-face 0.3.4 → 0.3.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +14 -11
- 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 +5 -3
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.
|
4
|
+
hugging-face (0.3.5)
|
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,14 +1,14 @@
|
|
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
|
@@ -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
|