gen-ai 0.2.2 → 0.3.0
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/README.md +32 -18
- data/lib/gen/ai.rb +3 -0
- data/lib/gen_ai/image/open_ai.rb +16 -6
- data/lib/gen_ai/image/stability_ai.rb +7 -3
- data/lib/gen_ai/result.rb +9 -2
- data/lib/gen_ai/version.rb +1 -1
- data/lib/gen_ai.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1bbe9213620c2cb3e76d8b77bf895408a3e48398ac6bddf2a9cad20e5933fee4
|
4
|
+
data.tar.gz: 479fe26279cff268b640aba8afd100422f1c2548b0842543081c829637bbf8dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dacb5b6e3a5b56e3d2dc0833b9169ef77146decd34010a20945f69a974a273c5a3e7316893c7c0a2809b6e96f0113b976cd9d3dad036060c6a054ca6a9170831
|
7
|
+
data.tar.gz: c0fd1e20f18d89c828b32a76f8c43af78fa7b0e3730f8172256e193e65eeec5a4eba26b32bb08ddcf9f2147196c2ba20d37c1eba6fdbbbea8f91787319723f79
|
data/README.md
CHANGED
@@ -20,23 +20,29 @@ If bundler is not being used to manage dependencies, install the gem by executin
|
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
+
Require it in you code:
|
24
|
+
|
25
|
+
```ruby
|
26
|
+
require 'gen_ai'
|
27
|
+
```
|
28
|
+
|
23
29
|
### Feature support
|
24
|
-
|
30
|
+
|
31
|
+
✅ - Supported | ❌ - Not supported | 🛠️ - Work in progress
|
25
32
|
|
26
33
|
Language models capabilities
|
27
34
|
|
28
35
|
| Provider | Embedding | Completion | Conversation | Sentiment | Summarization |
|
29
|
-
| ---------------- |
|
30
|
-
| **OpenAI** |
|
31
|
-
| **Google Palm2** |
|
32
|
-
|
36
|
+
| ---------------- | :-------: | :--------: | :----------: | :-------: | :-----------: |
|
37
|
+
| **OpenAI** | ✅ | ✅ | ✅ | 🛠️ | 🛠️ |
|
38
|
+
| **Google Palm2** | ✅ | ✅ | ✅ | 🛠️ | 🛠️ |
|
33
39
|
|
34
40
|
Image generation model capabilities
|
35
41
|
|
36
|
-
| Provider
|
37
|
-
|
|
38
|
-
| **OpenAI**
|
39
|
-
| **StabilityAI**
|
42
|
+
| Provider | Generate | Variations | Edit | Upscale |
|
43
|
+
| --------------- | :------: | :--------: | :--: | :-----: |
|
44
|
+
| **OpenAI** | ✅ | ✅ | ✅ | ❌ |
|
45
|
+
| **StabilityAI** | ✅ | ❌ | ✅ | ✅ |
|
40
46
|
|
41
47
|
### Language
|
42
48
|
|
@@ -116,15 +122,18 @@ result = model.generate('A painting of a dog')
|
|
116
122
|
# => #<GenAI::Result:0x0000000110be6f20...>
|
117
123
|
|
118
124
|
result.value
|
119
|
-
# =>
|
125
|
+
# => image binary
|
126
|
+
|
127
|
+
result.value(:base64)
|
128
|
+
# => image in base64
|
120
129
|
|
121
130
|
# Save image to file
|
122
131
|
File.open('dog.jpg', 'wb') do |f|
|
123
|
-
f.write(
|
132
|
+
f.write(result.value)
|
124
133
|
end
|
125
134
|
```
|
126
|
-

|
127
135
|
|
136
|
+

|
128
137
|
|
129
138
|
Get more **variations** of the same image
|
130
139
|
|
@@ -133,16 +142,19 @@ result = model.variations('./dog.jpg')
|
|
133
142
|
# => #<GenAI::Result:0x0000000116a1ec50...>
|
134
143
|
|
135
144
|
result.value
|
136
|
-
# =>
|
145
|
+
# => image binary
|
146
|
+
|
147
|
+
result.value(:base64)
|
148
|
+
# => image in base64
|
137
149
|
|
138
150
|
# Save image to file
|
139
151
|
File.open('dog_variation.jpg', 'wb') do |f|
|
140
|
-
f.write(
|
152
|
+
f.write(result.value)
|
141
153
|
end
|
142
154
|
|
143
155
|
```
|
144
|
-

|
145
156
|
|
157
|
+

|
146
158
|
|
147
159
|
**Editing** existing images with additional prompt
|
148
160
|
|
@@ -151,18 +163,20 @@ result = model.edit('./llama.jpg', 'A cute llama wearing a beret', mask: './mask
|
|
151
163
|
# => #<GenAI::Result:0x0000000116a1ec50...>
|
152
164
|
|
153
165
|
result.value
|
154
|
-
# =>
|
166
|
+
# => image binary
|
167
|
+
|
168
|
+
result.value(:base64)
|
169
|
+
# => image in base64
|
155
170
|
|
156
171
|
# Save image to file
|
157
172
|
File.open('dog_edited.jpg', 'wb') do |f|
|
158
|
-
f.write(
|
173
|
+
f.write(result.value)
|
159
174
|
end
|
160
175
|
```
|
161
176
|
|
162
177
|

|
163
178
|

|
164
179
|
|
165
|
-
|
166
180
|
## Development
|
167
181
|
|
168
182
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/lib/gen/ai.rb
ADDED
data/lib/gen_ai/image/open_ai.rb
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'base64'
|
4
|
+
|
3
5
|
module GenAI
|
4
6
|
class Image
|
5
7
|
class OpenAI < Base
|
6
8
|
DEFAULT_SIZE = '256x256'
|
9
|
+
DEFAULT_MODEL = 'dall-e-3'
|
7
10
|
RESPONSE_FORMAT = 'b64_json'
|
8
11
|
|
9
12
|
def initialize(token:, options: {})
|
@@ -19,8 +22,8 @@ module GenAI
|
|
19
22
|
|
20
23
|
build_result(
|
21
24
|
raw: response,
|
22
|
-
model:
|
23
|
-
parsed: response['data']
|
25
|
+
model: parameters[:model],
|
26
|
+
parsed: parse_response_data(response['data'])
|
24
27
|
)
|
25
28
|
end
|
26
29
|
|
@@ -31,8 +34,8 @@ module GenAI
|
|
31
34
|
|
32
35
|
build_result(
|
33
36
|
raw: response,
|
34
|
-
model:
|
35
|
-
parsed: response['data']
|
37
|
+
model: parameters[:model],
|
38
|
+
parsed: parse_response_data(response['data'])
|
36
39
|
)
|
37
40
|
end
|
38
41
|
|
@@ -43,8 +46,8 @@ module GenAI
|
|
43
46
|
|
44
47
|
build_result(
|
45
48
|
raw: response,
|
46
|
-
model:
|
47
|
-
parsed: response['data']
|
49
|
+
model: parameters[:model],
|
50
|
+
parsed: parse_response_data(response['data'])
|
48
51
|
)
|
49
52
|
end
|
50
53
|
|
@@ -54,6 +57,7 @@ module GenAI
|
|
54
57
|
{
|
55
58
|
prompt: prompt,
|
56
59
|
size: options.delete(:size) || DEFAULT_SIZE,
|
60
|
+
model: options.delete(:model) || DEFAULT_MODEL,
|
57
61
|
response_format: options.delete(:response_format) || RESPONSE_FORMAT
|
58
62
|
}.merge(options)
|
59
63
|
end
|
@@ -62,6 +66,7 @@ module GenAI
|
|
62
66
|
{
|
63
67
|
image: image,
|
64
68
|
size: options.delete(:size) || DEFAULT_SIZE,
|
69
|
+
model: 'dall-e-2', # variation is only available on dall-e-2
|
65
70
|
response_format: options.delete(:response_format) || RESPONSE_FORMAT
|
66
71
|
}.merge(options)
|
67
72
|
end
|
@@ -71,9 +76,14 @@ module GenAI
|
|
71
76
|
image: image,
|
72
77
|
prompt: prompt,
|
73
78
|
size: options.delete(:size) || DEFAULT_SIZE,
|
79
|
+
model: 'dall-e-2', # edit is only available on dall-e-2
|
74
80
|
response_format: options.delete(:response_format) || RESPONSE_FORMAT
|
75
81
|
}.merge(options)
|
76
82
|
end
|
83
|
+
|
84
|
+
def parse_response_data(data)
|
85
|
+
data.map { |datum| Base64.decode64(datum[RESPONSE_FORMAT]) }
|
86
|
+
end
|
77
87
|
end
|
78
88
|
end
|
79
89
|
end
|
@@ -23,7 +23,7 @@ module GenAI
|
|
23
23
|
build_result(
|
24
24
|
raw: response,
|
25
25
|
model: model,
|
26
|
-
parsed: response['artifacts']
|
26
|
+
parsed: parse_response_data(response['artifacts'])
|
27
27
|
)
|
28
28
|
end
|
29
29
|
|
@@ -36,7 +36,7 @@ module GenAI
|
|
36
36
|
build_result(
|
37
37
|
raw: response,
|
38
38
|
model: model,
|
39
|
-
parsed: response['artifacts']
|
39
|
+
parsed: parse_response_data(response['artifacts'])
|
40
40
|
)
|
41
41
|
end
|
42
42
|
|
@@ -49,7 +49,7 @@ module GenAI
|
|
49
49
|
build_result(
|
50
50
|
raw: response,
|
51
51
|
model: model,
|
52
|
-
parsed: response['artifacts']
|
52
|
+
parsed: parse_response_data(response['artifacts'])
|
53
53
|
)
|
54
54
|
end
|
55
55
|
|
@@ -91,6 +91,10 @@ module GenAI
|
|
91
91
|
size = options.delete(:size) || DEFAULT_SIZE
|
92
92
|
size.split('x').map(&:to_i)
|
93
93
|
end
|
94
|
+
|
95
|
+
def parse_response_data(data)
|
96
|
+
data.map { |artifact| Base64.decode64(artifact['base64']) }
|
97
|
+
end
|
94
98
|
end
|
95
99
|
end
|
96
100
|
end
|
data/lib/gen_ai/result.rb
CHANGED
@@ -11,8 +11,15 @@ module GenAI
|
|
11
11
|
@values = values
|
12
12
|
end
|
13
13
|
|
14
|
-
def value
|
15
|
-
|
14
|
+
def value(format = :raw)
|
15
|
+
case format
|
16
|
+
when :raw
|
17
|
+
values.first
|
18
|
+
when :base64
|
19
|
+
Base64.encode64(values.first)
|
20
|
+
else
|
21
|
+
raise "Unsupported format: #{format}"
|
22
|
+
end
|
16
23
|
end
|
17
24
|
|
18
25
|
def prompt_tokens
|
data/lib/gen_ai/version.rb
CHANGED
data/lib/gen_ai.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gen-ai
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Chaplinsky
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-11-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -96,6 +96,7 @@ files:
|
|
96
96
|
- README.md
|
97
97
|
- Rakefile
|
98
98
|
- gen-ai.gemspec
|
99
|
+
- lib/gen/ai.rb
|
99
100
|
- lib/gen_ai.rb
|
100
101
|
- lib/gen_ai/api/client.rb
|
101
102
|
- lib/gen_ai/base.rb
|