gen-ai 0.2.3 → 0.3.0

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: e6fbef446e1383e14734c390b0e342433991858e95a083e0aaf9a31f844f4503
4
- data.tar.gz: e8bda40ea6377b4ada7175bcabae430681ac6d707c75cce745e4a079ce17dba9
3
+ metadata.gz: 1bbe9213620c2cb3e76d8b77bf895408a3e48398ac6bddf2a9cad20e5933fee4
4
+ data.tar.gz: 479fe26279cff268b640aba8afd100422f1c2548b0842543081c829637bbf8dd
5
5
  SHA512:
6
- metadata.gz: ade0a401f9c6cb8fdb1c1de1fd5e31b52a79ffc69af2267644f4ffe6f2bf8892d3f92bcf1a2e2aebfd1ea0790dab1dd3a8c5b42fa59e870bc0cbab13766ce1b9
7
- data.tar.gz: 39826a4c7f854b2a0ffd24010306e612b2cad1465e60719ba518f5b2ee43a17338c268684e615b376388f280dd20740f750fc6c8e5b49dfbc822c1f2873ba9f6
6
+ metadata.gz: dacb5b6e3a5b56e3d2dc0833b9169ef77146decd34010a20945f69a974a273c5a3e7316893c7c0a2809b6e96f0113b976cd9d3dad036060c6a054ca6a9170831
7
+ data.tar.gz: c0fd1e20f18d89c828b32a76f8c43af78fa7b0e3730f8172256e193e65eeec5a4eba26b32bb08ddcf9f2147196c2ba20d37c1eba6fdbbbea8f91787319723f79
data/README.md CHANGED
@@ -21,29 +21,28 @@ If bundler is not being used to manage dependencies, install the gem by executin
21
21
  ## Usage
22
22
 
23
23
  Require it in you code:
24
+
24
25
  ```ruby
25
26
  require 'gen_ai'
26
27
  ```
27
28
 
28
-
29
-
30
29
  ### Feature support
31
- ✅ - Supported | ❌ - Not supported | 🛠️ - Work in progress
30
+
31
+ ✅ - Supported | ❌ - Not supported | 🛠️ - Work in progress
32
32
 
33
33
  Language models capabilities
34
34
 
35
35
  | Provider | Embedding | Completion | Conversation | Sentiment | Summarization |
36
36
  | ---------------- | :-------: | :--------: | :----------: | :-------: | :-----------: |
37
- | **OpenAI** | | | | 🛠️ | 🛠️ |
38
- | **Google Palm2** | | | | 🛠️ | 🛠️ |
39
-
37
+ | **OpenAI** | | | | 🛠️ | 🛠️ |
38
+ | **Google Palm2** | | | | 🛠️ | 🛠️ |
40
39
 
41
40
  Image generation model capabilities
42
41
 
43
- | Provider | Generate | Variations | Edit | Upscale |
44
- | ---------------- | :-------: | :--------: | :----------: | :-------: |
45
- | **OpenAI** | | | | |
46
- | **StabilityAI** | | | | |
42
+ | Provider | Generate | Variations | Edit | Upscale |
43
+ | --------------- | :------: | :--------: | :--: | :-----: |
44
+ | **OpenAI** | | | | |
45
+ | **StabilityAI** | | | | |
47
46
 
48
47
  ### Language
49
48
 
@@ -123,15 +122,18 @@ result = model.generate('A painting of a dog')
123
122
  # => #<GenAI::Result:0x0000000110be6f20...>
124
123
 
125
124
  result.value
126
- # => Base64 encoded image
125
+ # => image binary
126
+
127
+ result.value(:base64)
128
+ # => image in base64
127
129
 
128
130
  # Save image to file
129
131
  File.open('dog.jpg', 'wb') do |f|
130
- f.write(Base64.decode64(result.value))
132
+ f.write(result.value)
131
133
  end
132
134
  ```
133
- ![dog](https://github.com/alchaplinsky/gen-ai/assets/695947/27a2af5d-530b-4966-94e8-6cdf628b6cac)
134
135
 
136
+ ![dog](https://github.com/alchaplinsky/gen-ai/assets/695947/27a2af5d-530b-4966-94e8-6cdf628b6cac)
135
137
 
136
138
  Get more **variations** of the same image
137
139
 
@@ -140,16 +142,19 @@ result = model.variations('./dog.jpg')
140
142
  # => #<GenAI::Result:0x0000000116a1ec50...>
141
143
 
142
144
  result.value
143
- # => Base64 encoded image
145
+ # => image binary
146
+
147
+ result.value(:base64)
148
+ # => image in base64
144
149
 
145
150
  # Save image to file
146
151
  File.open('dog_variation.jpg', 'wb') do |f|
147
- f.write(Base64.decode64(result.value))
152
+ f.write(result.value)
148
153
  end
149
154
 
150
155
  ```
151
- ![dog_variation](https://github.com/alchaplinsky/gen-ai/assets/695947/977f5238-0114-4085-8e61-8f8b356ce308)
152
156
 
157
+ ![dog_variation](https://github.com/alchaplinsky/gen-ai/assets/695947/977f5238-0114-4085-8e61-8f8b356ce308)
153
158
 
154
159
  **Editing** existing images with additional prompt
155
160
 
@@ -158,18 +163,20 @@ result = model.edit('./llama.jpg', 'A cute llama wearing a beret', mask: './mask
158
163
  # => #<GenAI::Result:0x0000000116a1ec50...>
159
164
 
160
165
  result.value
161
- # => Base64 encoded image
166
+ # => image binary
167
+
168
+ result.value(:base64)
169
+ # => image in base64
162
170
 
163
171
  # Save image to file
164
172
  File.open('dog_edited.jpg', 'wb') do |f|
165
- f.write(Base64.decode64(result.value))
173
+ f.write(result.value)
166
174
  end
167
175
  ```
168
176
 
169
177
  ![llama](https://github.com/alchaplinsky/gen-ai/assets/695947/9c862c6c-428e-463c-b935-ca749a6a33df)
170
178
  ![llama_edited](https://github.com/alchaplinsky/gen-ai/assets/695947/070d8e6a-07a0-4ed2-826f-8b9aabd183ae)
171
179
 
172
-
173
180
  ## Development
174
181
 
175
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.
@@ -1,5 +1,7 @@
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
@@ -21,7 +23,7 @@ module GenAI
21
23
  build_result(
22
24
  raw: response,
23
25
  model: parameters[:model],
24
- parsed: response['data'].map { |datum| datum[RESPONSE_FORMAT] }
26
+ parsed: parse_response_data(response['data'])
25
27
  )
26
28
  end
27
29
 
@@ -32,8 +34,8 @@ module GenAI
32
34
 
33
35
  build_result(
34
36
  raw: response,
35
- model: 'dall-e',
36
- parsed: response['data'].map { |datum| datum[RESPONSE_FORMAT] }
37
+ model: parameters[:model],
38
+ parsed: parse_response_data(response['data'])
37
39
  )
38
40
  end
39
41
 
@@ -44,8 +46,8 @@ module GenAI
44
46
 
45
47
  build_result(
46
48
  raw: response,
47
- model: 'dall-e',
48
- parsed: response['data'].map { |datum| datum[RESPONSE_FORMAT] }
49
+ model: parameters[:model],
50
+ parsed: parse_response_data(response['data'])
49
51
  )
50
52
  end
51
53
 
@@ -64,6 +66,7 @@ module GenAI
64
66
  {
65
67
  image: image,
66
68
  size: options.delete(:size) || DEFAULT_SIZE,
69
+ model: 'dall-e-2', # variation is only available on dall-e-2
67
70
  response_format: options.delete(:response_format) || RESPONSE_FORMAT
68
71
  }.merge(options)
69
72
  end
@@ -73,9 +76,14 @@ module GenAI
73
76
  image: image,
74
77
  prompt: prompt,
75
78
  size: options.delete(:size) || DEFAULT_SIZE,
79
+ model: 'dall-e-2', # edit is only available on dall-e-2
76
80
  response_format: options.delete(:response_format) || RESPONSE_FORMAT
77
81
  }.merge(options)
78
82
  end
83
+
84
+ def parse_response_data(data)
85
+ data.map { |datum| Base64.decode64(datum[RESPONSE_FORMAT]) }
86
+ end
79
87
  end
80
88
  end
81
89
  end
@@ -23,7 +23,7 @@ module GenAI
23
23
  build_result(
24
24
  raw: response,
25
25
  model: model,
26
- parsed: response['artifacts'].map { |artifact| artifact['base64'] }
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'].map { |artifact| artifact['base64'] }
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'].map { |artifact| artifact['base64'] }
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
- values.first
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GenAI
4
- VERSION = '0.2.3'
4
+ VERSION = '0.3.0'
5
5
  end
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.2.3
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-14 00:00:00.000000000 Z
11
+ date: 2023-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday