gemini-ai 3.1.2 → 3.2.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: 9bd73b705a0583ff417c3e27341d49dc4847d7ecda287d5ce3f3e501dce0d784
4
- data.tar.gz: af6e6f982b09a4787303c03e02f6bbf67c10520b7852d8398d87f14d1b72a947
3
+ metadata.gz: c726dcc65ecf4cfca2819e6f18da5fd1a3eb96e45888971881c7255631a2f074
4
+ data.tar.gz: 2d1617c38f987a40386b48b8465871e44f60bc2bd00dc4883704f91aa12aaab9
5
5
  SHA512:
6
- metadata.gz: 67bd3d6acbf83b7e9d2da8e8082f5bc412b0390822cc71884e40e4e2e93d1abbd01c2c6d7413b76a37f4c4dc2250064f00862cb64fc07851458685375af78619
7
- data.tar.gz: ef46dd2bee2c1329c1c2a50a3f409f8a6205f81279add1c1bce409304790c018bcc0041676a11809ede5df12e008cdf56cd2064592e30c3384808e748cd7deb2
6
+ metadata.gz: c3356afb013f69f51c1dfd6f379da7ae615dbbc4750dff25b977bc70a4ccda428a4466cbf4ea60dd7341bbc634882b56d1d76a24c3993a449c97ae566c44daf1
7
+ data.tar.gz: 9412ff5d682105db69caf9cc98688d499f794f76231e741450ee6eebd2c0f49efaeca6376f3b45a424e070e717e702a347ce5cf5cf0eb27229dc8e10727cdb32
data/.gitignore CHANGED
@@ -1,2 +1,3 @@
1
1
  *.gem
2
2
  .devcontainer
3
+ .env
data/Gemfile CHANGED
@@ -5,6 +5,7 @@ source 'https://rubygems.org'
5
5
  gemspec
6
6
 
7
7
  group :test, :development do
8
+ gem 'dotenv', '~> 2.8', '>= 2.8.1'
8
9
  gem 'pry-byebug', '~> 3.10', '>= 3.10.1'
9
- gem 'rubocop', '~> 1.58'
10
+ gem 'rubocop', '~> 1.60', '>= 1.60.1'
10
11
  end
data/Gemfile.lock CHANGED
@@ -1,10 +1,12 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gemini-ai (3.1.2)
4
+ gemini-ai (3.2.0)
5
5
  event_stream_parser (~> 1.0)
6
- faraday (~> 2.8, >= 2.8.1)
6
+ faraday (~> 2.9)
7
+ faraday-typhoeus (~> 1.1)
7
8
  googleauth (~> 1.8)
9
+ typhoeus (~> 1.4, >= 1.4.1)
8
10
 
9
11
  GEM
10
12
  remote: https://rubygems.org/
@@ -12,15 +14,20 @@ GEM
12
14
  addressable (2.8.6)
13
15
  public_suffix (>= 2.0.2, < 6.0)
14
16
  ast (2.4.2)
15
- base64 (0.2.0)
16
17
  byebug (11.1.3)
17
18
  coderay (1.1.3)
19
+ dotenv (2.8.1)
20
+ ethon (0.16.0)
21
+ ffi (>= 1.15.0)
18
22
  event_stream_parser (1.0.0)
19
- faraday (2.8.1)
20
- base64
21
- faraday-net_http (>= 2.0, < 3.1)
22
- ruby2_keywords (>= 0.0.4)
23
- faraday-net_http (3.0.2)
23
+ faraday (2.9.0)
24
+ faraday-net_http (>= 2.0, < 3.2)
25
+ faraday-net_http (3.1.0)
26
+ net-http
27
+ faraday-typhoeus (1.1.0)
28
+ faraday (~> 2.0)
29
+ typhoeus (~> 1.4)
30
+ ffi (1.16.3)
24
31
  google-cloud-env (2.1.0)
25
32
  faraday (>= 1.0, < 3.a)
26
33
  googleauth (1.9.1)
@@ -35,9 +42,11 @@ GEM
35
42
  language_server-protocol (3.17.0.3)
36
43
  method_source (1.0.0)
37
44
  multi_json (1.15.0)
45
+ net-http (0.4.1)
46
+ uri
38
47
  os (1.1.4)
39
48
  parallel (1.24.0)
40
- parser (3.3.0.0)
49
+ parser (3.3.0.5)
41
50
  ast (~> 2.4.1)
42
51
  racc
43
52
  pry (0.14.2)
@@ -49,13 +58,13 @@ GEM
49
58
  public_suffix (5.0.4)
50
59
  racc (1.7.3)
51
60
  rainbow (3.1.1)
52
- regexp_parser (2.8.3)
61
+ regexp_parser (2.9.0)
53
62
  rexml (3.2.6)
54
- rubocop (1.59.0)
63
+ rubocop (1.60.1)
55
64
  json (~> 2.3)
56
65
  language_server-protocol (>= 3.17.0)
57
66
  parallel (~> 1.10)
58
- parser (>= 3.2.2.4)
67
+ parser (>= 3.3.0.2)
59
68
  rainbow (>= 2.2.2, < 4.0)
60
69
  regexp_parser (>= 1.8, < 3.0)
61
70
  rexml (>= 3.2.5, < 4.0)
@@ -65,21 +74,24 @@ GEM
65
74
  rubocop-ast (1.30.0)
66
75
  parser (>= 3.2.1.0)
67
76
  ruby-progressbar (1.13.0)
68
- ruby2_keywords (0.0.5)
69
77
  signet (0.18.0)
70
78
  addressable (~> 2.8)
71
79
  faraday (>= 0.17.5, < 3.a)
72
80
  jwt (>= 1.5, < 3.0)
73
81
  multi_json (~> 1.10)
82
+ typhoeus (1.4.1)
83
+ ethon (>= 0.9.0)
74
84
  unicode-display_width (2.5.0)
85
+ uri (0.13.0)
75
86
 
76
87
  PLATFORMS
77
88
  x86_64-linux
78
89
 
79
90
  DEPENDENCIES
91
+ dotenv (~> 2.8, >= 2.8.1)
80
92
  gemini-ai!
81
93
  pry-byebug (~> 3.10, >= 3.10.1)
82
- rubocop (~> 1.58)
94
+ rubocop (~> 1.60, >= 1.60.1)
83
95
 
84
96
  BUNDLED WITH
85
97
  2.4.22
data/README.md CHANGED
@@ -9,7 +9,7 @@ A Ruby Gem for interacting with [Gemini](https://deepmind.google/technologies/ge
9
9
  ## TL;DR and Quick Start
10
10
 
11
11
  ```ruby
12
- gem 'gemini-ai', '~> 3.1.2'
12
+ gem 'gemini-ai', '~> 3.2.0'
13
13
  ```
14
14
 
15
15
  ```ruby
@@ -79,6 +79,7 @@ Result:
79
79
  - [Option 2: Service Account Credentials File (Vertex AI API)](#option-2-service-account-credentials-file-vertex-ai-api)
80
80
  - [Option 3: Application Default Credentials (Vertex AI API)](#option-3-application-default-credentials-vertex-ai-api)
81
81
  - [Required Data](#required-data)
82
+ - [Custom Version](#custom-version)
82
83
  - [Usage](#usage)
83
84
  - [Client](#client)
84
85
  - [Methods](#methods)
@@ -97,6 +98,7 @@ Result:
97
98
  - [Tools (Functions) Calling](#tools-functions-calling)
98
99
  - [New Functionalities and APIs](#new-functionalities-and-apis)
99
100
  - [Request Options](#request-options)
101
+ - [Adapter](#adapter)
100
102
  - [Timeout](#timeout)
101
103
  - [Error Handling](#error-handling)
102
104
  - [Rescuing](#rescuing)
@@ -114,11 +116,11 @@ Result:
114
116
  ### Installing
115
117
 
116
118
  ```sh
117
- gem install gemini-ai -v 3.1.2
119
+ gem install gemini-ai -v 3.2.0
118
120
  ```
119
121
 
120
122
  ```sh
121
- gem 'gemini-ai', '~> 3.1.2'
123
+ gem 'gemini-ai', '~> 3.2.0'
122
124
  ```
123
125
 
124
126
  ### Credentials
@@ -270,6 +272,43 @@ You might want to explicitly set a Google Cloud Project ID, which you can do as
270
272
  }
271
273
  ```
272
274
 
275
+ ### Custom Version
276
+
277
+ By default, the gem uses the `v1` version of the APIs. You may want to use a different version:
278
+
279
+ ```ruby
280
+ # With an API key
281
+ client = Gemini.new(
282
+ credentials: {
283
+ service: 'generative-language-api',
284
+ api_key: ENV['GOOGLE_API_KEY'],
285
+ version: 'v1beta'
286
+ },
287
+ options: { model: 'gemini-pro', server_sent_events: true }
288
+ )
289
+
290
+ # With a Service Account Credentials File
291
+ client = Gemini.new(
292
+ credentials: {
293
+ service: 'vertex-ai-api',
294
+ file_path: 'google-credentials.json',
295
+ region: 'us-east4',
296
+ version: 'v1beta'
297
+ },
298
+ options: { model: 'gemini-pro', server_sent_events: true }
299
+ )
300
+
301
+ # With Application Default Credentials
302
+ client = Gemini.new(
303
+ credentials: {
304
+ service: 'vertex-ai-api',
305
+ region: 'us-east4',
306
+ version: 'v1beta'
307
+ },
308
+ options: { model: 'gemini-pro', server_sent_events: true }
309
+ )
310
+ ```
311
+
273
312
  ## Usage
274
313
 
275
314
  ### Client
@@ -876,6 +915,24 @@ result = client.request(
876
915
 
877
916
  ### Request Options
878
917
 
918
+ #### Adapter
919
+
920
+ To enable streaming, the gem uses [Faraday](https://github.com/lostisland/faraday) with the [Typhoeus](https://github.com/typhoeus/typhoeus) adapter by default.
921
+
922
+ You can use a different adapter if you want:
923
+
924
+ ```ruby
925
+ require 'faraday/net_http'
926
+
927
+ client = Gemini.new(
928
+ credentials: { service: 'vertex-ai-api', region: 'us-east4' },
929
+ options: {
930
+ model: 'gemini-pro',
931
+ connection: { adapter: :net_http }
932
+ }
933
+ )
934
+ ```
935
+
879
936
  #### Timeout
880
937
 
881
938
  You can set the maximum number of seconds to wait for the request to complete with the `timeout` option:
@@ -967,6 +1024,8 @@ RequestError
967
1024
  ```bash
968
1025
  bundle
969
1026
  rubocop -A
1027
+
1028
+ bundle exec ruby spec/tasks/run-client.rb
970
1029
  ```
971
1030
 
972
1031
  ### Purpose
@@ -980,7 +1039,7 @@ gem build gemini-ai.gemspec
980
1039
 
981
1040
  gem signin
982
1041
 
983
- gem push gemini-ai-3.1.2.gem
1042
+ gem push gemini-ai-3.2.0.gem
984
1043
  ```
985
1044
 
986
1045
  ### Updating the README
@@ -2,17 +2,28 @@
2
2
 
3
3
  require 'event_stream_parser'
4
4
  require 'faraday'
5
+ require 'faraday/typhoeus'
5
6
  require 'json'
6
7
  require 'googleauth'
7
8
 
8
- require_relative '../ports/dsl/gemini-ai/errors'
9
+ require_relative '../components/errors'
9
10
 
10
11
  module Gemini
11
12
  module Controllers
12
13
  class Client
13
14
  ALLOWED_REQUEST_OPTIONS = %i[timeout open_timeout read_timeout write_timeout].freeze
14
15
 
16
+ DEFAULT_FARADAY_ADAPTER = :typhoeus
17
+
18
+ DEFAULT_SERVICE_VERSION = 'v1'
19
+
15
20
  def initialize(config)
21
+ @service = config[:credentials][:service]
22
+
23
+ unless %w[vertex-ai-api generative-language-api].include?(@service)
24
+ raise Errors::UnsupportedServiceError, "Unsupported service: #{@service}"
25
+ end
26
+
16
27
  if config[:credentials][:api_key]
17
28
  @authentication = :api_key
18
29
  @api_key = config[:credentials][:api_key]
@@ -30,24 +41,24 @@ module Gemini
30
41
  if @authentication == :service_account || @authentication == :default_credentials
31
42
  @project_id = config[:credentials][:project_id] || @authorizer.project_id || @authorizer.quota_project_id
32
43
 
33
- raise MissingProjectIdError, 'Could not determine project_id, which is required.' if @project_id.nil?
44
+ raise Errors::MissingProjectIdError, 'Could not determine project_id, which is required.' if @project_id.nil?
34
45
  end
35
46
 
36
- @service = config[:credentials][:service]
47
+ @service_version = config.dig(:credentials, :version) || DEFAULT_SERVICE_VERSION
37
48
 
38
49
  @address = case @service
39
50
  when 'vertex-ai-api'
40
- "https://#{config[:credentials][:region]}-aiplatform.googleapis.com/v1/projects/#{@project_id}/locations/#{config[:credentials][:region]}/publishers/google/models/#{config[:options][:model]}"
51
+ "https://#{config[:credentials][:region]}-aiplatform.googleapis.com/#{@service_version}/projects/#{@project_id}/locations/#{config[:credentials][:region]}/publishers/google/models/#{config[:options][:model]}"
41
52
  when 'generative-language-api'
42
- "https://generativelanguage.googleapis.com/v1/models/#{config[:options][:model]}"
43
- else
44
- raise UnsupportedServiceError, "Unsupported service: #{@service}"
53
+ "https://generativelanguage.googleapis.com/#{@service_version}/models/#{config[:options][:model]}"
45
54
  end
46
55
 
47
56
  @server_sent_events = config.dig(:options, :server_sent_events)
48
57
 
49
58
  @request_options = config.dig(:options, :connection, :request)
50
59
 
60
+ @faraday_adapter = config.dig(:options, :connection, :adapter) || DEFAULT_FARADAY_ADAPTER
61
+
51
62
  @request_options = if @request_options.is_a?(Hash)
52
63
  @request_options.select do |key, _|
53
64
  ALLOWED_REQUEST_OPTIONS.include?(key)
@@ -80,13 +91,14 @@ module Gemini
80
91
  url += "?#{params.join('&')}" if params.size.positive?
81
92
 
82
93
  if !callback.nil? && !server_sent_events_enabled
83
- raise BlockWithoutServerSentEventsError,
94
+ raise Errors::BlockWithoutServerSentEventsError,
84
95
  'You are trying to use a block without Server Sent Events (SSE) enabled.'
85
96
  end
86
97
 
87
98
  results = []
88
99
 
89
100
  response = Faraday.new(request: @request_options) do |faraday|
101
+ faraday.adapter @faraday_adapter
90
102
  faraday.response :raise_error
91
103
  end.post do |request|
92
104
  request.url url
@@ -98,6 +110,9 @@ module Gemini
98
110
  request.body = payload.to_json
99
111
 
100
112
  if server_sent_events_enabled
113
+
114
+ partial_json = ''
115
+
101
116
  parser = EventStreamParser::Parser.new
102
117
 
103
118
  request.options.on_data = proc do |chunk, bytes, env|
@@ -107,20 +122,27 @@ module Gemini
107
122
  end
108
123
 
109
124
  parser.feed(chunk) do |type, data, id, reconnection_time|
110
- parsed_data = safe_parse_json(data)
111
- result = {
112
- event: safe_parse_json(data),
113
- parsed: { type:, data:, id:, reconnection_time: },
114
- raw: { chunk:, bytes:, env: }
115
- }
125
+ partial_json += data
126
+
127
+ parsed_json = safe_parse_json(partial_json)
128
+
129
+ if parsed_json
130
+ result = {
131
+ event: parsed_json,
132
+ parsed: { type:, data:, id:, reconnection_time: },
133
+ raw: { chunk:, bytes:, env: }
134
+ }
135
+
136
+ callback.call(result[:event], result[:parsed], result[:raw]) unless callback.nil?
116
137
 
117
- callback.call(result[:event], result[:parsed], result[:raw]) unless callback.nil?
138
+ results << result
118
139
 
119
- results << result
140
+ partial_json = ''
120
141
 
121
- if parsed_data['candidates']
122
- parsed_data['candidates'].find do |candidate|
123
- !candidate['finishReason'].nil? && candidate['finishReason'] != ''
142
+ if parsed_json['candidates']
143
+ parsed_json['candidates'].find do |candidate|
144
+ !candidate['finishReason'].nil? && candidate['finishReason'] != ''
145
+ end
124
146
  end
125
147
  end
126
148
  end
@@ -132,13 +154,13 @@ module Gemini
132
154
 
133
155
  results.map { |result| result[:event] }
134
156
  rescue Faraday::ServerError => e
135
- raise RequestError.new(e.message, request: e, payload:)
157
+ raise Errors::RequestError.new(e.message, request: e, payload:)
136
158
  end
137
159
 
138
160
  def safe_parse_json(raw)
139
- raw.start_with?('{', '[') ? JSON.parse(raw) : raw
161
+ raw.to_s.lstrip.start_with?('{', '[') ? JSON.parse(raw) : nil
140
162
  rescue JSON::ParserError
141
- raw
163
+ nil
142
164
  end
143
165
  end
144
166
  end
data/gemini-ai.gemspec CHANGED
@@ -30,8 +30,10 @@ Gem::Specification.new do |spec|
30
30
  spec.require_paths = ['ports/dsl']
31
31
 
32
32
  spec.add_dependency 'event_stream_parser', '~> 1.0'
33
- spec.add_dependency 'faraday', '~> 2.8', '>= 2.8.1'
33
+ spec.add_dependency 'faraday', '~> 2.9'
34
+ spec.add_dependency 'faraday-typhoeus', '~> 1.1'
34
35
  spec.add_dependency 'googleauth', '~> 1.8'
36
+ spec.add_dependency 'typhoeus', '~> 1.4', '>= 1.4.1'
35
37
 
36
38
  spec.metadata['rubygems_mfa_required'] = 'true'
37
39
  end
data/static/gem.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  module Gemini
4
4
  GEM = {
5
5
  name: 'gemini-ai',
6
- version: '3.1.2',
6
+ version: '3.2.0',
7
7
  author: 'gbaptista',
8
8
  summary: "Interact with Google's Gemini AI.",
9
9
  description: "A Ruby Gem for interacting with Gemini through Vertex AI, Generative Language API, or AI Studio, Google's generative AI services.",
data/template.md CHANGED
@@ -9,7 +9,7 @@ A Ruby Gem for interacting with [Gemini](https://deepmind.google/technologies/ge
9
9
  ## TL;DR and Quick Start
10
10
 
11
11
  ```ruby
12
- gem 'gemini-ai', '~> 3.1.2'
12
+ gem 'gemini-ai', '~> 3.2.0'
13
13
  ```
14
14
 
15
15
  ```ruby
@@ -77,11 +77,11 @@ Result:
77
77
  ### Installing
78
78
 
79
79
  ```sh
80
- gem install gemini-ai -v 3.1.2
80
+ gem install gemini-ai -v 3.2.0
81
81
  ```
82
82
 
83
83
  ```sh
84
- gem 'gemini-ai', '~> 3.1.2'
84
+ gem 'gemini-ai', '~> 3.2.0'
85
85
  ```
86
86
 
87
87
  ### Credentials
@@ -233,6 +233,43 @@ You might want to explicitly set a Google Cloud Project ID, which you can do as
233
233
  }
234
234
  ```
235
235
 
236
+ ### Custom Version
237
+
238
+ By default, the gem uses the `v1` version of the APIs. You may want to use a different version:
239
+
240
+ ```ruby
241
+ # With an API key
242
+ client = Gemini.new(
243
+ credentials: {
244
+ service: 'generative-language-api',
245
+ api_key: ENV['GOOGLE_API_KEY'],
246
+ version: 'v1beta'
247
+ },
248
+ options: { model: 'gemini-pro', server_sent_events: true }
249
+ )
250
+
251
+ # With a Service Account Credentials File
252
+ client = Gemini.new(
253
+ credentials: {
254
+ service: 'vertex-ai-api',
255
+ file_path: 'google-credentials.json',
256
+ region: 'us-east4',
257
+ version: 'v1beta'
258
+ },
259
+ options: { model: 'gemini-pro', server_sent_events: true }
260
+ )
261
+
262
+ # With Application Default Credentials
263
+ client = Gemini.new(
264
+ credentials: {
265
+ service: 'vertex-ai-api',
266
+ region: 'us-east4',
267
+ version: 'v1beta'
268
+ },
269
+ options: { model: 'gemini-pro', server_sent_events: true }
270
+ )
271
+ ```
272
+
236
273
  ## Usage
237
274
 
238
275
  ### Client
@@ -839,6 +876,24 @@ result = client.request(
839
876
 
840
877
  ### Request Options
841
878
 
879
+ #### Adapter
880
+
881
+ To enable streaming, the gem uses [Faraday](https://github.com/lostisland/faraday) with the [Typhoeus](https://github.com/typhoeus/typhoeus) adapter by default.
882
+
883
+ You can use a different adapter if you want:
884
+
885
+ ```ruby
886
+ require 'faraday/net_http'
887
+
888
+ client = Gemini.new(
889
+ credentials: { service: 'vertex-ai-api', region: 'us-east4' },
890
+ options: {
891
+ model: 'gemini-pro',
892
+ connection: { adapter: :net_http }
893
+ }
894
+ )
895
+ ```
896
+
842
897
  #### Timeout
843
898
 
844
899
  You can set the maximum number of seconds to wait for the request to complete with the `timeout` option:
@@ -930,6 +985,8 @@ RequestError
930
985
  ```bash
931
986
  bundle
932
987
  rubocop -A
988
+
989
+ bundle exec ruby spec/tasks/run-client.rb
933
990
  ```
934
991
 
935
992
  ### Purpose
@@ -943,7 +1000,7 @@ gem build gemini-ai.gemspec
943
1000
 
944
1001
  gem signin
945
1002
 
946
- gem push gemini-ai-3.1.2.gem
1003
+ gem push gemini-ai-3.2.0.gem
947
1004
  ```
948
1005
 
949
1006
  ### Updating the README
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gemini-ai
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.2
4
+ version: 3.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - gbaptista
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-01-06 00:00:00.000000000 Z
11
+ date: 2024-01-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: event_stream_parser
@@ -30,20 +30,28 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '2.8'
34
- - - ">="
35
- - !ruby/object:Gem::Version
36
- version: 2.8.1
33
+ version: '2.9'
37
34
  type: :runtime
38
35
  prerelease: false
39
36
  version_requirements: !ruby/object:Gem::Requirement
40
37
  requirements:
41
38
  - - "~>"
42
39
  - !ruby/object:Gem::Version
43
- version: '2.8'
44
- - - ">="
40
+ version: '2.9'
41
+ - !ruby/object:Gem::Dependency
42
+ name: faraday-typhoeus
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
45
46
  - !ruby/object:Gem::Version
46
- version: 2.8.1
47
+ version: '1.1'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.1'
47
55
  - !ruby/object:Gem::Dependency
48
56
  name: googleauth
49
57
  requirement: !ruby/object:Gem::Requirement
@@ -58,9 +66,29 @@ dependencies:
58
66
  - - "~>"
59
67
  - !ruby/object:Gem::Version
60
68
  version: '1.8'
69
+ - !ruby/object:Gem::Dependency
70
+ name: typhoeus
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.4'
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: 1.4.1
79
+ type: :runtime
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - "~>"
84
+ - !ruby/object:Gem::Version
85
+ version: '1.4'
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: 1.4.1
61
89
  description: A Ruby Gem for interacting with Gemini through Vertex AI, Generative
62
90
  Language API, or AI Studio, Google's generative AI services.
63
- email:
91
+ email:
64
92
  executables: []
65
93
  extensions: []
66
94
  extra_rdoc_files: []
@@ -88,7 +116,7 @@ metadata:
88
116
  homepage_uri: https://github.com/gbaptista/gemini-ai
89
117
  source_code_uri: https://github.com/gbaptista/gemini-ai
90
118
  rubygems_mfa_required: 'true'
91
- post_install_message:
119
+ post_install_message:
92
120
  rdoc_options: []
93
121
  require_paths:
94
122
  - ports/dsl
@@ -104,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
104
132
  version: '0'
105
133
  requirements: []
106
134
  rubygems_version: 3.3.3
107
- signing_key:
135
+ signing_key:
108
136
  specification_version: 4
109
137
  summary: Interact with Google's Gemini AI.
110
138
  test_files: []