gemini-ai 3.2.0 → 4.1.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.
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.2.0'
12
+ gem 'gemini-ai', '~> 4.1.0'
13
13
  ```
14
14
 
15
15
  ```ruby
@@ -34,6 +34,17 @@ client = Gemini.new(
34
34
  options: { model: 'gemini-pro', server_sent_events: true }
35
35
  )
36
36
 
37
+ # With the Service Account Credentials File contents
38
+ client = Gemini.new(
39
+ credentials: {
40
+ service: 'vertex-ai-api',
41
+ file_contents: File.read('google-credentials.json'),
42
+ # file_contents: ENV['GOOGLE_CREDENTIALS_FILE_CONTENTS'],
43
+ region: 'us-east4'
44
+ },
45
+ options: { model: 'gemini-pro', server_sent_events: true }
46
+ )
47
+
37
48
  # With Application Default Credentials
38
49
  client = Gemini.new(
39
50
  credentials: {
@@ -73,41 +84,51 @@ Result:
73
84
  - [TL;DR and Quick Start](#tldr-and-quick-start)
74
85
  - [Index](#index)
75
86
  - [Setup](#setup)
76
- - [Installing](#installing)
77
- - [Credentials](#credentials)
78
- - [Option 1: API Key (Generative Language API)](#option-1-api-key-generative-language-api)
79
- - [Option 2: Service Account Credentials File (Vertex AI API)](#option-2-service-account-credentials-file-vertex-ai-api)
80
- - [Option 3: Application Default Credentials (Vertex AI API)](#option-3-application-default-credentials-vertex-ai-api)
81
- - [Required Data](#required-data)
82
- - [Custom Version](#custom-version)
87
+ - [Installing](#installing)
88
+ - [Credentials](#credentials)
89
+ - [Option 1: API Key (Generative Language API)](#option-1-api-key-generative-language-api)
90
+ - [Option 2: Service Account Credentials File (Vertex AI API)](#option-2-service-account-credentials-file-vertex-ai-api)
91
+ - [Option 3: Application Default Credentials (Vertex AI API)](#option-3-application-default-credentials-vertex-ai-api)
92
+ - [Required Data](#required-data)
93
+ - [Custom Version](#custom-version)
94
+ - [Available Models](#available-models)
83
95
  - [Usage](#usage)
84
- - [Client](#client)
85
- - [Methods](#methods)
86
- - [stream_generate_content](#stream_generate_content)
87
- - [Receiving Stream Events](#receiving-stream-events)
88
- - [Without Events](#without-events)
89
- - [generate_content](#generate_content)
90
- - [Modes](#modes)
91
- - [Text](#text)
92
- - [Image](#image)
93
- - [Video](#video)
94
- - [Streaming vs. Server-Sent Events (SSE)](#streaming-vs-server-sent-events-sse)
95
- - [Server-Sent Events (SSE) Hang](#server-sent-events-sse-hang)
96
- - [Non-Streaming](#non-streaming)
97
- - [Back-and-Forth Conversations](#back-and-forth-conversations)
98
- - [Tools (Functions) Calling](#tools-functions-calling)
99
- - [New Functionalities and APIs](#new-functionalities-and-apis)
100
- - [Request Options](#request-options)
101
- - [Adapter](#adapter)
102
- - [Timeout](#timeout)
103
- - [Error Handling](#error-handling)
104
- - [Rescuing](#rescuing)
105
- - [For Short](#for-short)
106
- - [Errors](#errors)
96
+ - [Client](#client)
97
+ - [Methods](#methods)
98
+ - [Chat](#chat)
99
+ - [stream_generate_content](#stream_generate_content)
100
+ - [Receiving Stream Events](#receiving-stream-events)
101
+ - [Without Events](#without-events)
102
+ - [generate_content](#generate_content)
103
+ - [Embeddings](#embeddings)
104
+ - [predict](#predict)
105
+ - [embed_content](#embed_content)
106
+ - [Modes](#modes)
107
+ - [Text](#text)
108
+ - [Image](#image)
109
+ - [Video](#video)
110
+ - [Streaming vs. Server-Sent Events (SSE)](#streaming-vs-server-sent-events-sse)
111
+ - [Server-Sent Events (SSE) Hang](#server-sent-events-sse-hang)
112
+ - [Non-Streaming](#non-streaming)
113
+ - [Back-and-Forth Conversations](#back-and-forth-conversations)
114
+ - [Safety Settings](#safety-settings)
115
+ - [System Instructions](#system-instructions)
116
+ - [JSON Format Responses](#json-format-responses)
117
+ - [JSON Schema](#json-schema)
118
+ - [Models That Support JSON](#models-that-support-json)
119
+ - [Tools (Functions) Calling](#tools-functions-calling)
120
+ - [New Functionalities and APIs](#new-functionalities-and-apis)
121
+ - [Request Options](#request-options)
122
+ - [Adapter](#adapter)
123
+ - [Timeout](#timeout)
124
+ - [Error Handling](#error-handling)
125
+ - [Rescuing](#rescuing)
126
+ - [For Short](#for-short)
127
+ - [Errors](#errors)
107
128
  - [Development](#development)
108
- - [Purpose](#purpose)
109
- - [Publish to RubyGems](#publish-to-rubygems)
110
- - [Updating the README](#updating-the-readme)
129
+ - [Purpose](#purpose)
130
+ - [Publish to RubyGems](#publish-to-rubygems)
131
+ - [Updating the README](#updating-the-readme)
111
132
  - [Resources and References](#resources-and-references)
112
133
  - [Disclaimer](#disclaimer)
113
134
 
@@ -116,11 +137,11 @@ Result:
116
137
  ### Installing
117
138
 
118
139
  ```sh
119
- gem install gemini-ai -v 3.2.0
140
+ gem install gemini-ai -v 4.1.0
120
141
  ```
121
142
 
122
143
  ```sh
123
- gem 'gemini-ai', '~> 3.2.0'
144
+ gem 'gemini-ai', '~> 4.1.0'
124
145
  ```
125
146
 
126
147
  ### Credentials
@@ -202,7 +223,7 @@ Similar to [Option 2](#option-2-service-account-credentials-file-vertex-ai-api),
202
223
  For local development, you can generate your default credentials using the [gcloud CLI](https://cloud.google.com/sdk/gcloud) as follows:
203
224
 
204
225
  ```sh
205
- gcloud auth application-default login
226
+ gcloud auth application-default login
206
227
  ```
207
228
 
208
229
  For more details about alternative methods and different environments, check the official documentation:
@@ -240,6 +261,23 @@ Remember that hardcoding your API key in code is unsafe; it's preferable to use
240
261
  }
241
262
  ```
242
263
 
264
+ Alternatively, you can pass the file contents instead of the path:
265
+ ```ruby
266
+ {
267
+ service: 'vertex-ai-api',
268
+ file_contents: File.read('google-credentials.json'),
269
+ region: 'us-east4'
270
+ }
271
+ ```
272
+
273
+ ```ruby
274
+ {
275
+ service: 'vertex-ai-api',
276
+ file_contents: ENV['GOOGLE_CREDENTIALS_FILE_CONTENTS'],
277
+ region: 'us-east4'
278
+ }
279
+ ```
280
+
243
281
  **Option 3**: For _Application Default Credentials_, omit both the `api_key` and the `file_path`:
244
282
 
245
283
  ```ruby
@@ -298,6 +336,17 @@ client = Gemini.new(
298
336
  options: { model: 'gemini-pro', server_sent_events: true }
299
337
  )
300
338
 
339
+ # With the Service Account Credentials File contents
340
+ client = Gemini.new(
341
+ credentials: {
342
+ service: 'vertex-ai-api',
343
+ file_contents: File.read('google-credentials.json'),
344
+ # file_contents: ENV['GOOGLE_CREDENTIALS_FILE_CONTENTS'],
345
+ region: 'us-east4'
346
+ },
347
+ options: { model: 'gemini-pro', server_sent_events: true }
348
+ )
349
+
301
350
  # With Application Default Credentials
302
351
  client = Gemini.new(
303
352
  credentials: {
@@ -309,6 +358,48 @@ client = Gemini.new(
309
358
  )
310
359
  ```
311
360
 
361
+ ## Available Models
362
+
363
+ These models are accessible to the repository **author** as of June 2025 in the `us-east4` region. Access to models may vary by region, user, and account. All models here are expected to work, if you can access them. This is just a reference of what a "typical" user may expect to have access to right away:
364
+
365
+ | Model | Vertex AI | Generative Language |
366
+ |------------------------------------------|:---------:|:-------------------:|
367
+ | gemini-pro-vision | ✅ | 🔒 |
368
+ | gemini-pro | ✅ | ✅ |
369
+ | gemini-1.5-pro-preview-0514 | ✅ | 🔒 |
370
+ | gemini-1.5-pro-preview-0409 | ✅ | 🔒 |
371
+ | gemini-1.5-pro | ✅ | ✅ |
372
+ | gemini-1.5-flash-preview-0514 | ✅ | 🔒 |
373
+ | gemini-1.5-flash | ✅ | ✅ |
374
+ | gemini-1.0-pro-vision-latest | 🔒 | 🔒 |
375
+ | gemini-1.0-pro-vision-001 | ✅ | 🔒 |
376
+ | gemini-1.0-pro-vision | ✅ | 🔒 |
377
+ | gemini-1.0-pro-latest | 🔒 | ✅ |
378
+ | gemini-1.0-pro-002 | ✅ | 🔒 |
379
+ | gemini-1.0-pro-001 | ✅ | ✅ |
380
+ | gemini-1.0-pro | ✅ | ✅ |
381
+ | gemini-ultra | 🔒 | 🔒 |
382
+ | gemini-1.0-ultra | 🔒 | 🔒 |
383
+ | gemini-1.0-ultra-001 | 🔒 | 🔒 |
384
+ | text-embedding-preview-0514 | 🔒 | 🔒 |
385
+ | text-embedding-preview-0409 | 🔒 | 🔒 |
386
+ | text-embedding-004 | ✅ | ✅ |
387
+ | embedding-001 | 🔒 | ✅ |
388
+ | text-multilingual-embedding-002 | ✅ | 🔒 |
389
+ | textembedding-gecko-multilingual@001 | ✅ | 🔒 |
390
+ | textembedding-gecko-multilingual@latest | ✅ | 🔒 |
391
+ | textembedding-gecko@001 | ✅ | 🔒 |
392
+ | textembedding-gecko@002 | ✅ | 🔒 |
393
+ | textembedding-gecko@003 | ✅ | 🔒 |
394
+ | textembedding-gecko@latest | ✅ | 🔒 |
395
+
396
+ You can follow new models at:
397
+
398
+ - [Google models](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models)
399
+ - [Model versions and lifecycle](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versioning)
400
+
401
+ This is [the code](https://gist.github.com/gbaptista/d7390901293bce81ee12ff4ec5fed62c) used for generating this table that you can use to explore your own access.
402
+
312
403
  ## Usage
313
404
 
314
405
  ### Client
@@ -337,6 +428,17 @@ client = Gemini.new(
337
428
  options: { model: 'gemini-pro', server_sent_events: true }
338
429
  )
339
430
 
431
+ # With the Service Account Credentials File contents
432
+ client = Gemini.new(
433
+ credentials: {
434
+ service: 'vertex-ai-api',
435
+ file_contents: File.read('google-credentials.json'),
436
+ # file_contents: ENV['GOOGLE_CREDENTIALS_FILE_CONTENTS'],
437
+ region: 'us-east4'
438
+ },
439
+ options: { model: 'gemini-pro', server_sent_events: true }
440
+ )
441
+
340
442
  # With Application Default Credentials
341
443
  client = Gemini.new(
342
444
  credentials: {
@@ -349,9 +451,11 @@ client = Gemini.new(
349
451
 
350
452
  ### Methods
351
453
 
352
- #### stream_generate_content
454
+ #### Chat
353
455
 
354
- ##### Receiving Stream Events
456
+ ##### stream_generate_content
457
+
458
+ ###### Receiving Stream Events
355
459
 
356
460
  Ensure that you have enabled [Server-Sent Events](#streaming-vs-server-sent-events-sse) before using blocks for streaming:
357
461
 
@@ -383,7 +487,7 @@ Event:
383
487
  } }
384
488
  ```
385
489
 
386
- ##### Without Events
490
+ ###### Without Events
387
491
 
388
492
  You can use `stream_generate_content` without events:
389
493
 
@@ -423,7 +527,7 @@ result = client.stream_generate_content(
423
527
  end
424
528
  ```
425
529
 
426
- #### generate_content
530
+ ##### generate_content
427
531
 
428
532
  ```ruby
429
533
  result = client.generate_content(
@@ -452,6 +556,58 @@ Result:
452
556
 
453
557
  As of the writing of this README, only the `generative-language-api` service supports the `generate_content` method; `vertex-ai-api` does not.
454
558
 
559
+ #### Embeddings
560
+
561
+ ##### predict
562
+
563
+ Vertex AI API generates embeddings through the `predict` method ([documentation](https://cloud.google.com/vertex-ai/generative-ai/docs/embeddings/get-text-embeddings)), and you need a client set up to use an embedding model (e.g. `text-embedding-004`):
564
+
565
+ ```ruby
566
+ result = client.predict(
567
+ { instances: [{ content: 'What is life?' }],
568
+ parameters: { autoTruncate: true } }
569
+ )
570
+ ```
571
+
572
+ Result:
573
+ ```ruby
574
+ { 'predictions' =>
575
+ [{ 'embeddings' =>
576
+ { 'statistics' => { 'truncated' => false, 'token_count' => 4 },
577
+ 'values' =>
578
+ [-0.006861076690256596,
579
+ 0.00020840796059928834,
580
+ -0.028549950569868088,
581
+ # ...
582
+ 0.0020092015620321035,
583
+ 0.03279878571629524,
584
+ -0.014905261807143688] } }],
585
+ 'metadata' => { 'billableCharacterCount' => 11 } }
586
+ ```
587
+
588
+ ##### embed_content
589
+
590
+ Generative Language API generates embeddings through the `embed_content` method ([documentation](https://ai.google.dev/api/rest/v1/models/embedContent)), and you need a client set up to use an embedding model (e.g. `text-embedding-004`):
591
+
592
+ ```ruby
593
+ result = client.embed_content(
594
+ { content: { parts: [{ text: 'What is life?' }] } }
595
+ )
596
+ ```
597
+
598
+ Result:
599
+ ```ruby
600
+ { 'embedding' =>
601
+ { 'values' =>
602
+ [-0.0065307906,
603
+ -0.0001632607,
604
+ -0.028370803,
605
+
606
+ 0.0019950708,
607
+ 0.032798845,
608
+ -0.014878989] } }
609
+ ```
610
+
455
611
  ### Modes
456
612
 
457
613
  #### Text
@@ -757,6 +913,208 @@ Result:
757
913
  } }]
758
914
  ```
759
915
 
916
+ ### Safety Settings
917
+
918
+ You can [configure safety attributes](https://cloud.google.com/vertex-ai/generative-ai/docs/multimodal/configure-safety-attributes) for your requests.
919
+
920
+ Harm Categories:
921
+ > `HARM_CATEGORY_UNSPECIFIED`, `HARM_CATEGORY_HARASSMENT`, `HARM_CATEGORY_HATE_SPEECH`, `HARM_CATEGORY_SEXUALLY_EXPLICIT`, `HARM_CATEGORY_DANGEROUS_CONTENT`.
922
+
923
+ Thresholds:
924
+ > `BLOCK_NONE`, `BLOCK_ONLY_HIGH`, `BLOCK_MEDIUM_AND_ABOVE`, `BLOCK_LOW_AND_ABOVE`, `HARM_BLOCK_THRESHOLD_UNSPECIFIED`.
925
+
926
+ Example:
927
+ ```ruby
928
+ client.stream_generate_content(
929
+ {
930
+ contents: { role: 'user', parts: { text: 'hi!' } },
931
+ safetySettings: [
932
+ {
933
+ category: 'HARM_CATEGORY_UNSPECIFIED',
934
+ threshold: 'BLOCK_ONLY_HIGH'
935
+ },
936
+ {
937
+ category: 'HARM_CATEGORY_HARASSMENT',
938
+ threshold: 'BLOCK_ONLY_HIGH'
939
+ },
940
+ {
941
+ category: 'HARM_CATEGORY_HATE_SPEECH',
942
+ threshold: 'BLOCK_ONLY_HIGH'
943
+ },
944
+ {
945
+ category: 'HARM_CATEGORY_SEXUALLY_EXPLICIT',
946
+ threshold: 'BLOCK_ONLY_HIGH'
947
+ },
948
+ {
949
+ category: 'HARM_CATEGORY_DANGEROUS_CONTENT',
950
+ threshold: 'BLOCK_ONLY_HIGH'
951
+ }
952
+ ]
953
+ }
954
+ )
955
+ ```
956
+
957
+ Google started to block the usage of `BLOCK_NONE` unless:
958
+
959
+ > _User has requested a restricted HarmBlockThreshold setting BLOCK_NONE. You can get access either (a) through an allowlist via your Google account team, or (b) by switching your account type to monthly invoiced billing via this instruction: https://cloud.google.com/billing/docs/how-to/invoiced-billing_
960
+
961
+ ### System Instructions
962
+
963
+ Some models support [system instructions](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/prompts/system-instructions):
964
+
965
+ ```ruby
966
+ client.stream_generate_content(
967
+ { contents: { role: 'user', parts: { text: 'Hi! Who are you?' } },
968
+ system_instruction: { role: 'user', parts: { text: 'Your name is Neko.' } } }
969
+ )
970
+ ```
971
+
972
+ Output:
973
+ ```text
974
+ Hi! I'm Neko, a factual language model from Google AI.
975
+ ```
976
+
977
+ ```ruby
978
+ client.stream_generate_content(
979
+ { contents: { role: 'user', parts: { text: 'Hi! Who are you?' } },
980
+ system_instruction: {
981
+ role: 'user', parts: [
982
+ { text: 'You are a cat.' },
983
+ { text: 'Your name is Neko.' }
984
+ ]
985
+ } }
986
+ )
987
+ ```
988
+
989
+ Output:
990
+ ```text
991
+ Meow! I'm Neko, a fluffy and playful cat. :3
992
+ ```
993
+
994
+ ### JSON Format Responses
995
+
996
+ > _As of the writing of this README, only the `vertex-ai-api` service and `gemini` models version `1.5` support this feature._
997
+
998
+ The Gemini API provides a configuration parameter to [request a response in JSON](https://ai.google.dev/gemini-api/docs/api-overview#json) format:
999
+
1000
+ ```ruby
1001
+ require 'json'
1002
+
1003
+ result = client.stream_generate_content(
1004
+ {
1005
+ contents: {
1006
+ role: 'user',
1007
+ parts: {
1008
+ text: 'List 3 random colors.'
1009
+ }
1010
+ },
1011
+ generation_config: {
1012
+ response_mime_type: 'application/json'
1013
+ }
1014
+
1015
+ }
1016
+ )
1017
+
1018
+ json_string = result
1019
+ .map { |response| response.dig('candidates', 0, 'content', 'parts') }
1020
+ .map { |parts| parts.map { |part| part['text'] }.join }
1021
+ .join
1022
+
1023
+ puts JSON.parse(json_string).inspect
1024
+ ```
1025
+
1026
+ Output:
1027
+ ```ruby
1028
+ { 'colors' => ['Dark Salmon', 'Indigo', 'Lavender'] }
1029
+ ```
1030
+
1031
+ #### JSON Schema
1032
+
1033
+ > _While Gemini 1.5 Flash models only accept a text description of the JSON schema you want returned, the Gemini 1.5 Pro models let you pass a schema object (or a Python type equivalent), and the model output will strictly follow that schema. This is also known as controlled generation or constrained decoding._
1034
+
1035
+ You can also provide a [JSON Schema](https://json-schema.org) for the expected JSON output:
1036
+
1037
+ ```ruby
1038
+ require 'json'
1039
+
1040
+ result = client.stream_generate_content(
1041
+ {
1042
+ contents: {
1043
+ role: 'user',
1044
+ parts: {
1045
+ text: 'List 3 random colors.'
1046
+ }
1047
+ },
1048
+ generation_config: {
1049
+ response_mime_type: 'application/json',
1050
+ response_schema: {
1051
+ type: 'object',
1052
+ properties: {
1053
+ colors: {
1054
+ type: 'array',
1055
+ items: {
1056
+ type: 'object',
1057
+ properties: {
1058
+ name: {
1059
+ type: 'string'
1060
+ }
1061
+ }
1062
+ }
1063
+ }
1064
+ }
1065
+ }
1066
+ }
1067
+ }
1068
+ )
1069
+
1070
+ json_string = result
1071
+ .map { |response| response.dig('candidates', 0, 'content', 'parts') }
1072
+ .map { |parts| parts.map { |part| part['text'] }.join }
1073
+ .join
1074
+
1075
+ puts JSON.parse(json_string).inspect
1076
+ ```
1077
+
1078
+ Output:
1079
+
1080
+ ```ruby
1081
+ { 'colors' => [
1082
+ { 'name' => 'Lavender Blush' },
1083
+ { 'name' => 'Medium Turquoise' },
1084
+ { 'name' => 'Dark Slate Gray' }
1085
+ ] }
1086
+ ```
1087
+
1088
+ #### Models That Support JSON
1089
+
1090
+ These models are accessible to the repository **author** as of June 2025 in the `us-east4` region. Access to models may vary by region, user, and account.
1091
+
1092
+ - ❌ Does not support JSON mode.
1093
+ - 🟡 Supports JSON mode but not Schema.
1094
+ - ✅ Supports JSON mode and Schema.
1095
+ - 🔒 I don't have access to the model.
1096
+
1097
+ | Model | Vertex AI | Generative Language |
1098
+ |------------------------------------------|:---------:|:-------------------:|
1099
+ | gemini-pro-vision | ❌ | 🔒 |
1100
+ | gemini-pro | 🟡 | ❌ |
1101
+ | gemini-1.5-pro-preview-0514 | ✅ | 🔒 |
1102
+ | gemini-1.5-pro-preview-0409 | ✅ | 🔒 |
1103
+ | gemini-1.5-pro | ✅ | ❌ |
1104
+ | gemini-1.5-flash-preview-0514 | 🟡 | 🔒 |
1105
+ | gemini-1.5-flash | 🟡 | ❌ |
1106
+ | gemini-1.0-pro-vision-latest | 🔒 | 🔒 |
1107
+ | gemini-1.0-pro-vision-001 | ❌ | 🔒 |
1108
+ | gemini-1.0-pro-vision | ❌ | 🔒 |
1109
+ | gemini-1.0-pro-latest | 🔒 | ❌ |
1110
+ | gemini-1.0-pro-002 | 🟡 | 🔒 |
1111
+ | gemini-1.0-pro-001 | ❌ | ❌ |
1112
+ | gemini-1.0-pro | 🟡 | ❌ |
1113
+ | gemini-ultra | 🔒 | 🔒 |
1114
+ | gemini-1.0-ultra | 🔒 | 🔒 |
1115
+ | gemini-1.0-ultra-001 | 🔒 | 🔒 |
1116
+
1117
+
760
1118
  ### Tools (Functions) Calling
761
1119
 
762
1120
  > As of the writing of this README, only the `vertex-ai-api` service and the `gemini-pro` model [supports](https://cloud.google.com/vertex-ai/docs/generative-ai/multimodal/function-calling#supported_models) tools (functions) calls.
@@ -904,12 +1262,25 @@ Which will result in:
904
1262
 
905
1263
  ### New Functionalities and APIs
906
1264
 
907
- Google may launch a new endpoint that we haven't covered in the Gem yet. If that's the case, you may still be able to use it through the `request` method. For example, `stream_generate_content` is just a wrapper for `google/models/gemini-pro:streamGenerateContent`, which you can call directly like this:
1265
+ Google may launch a new endpoint that we haven't covered in the Gem yet. If that's the case, you may still be able to use it through the `request` method. For example, `stream_generate_content` is just a wrapper for `models/gemini-pro:streamGenerateContent` (Generative Language API) or `publishers/google/models/gemini-pro:streamGenerateContent` (Vertex AI API), which you can call directly like this:
908
1266
 
909
1267
  ```ruby
1268
+ # Generative Language API
910
1269
  result = client.request(
911
- 'streamGenerateContent',
912
- { contents: { role: 'user', parts: { text: 'hi!' } } }
1270
+ 'models/gemini-pro:streamGenerateContent',
1271
+ { contents: { role: 'user', parts: { text: 'hi!' } } },
1272
+ request_method: 'POST',
1273
+ server_sent_events: true
1274
+ )
1275
+ ```
1276
+
1277
+ ```ruby
1278
+ # Vertex AI API
1279
+ result = client.request(
1280
+ 'publishers/google/models/gemini-pro:streamGenerateContent',
1281
+ { contents: { role: 'user', parts: { text: 'hi!' } } },
1282
+ request_method: 'POST',
1283
+ server_sent_events: true
913
1284
  )
914
1285
  ```
915
1286
 
@@ -1014,6 +1385,7 @@ GeminiError
1014
1385
 
1015
1386
  MissingProjectIdError
1016
1387
  UnsupportedServiceError
1388
+ ConflictingCredentialsError
1017
1389
  BlockWithoutServerSentEventsError
1018
1390
 
1019
1391
  RequestError
@@ -1025,7 +1397,14 @@ RequestError
1025
1397
  bundle
1026
1398
  rubocop -A
1027
1399
 
1028
- bundle exec ruby spec/tasks/run-client.rb
1400
+ rspec
1401
+
1402
+ bundle exec ruby spec/tasks/run-available-models.rb
1403
+ bundle exec ruby spec/tasks/run-embed.rb
1404
+ bundle exec ruby spec/tasks/run-generate.rb
1405
+ bundle exec ruby spec/tasks/run-json.rb
1406
+ bundle exec ruby spec/tasks/run-safety.rb
1407
+ bundle exec ruby spec/tasks/run-system.rb
1029
1408
  ```
1030
1409
 
1031
1410
  ### Purpose
@@ -1039,7 +1418,7 @@ gem build gemini-ai.gemspec
1039
1418
 
1040
1419
  gem signin
1041
1420
 
1042
- gem push gemini-ai-3.2.0.gem
1421
+ gem push gemini-ai-4.1.0.gem
1043
1422
  ```
1044
1423
 
1045
1424
  ### Updating the README
@@ -1083,6 +1462,11 @@ These resources and references may be useful throughout your learning process.
1083
1462
  - [Gemini API Documentation](https://cloud.google.com/vertex-ai/docs/generative-ai/model-reference/gemini)
1084
1463
  - [Vertex AI API Documentation](https://cloud.google.com/vertex-ai/docs/reference)
1085
1464
  - [REST Documentation](https://cloud.google.com/vertex-ai/docs/reference/rest)
1465
+ - [Get text embeddings](https://cloud.google.com/vertex-ai/generative-ai/docs/embeddings/get-text-embeddings)
1466
+ - [Use system instructions](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/prompts/system-instructions)
1467
+ - [Configure safety attributes](https://cloud.google.com/vertex-ai/generative-ai/docs/multimodal/configure-safety-attributes)
1468
+ - [Google models](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models)
1469
+ - [Model versions and lifecycle](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versioning)
1086
1470
  - [Google DeepMind Gemini](https://deepmind.google/technologies/gemini/)
1087
1471
  - [Stream responses from Generative AI models](https://cloud.google.com/vertex-ai/docs/generative-ai/learn/streaming)
1088
1472
  - [Function calling](https://cloud.google.com/vertex-ai/docs/generative-ai/multimodal/function-calling)
data/components/errors.rb CHANGED
@@ -4,12 +4,13 @@ module Gemini
4
4
  module Errors
5
5
  class GeminiError < StandardError
6
6
  def initialize(message = nil)
7
- super(message)
7
+ super
8
8
  end
9
9
  end
10
10
 
11
11
  class MissingProjectIdError < GeminiError; end
12
12
  class UnsupportedServiceError < GeminiError; end
13
+ class ConflictingCredentialsError < GeminiError; end
13
14
  class BlockWithoutServerSentEventsError < GeminiError; end
14
15
 
15
16
  class RequestError < GeminiError