cloudflare-ai 0.4.0 → 0.5.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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9085ff95f730366db7b3261cc94935f782d719b8129dd1341796ee6d66fd373c
|
4
|
+
data.tar.gz: 60b29886c88200aebdd1c46e743a28dd597540144494e8288098e05c6ddb8e04
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b95c01b2cab4dec4c0bdd476d99f5ab65183215a64e6c6711a50caed5874a51ff34b78b530b1877b13a1be8851fc527202a1b250f94d57a554ff46b25716136
|
7
|
+
data.tar.gz: 86721eb5cf51bfd886a6f9e1a4be71c4b33492cd90e2a2adedbe2f6474c7e601b4e2f1bc52bfd315039a3b24ea202fd627dc032a2dda63e8ad6f04b0e01da08a
|
data/README.md
CHANGED
@@ -21,9 +21,9 @@ It's still early days, and here are my immediate priorities:
|
|
21
21
|
* [ ] Support for more AI model categories
|
22
22
|
* [x] [Text Generation](https://developers.cloudflare.com/workers-ai/models/text-generation/)
|
23
23
|
* [x] [Text Embeddings](https://developers.cloudflare.com/workers-ai/models/text-embeddings/)
|
24
|
-
* [
|
24
|
+
* [x] [Text Classification](https://developers.cloudflare.com/workers-ai/models/text-classification/)
|
25
|
+
* [x] [Translation](https://developers.cloudflare.com/workers-ai/models/translation/)
|
25
26
|
* [ ] [Image Classification](https://developers.cloudflare.com/workers-ai/models/image-classification/)
|
26
|
-
* [ ] [Translation](https://developers.cloudflare.com/workers-ai/models/translation/)
|
27
27
|
* [ ] [Text-to-Image](https://developers.cloudflare.com/workers-ai/models/text-to-image/)
|
28
28
|
* [ ] [Automatic Speech Recognition](https://developers.cloudflare.com/workers-ai/models/speech-recognition/)
|
29
29
|
|
@@ -99,6 +99,12 @@ result = client.complete(prompt: "Hi!") { |data| puts data}
|
|
99
99
|
# [DONE]
|
100
100
|
|
101
101
|
```
|
102
|
+
#### Token limits
|
103
|
+
Invocations of the `prompt` and `chat` can take an optional `max_tokens` argument that defaults to 256.
|
104
|
+
```ruby
|
105
|
+
result = client.complete(prompt: "What is your name?", max_tokens: 512)
|
106
|
+
```
|
107
|
+
|
102
108
|
#### Result object
|
103
109
|
All invocations of the `prompt` and `chat` methods return a `Cloudflare::AI::Results::TextGeneration` object. This object's serializable JSON output is
|
104
110
|
based on the raw response from the Cloudflare API.
|
@@ -119,7 +125,6 @@ puts result.failure? # => true
|
|
119
125
|
puts result.to_json # => {"result":null,"success":false,"errors":[{"code":7009,"message":"Upstream service unavailable"}],"messages":[]}
|
120
126
|
```
|
121
127
|
|
122
|
-
|
123
128
|
### Text embedding
|
124
129
|
```ruby
|
125
130
|
result = client.embed(text: "Hello")
|
@@ -144,6 +149,15 @@ p result.result # => [{"label"=>"NEGATIVE", "score"=>0.6647962927818298}, {"labe
|
|
144
149
|
#### Result object
|
145
150
|
All invocations of the `classify` methods return a `Cloudflare::AI::Results::TextClassification`.
|
146
151
|
|
152
|
+
### Translation
|
153
|
+
```ruby
|
154
|
+
result = client.translate(text: "Hello Jello", source_lang: "en", target_lang: "fr")
|
155
|
+
p result.translated_text # => Hola Jello
|
156
|
+
```
|
157
|
+
|
158
|
+
#### Result object
|
159
|
+
All invocations of the `translate` methods return a `Cloudflare::AI::Results::Translate`.
|
160
|
+
|
147
161
|
# Logging
|
148
162
|
|
149
163
|
This gem uses standard logging mechanisms and defaults to `:warn` level. Most messages are at info level, but we will add debug or warn statements as needed.
|
data/lib/cloudflare/ai/client.rb
CHANGED
@@ -11,10 +11,10 @@ class Cloudflare::AI::Client
|
|
11
11
|
@api_token = api_token
|
12
12
|
end
|
13
13
|
|
14
|
-
def chat(messages:, model_name: default_text_generation_model_name, &block)
|
14
|
+
def chat(messages:, model_name: default_text_generation_model_name, max_tokens: default_max_tokens, &block)
|
15
15
|
url = service_url_for(account_id: account_id, model_name: model_name)
|
16
16
|
stream = block ? true : false
|
17
|
-
payload = create_streamable_payload({messages: messages.map(&:serializable_hash)}, stream: stream)
|
17
|
+
payload = create_streamable_payload({messages: messages.map(&:serializable_hash)}, stream: stream, max_tokens: max_tokens)
|
18
18
|
post_streamable_request(url, payload, &block)
|
19
19
|
end
|
20
20
|
|
@@ -25,10 +25,10 @@ class Cloudflare::AI::Client
|
|
25
25
|
Cloudflare::AI::Results::TextClassification.new(connection.post(url, payload).body)
|
26
26
|
end
|
27
27
|
|
28
|
-
def complete(prompt:, model_name: default_text_generation_model_name, &block)
|
28
|
+
def complete(prompt:, model_name: default_text_generation_model_name, max_tokens: default_max_tokens, &block)
|
29
29
|
url = service_url_for(account_id: account_id, model_name: model_name)
|
30
30
|
stream = block ? true : false
|
31
|
-
payload = create_streamable_payload({prompt: prompt}, stream: stream)
|
31
|
+
payload = create_streamable_payload({prompt: prompt}, stream: stream, max_tokens: max_tokens)
|
32
32
|
post_streamable_request(url, payload, &block)
|
33
33
|
end
|
34
34
|
|
@@ -39,6 +39,12 @@ class Cloudflare::AI::Client
|
|
39
39
|
Cloudflare::AI::Results::TextEmbedding.new(connection.post(url, payload).body)
|
40
40
|
end
|
41
41
|
|
42
|
+
def translate(text:, target_lang:, source_lang: "en", model_name: Cloudflare::AI::Models.translation.first)
|
43
|
+
url = service_url_for(account_id: account_id, model_name: model_name)
|
44
|
+
payload = {text: text, target_lang: target_lang, source_lang: source_lang}.to_json
|
45
|
+
Cloudflare::AI::Results::Translation.new(connection.post(url, payload).body)
|
46
|
+
end
|
47
|
+
|
42
48
|
private
|
43
49
|
|
44
50
|
def connection
|
@@ -2,12 +2,16 @@ module Cloudflare
|
|
2
2
|
module AI
|
3
3
|
module Clients
|
4
4
|
module TextGenerationHelpers
|
5
|
-
def
|
6
|
-
|
5
|
+
def create_streamable_payload(data, stream:, max_tokens:)
|
6
|
+
data.merge({stream: stream, max_tokens: max_tokens}).to_json
|
7
|
+
end
|
8
|
+
|
9
|
+
def default_max_tokens
|
10
|
+
256
|
7
11
|
end
|
8
12
|
|
9
|
-
def
|
10
|
-
|
13
|
+
def default_text_generation_model_name
|
14
|
+
Cloudflare::AI::Models.text_generation.first
|
11
15
|
end
|
12
16
|
|
13
17
|
def post_streamable_request(url, payload, &block)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cloudflare-ai
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ajay Krishnan
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-01-
|
11
|
+
date: 2024-01-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -101,6 +101,7 @@ files:
|
|
101
101
|
- lib/cloudflare/ai/results/text_classification.rb
|
102
102
|
- lib/cloudflare/ai/results/text_embedding.rb
|
103
103
|
- lib/cloudflare/ai/results/text_generation.rb
|
104
|
+
- lib/cloudflare/ai/results/translation.rb
|
104
105
|
- lib/cloudflare/ai/version.rb
|
105
106
|
homepage: https://rubygems.org/gems/cloudflare-ai
|
106
107
|
licenses:
|