nuntius-rb 1.0.0.pre → 1.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e94e856798181b8d99d873394ea2dacfcdfbe5ee04e10933dbf45145ee7f09b0
4
- data.tar.gz: e742055df4793f45133dc3116f0d8fb6f31b417fa361db28605b58d137c90ba6
3
+ metadata.gz: e0f5a8c8df36dd86149885936e553f180f4501b9f1e3a65c0ca8a5165f0f9bec
4
+ data.tar.gz: bc86749dc66129a851f2a32c4b066e2661c07473be5d099b90bf627360c30ad8
5
5
  SHA512:
6
- metadata.gz: f59b7bdcc9d294d42458499f701894c90d473a38bfd3866f54a883c670380263175951acf898464156b8e943ab083ea2160b5c600f27aefa89a11623e099cd72
7
- data.tar.gz: cf853e0af5eeb9352b3b697083a279a1c627c958aba7b7f33ad326745c3252ac64b838e2b5685871fa55ad2279b7ac0d274c24401a93efe02aba672fd97cabc8
6
+ metadata.gz: 200edf2400f1a649fe56b520f8b6168e636be63cbd34ab89f6678be3b4a10f24c40f840559d71b1b568c31667c5e94cd0afb5e51d987b12b597bc57167ea766a
7
+ data.tar.gz: ef8cba98917f75c53039ad9a5f719bfa8e567ed72d7aa26ea911eadc2d52d36971ce742f36e078f9f11d2eff07a2e6e9b90fa06f2a837dfc2b1c8da68f0ef1e7
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 vesper
3
+ Copyright (c) 2026 Palmshed
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,9 +1,8 @@
1
- # Vesper
2
- <img src="website/assets/readme-header.png" alt="Vesper" width="100%">
1
+ # Nuntius
2
+ <img src="website/assets/nuntius-header.png" alt="Nuntius" width="100%">
3
3
 
4
4
  <br>
5
5
 
6
- [![Gem](https://img.shields.io/gem/v/nuntius-rb?style=flat-square&label=gem)](https://rubygems.org/gems/nuntius-rb)
7
6
  ![Ruby](https://img.shields.io/badge/ruby-%3E%3D%203.3-cc342d?style=flat-square)
8
7
  [![License](https://img.shields.io/badge/license-MIT-2f4858?style=flat-square)](LICENSE)
9
8
  ![Tests](https://img.shields.io/badge/tests-passing-2e7d32?style=flat-square)
@@ -29,12 +28,12 @@ With Bundler:
29
28
  <br>
30
29
 
31
30
  ```ruby
32
- gem 'nuntius-rb', require: 'vesper'
31
+ gem 'nuntius-rb', require: 'nuntius'
33
32
  ```
34
33
 
35
34
  <br>
36
35
 
37
- The package is published as `nuntius-rb`. The runtime entrypoint is `vesper`.
36
+ The package is published as `nuntius-rb`. The runtime entrypoint is `nuntius`.
38
37
 
39
38
  <br>
40
39
 
@@ -62,10 +61,10 @@ GEMINI_API_KEY=your_api_key
62
61
  <br>
63
62
 
64
63
  ```ruby
65
- require 'vesper'
66
- GeminiAI.load_env
64
+ require 'nuntius'
65
+ Nuntius.load_env
67
66
 
68
- client = GeminiAI::Client.new
67
+ client = Nuntius::Client.new
69
68
  puts client.generate_text('Write a haiku about Ruby')
70
69
  ```
71
70
 
@@ -76,32 +75,31 @@ Use a different model when needed:
76
75
  <br>
77
76
 
78
77
  ```ruby
79
- fast_client = GeminiAI::Client.new(model: :flash)
78
+ fast_client = Nuntius::Client.new(model: :flash)
80
79
  puts fast_client.generate_text('Explain Ruby in one sentence')
81
80
  ```
82
81
 
83
82
  <br>
84
83
 
85
- # generateContent Text Models
84
+ # generateContent Text Models: Flash family (Free-Tier)
86
85
 
87
86
  <br>
88
87
 
89
88
  | Key | ID |
90
89
  | --- | --- |
91
90
  | `:flash_latest` | `gemini-flash-latest` |
92
- | `:pro_latest` | `gemini-pro-latest` |
91
+ | `:flash_3_7` | `gemini-3.7-flash` |
92
+ | `:flash_3_6` | `gemini-3.6-flash` |
93
93
  | `:flash_3_5` | `gemini-3.5-flash` |
94
- | `:pro_3_preview` | `gemini-3-pro-preview` |
94
+ | `:flash_3_5_lite` | `gemini-3.5-flash-lite` |
95
95
  | `:flash_3_preview` | `gemini-3-flash-preview` |
96
- | `:pro_3_1_preview` | `gemini-3.1-pro-preview` |
97
96
  | `:flash_3_1_lite` | `gemini-3.1-flash-lite` |
98
- | `:pro_2_5` | `gemini-2.5-pro` |
99
97
  | `:flash_2_5` | `gemini-2.5-flash` |
100
98
  | `:flash_2_0` | `gemini-2.0-flash` |
101
99
 
102
100
  <br>
103
101
 
104
- Short aliases: `:pro` uses `gemini-pro-latest`, `:flash` uses `gemini-3.5-flash`, and `:flash_lite` uses `gemini-3.1-flash-lite`. Legacy `:pro_2_0` maps to `gemini-2.0-flash`.
102
+ Short aliases: `:flash` uses `gemini-3.7-flash` (default), `:flash_fallback` uses `gemini-3.6-flash`, and `:flash_lite` uses `gemini-3.1-flash-lite`. Legacy `:pro_2_0` maps to `gemini-2.0-flash`. Pro models (`gemini-pro-latest`, `gemini-3.1-pro-preview`, `gemini-2.5-pro`) are retired for Free-Tier, as they resolve to the `3.1-pro` backend and hit quota `0`. Use billing to enable.
105
103
 
106
104
  <br>
107
105
 
@@ -113,7 +111,7 @@ The gem does not wrap embeddings, Imagen, or Veo APIs.
113
111
 
114
112
  <br>
115
113
 
116
- Vesper supports text generation, chat, image input for `generateContent`, model aliases, safety settings, API key masking, retries, and a local CLI.
114
+ Nuntius supports text generation, chat, image input for `generateContent`, model aliases, safety settings, API key masking, retries, and a local CLI.
117
115
 
118
116
  <br>
119
117
 
@@ -121,7 +119,7 @@ Vesper supports text generation, chat, image input for `generateContent`, model
121
119
 
122
120
  <br>
123
121
 
124
- Client validation and API failures raise `GeminiAI::Error` with a readable message.
122
+ Client validation and API failures raise `Nuntius::Error` with a readable message.
125
123
  HTTP 429 responses are retried automatically up to three times with exponential backoff.
126
124
 
127
125
  <br>
@@ -130,7 +128,7 @@ HTTP 429 responses are retried automatically up to three times with exponential
130
128
  begin
131
129
  response = client.generate_text('Hello')
132
130
  puts response
133
- rescue GeminiAI::Error => err
131
+ rescue Nuntius::Error => err
134
132
  warn "Generation failed: #{err.message}"
135
133
  end
136
134
  ```
@@ -170,10 +168,10 @@ Requests use a 30 second HTTParty timeout.
170
168
  <br>
171
169
 
172
170
  ```ruby
173
- require 'vesper'
171
+ require 'nuntius'
174
172
 
175
- GeminiAI::Client.logger.level = Logger::INFO
176
- client = GeminiAI::Client.new
173
+ Nuntius::Client.logger.level = Logger::INFO
174
+ client = Nuntius::Client.new
177
175
  ```
178
176
 
179
177
  <br>
@@ -224,11 +222,11 @@ gem build nuntius-rb.gemspec
224
222
 
225
223
  <br>
226
224
 
227
- Vesper Review is the PR review app in this repo. It defaults to `gemini-3.5-flash`; retrieval context is off unless enabled in `vesper/config.yaml`.
225
+ Nuntius Review is the PR review app in this repo. It defaults to `gemini-3.7-flash` (fallback `gemini-3.6-flash` for large diffs). Override with `NUNTIUS_GEMINI_MODEL`. Retrieval context is off unless enabled in `nuntius/config.yaml`. Only verified `generateContent` Flash models are listed as supported. See API `GET /v1beta/models` for existence, not quota.
228
226
 
229
227
  <br>
230
228
 
231
- For setup details, see [`vesper/Vesper.md`](vesper/Vesper.md).
229
+ For setup details, see [`nuntius/Nuntius.md`](nuntius/Nuntius.md).
232
230
 
233
231
  <br>
234
232
 
@@ -241,7 +239,7 @@ For setup details, see [`vesper/Vesper.md`](vesper/Vesper.md).
241
239
  <br>
242
240
 
243
241
  ```ruby
244
- client = GeminiAI::Client.new
242
+ client = Nuntius::Client.new
245
243
  puts client.generate_text('Write a haiku about Ruby')
246
244
  ```
247
245
 
@@ -305,11 +303,11 @@ MIT → see [`LICENSE`](LICENSE).
305
303
  <br>
306
304
 
307
305
  <p align="center">
308
- <a href="https://github.com/apps/vesper-review">
309
- <img src="website/favicon.svg" alt="Vesper Review app" width="96">
306
+ <a href="https://github.com/apps/nuntius-review">
307
+ <img src="website/favicon.svg" alt="Nuntius Review app" width="96">
310
308
  </a>
311
309
 
312
310
  <br>
313
311
 
314
- <a href="https://github.com/apps/vesper-review"><code>Vesper Review</code></a>
312
+ <a href="https://github.com/apps/nuntius-review"><code>Nuntius Review</code></a>
315
313
  </p>
data/lib/core/client.rb CHANGED
@@ -1,42 +1,68 @@
1
1
  # frozen_string_literal: true
2
2
  # SPDX-License-Identifier: MIT
3
- # Copyright (c) 2026 vesper
3
+ # Copyright (c) 2026 Palmshed
4
4
 
5
5
  require 'httparty'
6
6
  require 'json'
7
7
  require 'base64'
8
8
  require 'logger'
9
+ require 'yaml'
9
10
  require 'dotenv/load'
10
11
  require_relative 'errors'
11
12
  require_relative '../utils/moderation'
12
13
 
13
- module GeminiAI
14
+ module Nuntius
14
15
  # Core client class for Gemini AI API communication
15
16
  class Client
16
17
  BASE_URL = 'https://generativelanguage.googleapis.com/v1beta/models'
17
- # generateContent text model aliases.
18
+
19
+ # Canonical model source: config/models.yaml (repository-wide)
20
+ # This file is the single source of truth. Code must not duplicate model names.
21
+ CANONICAL_PATH = File.expand_path('../../config/models.yaml', __dir__)
22
+ CANONICAL = begin
23
+ if File.exist?(CANONICAL_PATH)
24
+ YAML.safe_load(File.read(CANONICAL_PATH)) || {}
25
+ else
26
+ {}
27
+ end
28
+ rescue StandardError
29
+ {}
30
+ end.freeze
31
+
32
+ CANONICAL_DEFAULT = (CANONICAL['default'] || 'gemini-3.7-flash').freeze
33
+ CANONICAL_FALLBACK = (CANONICAL['fallback'] || 'gemini-3.6-flash').freeze
34
+ CANONICAL_STABLE = (CANONICAL['stable_baseline'] || 'gemini-3.5-flash').freeze
35
+ CANONICAL_LIGHTWEIGHT = (CANONICAL['lightweight'] || ['gemini-3.1-flash-lite', 'gemini-3.5-flash-lite']).freeze
36
+ CANONICAL_LIGHT = CANONICAL_LIGHTWEIGHT.first || 'gemini-3.1-flash-lite'
37
+
38
+ # generateContent text model aliases: Flash family only (Free-Tier compatible).
39
+ # Values are derived from config/models.yaml. Do not hard-code elsewhere.
18
40
  MODELS = {
19
41
  flash_latest: 'gemini-flash-latest',
20
- pro_latest: 'gemini-pro-latest',
21
- flash_3_5: 'gemini-3.5-flash',
22
-
23
- pro_3_preview: 'gemini-3-pro-preview',
42
+ flash_3_7: CANONICAL_DEFAULT,
43
+ flash_3_6: CANONICAL_FALLBACK,
44
+ flash_3_5: CANONICAL_STABLE,
45
+ flash_3_5_lite: CANONICAL_LIGHTWEIGHT[1] || 'gemini-3.5-flash-lite',
24
46
  flash_3_preview: 'gemini-3-flash-preview',
25
- pro_3_1_preview: 'gemini-3.1-pro-preview',
26
- flash_3_1_lite: 'gemini-3.1-flash-lite',
27
- pro_2_5: 'gemini-2.5-pro',
47
+ flash_3_1_lite: CANONICAL_LIGHT,
28
48
  flash_2_5: 'gemini-2.5-flash',
29
49
  flash_2_0: 'gemini-2.0-flash',
30
50
 
31
- # Short aliases.
32
- pro: 'gemini-pro-latest',
33
- flash: 'gemini-3.5-flash',
34
- flash_lite: 'gemini-3.1-flash-lite',
35
- pro_2_0: 'gemini-2.0-flash'
51
+ # Short aliases: default Flash is 3.7, fallback 3.6.
52
+ flash: CANONICAL_DEFAULT,
53
+ flash_fallback: CANONICAL_FALLBACK,
54
+ flash_lite: CANONICAL_LIGHT,
55
+ pro_2_0: 'gemini-2.0-flash' # legacy alias, resolves to Flash (gemini-2.0-flash), keep for backward compat
36
56
  }.freeze
37
57
 
38
- # Deprecated models removed in this version (log warning and default to :pro)
58
+ # Deprecated/retired models: Pro family requires billing, not usable on Free-Tier.
59
+ # Kept for backward compat but warn and default to :flash (gemini-3.7-flash).
39
60
  DEPRECATED_MODELS = {
61
+ pro_latest: 'gemini-pro-latest',
62
+ pro: 'gemini-pro-latest',
63
+ pro_3_preview: 'gemini-3-pro-preview',
64
+ pro_3_1_preview: 'gemini-3.1-pro-preview',
65
+ pro_2_5: 'gemini-2.5-pro',
40
66
  pro_1_5: 'gemini-1.5-pro',
41
67
  flash_1_5: 'gemini-1.5-flash',
42
68
  flash_8b: 'gemini-1.5-flash-8b'
@@ -54,7 +80,7 @@ module GeminiAI
54
80
  end
55
81
  end
56
82
 
57
- def initialize(api_key = nil, model: :pro)
83
+ def initialize(api_key = nil, model: :flash)
58
84
  # Prioritize passed API key, then environment variable
59
85
  @api_key = api_key || ENV.fetch('GEMINI_API_KEY', nil)
60
86
 
@@ -110,8 +136,8 @@ module GeminiAI
110
136
  generationConfig: build_generation_config(options)
111
137
  }
112
138
 
113
- # Use the pro model for image-to-text tasks
114
- apply_moderation(send_request(request_body, model: :pro), options)
139
+ # Use the flash model for image-to-text tasks (Free-Tier compatible)
140
+ apply_moderation(send_request(request_body, model: :flash), options)
115
141
  end
116
142
 
117
143
  def chat(messages, options = {})
@@ -146,13 +172,13 @@ module GeminiAI
146
172
 
147
173
  def resolve_model(model)
148
174
  if DEPRECATED_MODELS.key?(model)
149
- self.class.logger.warn("Model #{model} (#{DEPRECATED_MODELS[model]}) is deprecated and has been removed. " \
150
- 'Defaulting to :pro (gemini-pro-latest). Please update your code to use supported models.')
151
- MODELS[:pro]
175
+ self.class.logger.warn("Model #{model} (#{DEPRECATED_MODELS[model]}) is deprecated/retired (Pro requires billing). " \
176
+ "Defaulting to :flash (#{CANONICAL_DEFAULT}). Please update your code to use Flash models.")
177
+ MODELS[:flash]
152
178
  else
153
179
  MODELS.fetch(model) do
154
- self.class.logger.warn("Invalid model: #{model}, defaulting to pro")
155
- MODELS[:pro]
180
+ self.class.logger.warn("Invalid model: #{model}, defaulting to flash")
181
+ MODELS[:flash]
156
182
  end
157
183
  end
158
184
  end
@@ -176,8 +202,7 @@ module GeminiAI
176
202
  end
177
203
 
178
204
  def valid_api_key_format?(key)
179
- # Strict format check: starts with 'AIza', reasonable length
180
- key =~ /^AIza[a-zA-Z0-9_-]{35,}$/
205
+ key.length >= 30
181
206
  end
182
207
 
183
208
  def validate_prompt!(prompt)
@@ -205,7 +230,7 @@ module GeminiAI
205
230
  # Rate limiting - ensure minimum interval between requests
206
231
  rate_limit_delay
207
232
 
208
- current_model = model ? MODELS.fetch(model) { MODELS[:pro] } : @model
233
+ current_model = model ? MODELS.fetch(model) { MODELS[:flash] } : @model
209
234
  url = "#{BASE_URL}/#{current_model}:generateContent?key=#{@api_key}"
210
235
 
211
236
  # Log URL with masked API key for security
@@ -219,7 +244,7 @@ module GeminiAI
219
244
  body: body.to_json,
220
245
  headers: {
221
246
  'Content-Type' => 'application/json',
222
- 'x-goog-api-client' => 'vesper_ruby_gem/0.1.0'
247
+ 'x-goog-api-client' => 'nuntius_ruby_gem/0.1.0'
223
248
  },
224
249
  timeout: 30
225
250
  )
data/lib/core/errors.rb CHANGED
@@ -1,10 +1,10 @@
1
1
  # SPDX-License-Identifier: MIT
2
- # Copyright (c) 2026 vesper
2
+ # Copyright (c) 2026 Palmshed
3
3
 
4
4
  # frozen_string_literal: true
5
5
 
6
- module GeminiAI
7
- # Base error class for all GeminiAI related errors
6
+ module Nuntius
7
+ # Base error class for all Nuntius related errors
8
8
  class Error < StandardError; end
9
9
 
10
10
  # API related errors
data/lib/core/version.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  # SPDX-License-Identifier: MIT
2
- # Copyright (c) 2026 vesper
2
+ # Copyright (c) 2026 Palmshed
3
3
 
4
4
  # frozen_string_literal: true
5
5
 
6
- module GeminiAI
7
- VERSION = '1.0.0.pre'
6
+ module Nuntius
7
+ VERSION = '1.0.0'
8
8
  end
@@ -1,18 +1,18 @@
1
1
  # SPDX-License-Identifier: MIT
2
- # Copyright (c) 2026 vesper
2
+ # Copyright (c) 2026 Palmshed
3
3
 
4
4
  # frozen_string_literal: true
5
5
 
6
- # Main entry point for the GeminiAI gem
6
+ # Main entry point for the Nuntius gem
7
7
  require_relative 'core/version'
8
8
  require_relative 'core/errors'
9
9
  require_relative 'core/client'
10
10
  require_relative 'utils/loader'
11
11
  require_relative 'utils/logger'
12
12
 
13
- module GeminiAI
14
- # Convenience method to create a new client
15
- def self.new(api_key = nil, model: :pro)
13
+ module Nuntius
14
+ # Convenience method to create a new client: default is Flash (3.7) for Free-Tier
15
+ def self.new(api_key = nil, model: :flash)
16
16
  Client.new(api_key, model: model)
17
17
  end
18
18
 
data/lib/utils/loader.rb CHANGED
@@ -1,9 +1,9 @@
1
1
  # SPDX-License-Identifier: MIT
2
- # Copyright (c) 2026 vesper
2
+ # Copyright (c) 2026 Palmshed
3
3
 
4
4
  # frozen_string_literal: true
5
5
 
6
- module GeminiAI
6
+ module Nuntius
7
7
  module Utils
8
8
  # Utility class for loading environment variables from .env files
9
9
  class Loader
data/lib/utils/logger.rb CHANGED
@@ -1,11 +1,11 @@
1
1
  # SPDX-License-Identifier: MIT
2
- # Copyright (c) 2026 vesper
2
+ # Copyright (c) 2026 Palmshed
3
3
 
4
4
  # frozen_string_literal: true
5
5
 
6
6
  require 'logger'
7
7
 
8
- module GeminiAI
8
+ module Nuntius
9
9
  module Utils
10
10
  # Centralized logging utility
11
11
  class Logger
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module GeminiAI
3
+ module Nuntius
4
4
  module Utils
5
5
  # Content moderation utility for filtering potentially harmful or inappropriate content
6
6
  class Moderation
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nuntius-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.pre
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Niladri Das
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2026-06-23 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: httparty
@@ -51,13 +50,27 @@ dependencies:
51
50
  - - "~>"
52
51
  - !ruby/object:Gem::Version
53
52
  version: '3.2'
54
- type: :development
53
+ type: :runtime
55
54
  prerelease: false
56
55
  version_requirements: !ruby/object:Gem::Requirement
57
56
  requirements:
58
57
  - - "~>"
59
58
  - !ruby/object:Gem::Version
60
59
  version: '3.2'
60
+ - !ruby/object:Gem::Dependency
61
+ name: base64
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ type: :runtime
68
+ prerelease: false
69
+ version_requirements: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
61
74
  - !ruby/object:Gem::Dependency
62
75
  name: minitest
63
76
  requirement: !ruby/object:Gem::Requirement
@@ -134,28 +147,28 @@ dependencies:
134
147
  requirements:
135
148
  - - "~>"
136
149
  - !ruby/object:Gem::Version
137
- version: 1.87.0
150
+ version: 1.89.0
138
151
  type: :development
139
152
  prerelease: false
140
153
  version_requirements: !ruby/object:Gem::Requirement
141
154
  requirements:
142
155
  - - "~>"
143
156
  - !ruby/object:Gem::Version
144
- version: 1.87.0
157
+ version: 1.89.0
145
158
  - !ruby/object:Gem::Dependency
146
159
  name: rubocop-minitest
147
160
  requirement: !ruby/object:Gem::Requirement
148
161
  requirements:
149
162
  - - "~>"
150
163
  - !ruby/object:Gem::Version
151
- version: 0.39.1
164
+ version: 0.40.0
152
165
  type: :development
153
166
  prerelease: false
154
167
  version_requirements: !ruby/object:Gem::Requirement
155
168
  requirements:
156
169
  - - "~>"
157
170
  - !ruby/object:Gem::Version
158
- version: 0.39.1
171
+ version: 0.40.0
159
172
  - !ruby/object:Gem::Dependency
160
173
  name: rubocop-rake
161
174
  requirement: !ruby/object:Gem::Requirement
@@ -182,19 +195,15 @@ files:
182
195
  - lib/core/client.rb
183
196
  - lib/core/errors.rb
184
197
  - lib/core/version.rb
185
- - lib/gemini.rb
186
- - lib/mac/README.md
187
- - lib/mac/mac_utils.rb
198
+ - lib/nuntius.rb
188
199
  - lib/utils/loader.rb
189
200
  - lib/utils/logger.rb
190
201
  - lib/utils/moderation.rb
191
- - lib/vesper.rb
192
- homepage: https://github.com/bniladridas/vesper
202
+ homepage: https://github.com/palmshed/nuntius
193
203
  licenses:
194
204
  - MIT
195
205
  metadata:
196
206
  rubygems_mfa_required: 'true'
197
- post_install_message:
198
207
  rdoc_options: []
199
208
  require_paths:
200
209
  - lib
@@ -205,12 +214,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
205
214
  version: 3.3.0
206
215
  required_rubygems_version: !ruby/object:Gem::Requirement
207
216
  requirements:
208
- - - ">"
217
+ - - ">="
209
218
  - !ruby/object:Gem::Version
210
- version: 1.3.1
219
+ version: '0'
211
220
  requirements: []
212
- rubygems_version: 3.0.3.1
213
- signing_key:
221
+ rubygems_version: 4.0.16
214
222
  specification_version: 4
215
223
  summary: A Ruby gem for interacting with Google's Gemini AI models
216
224
  test_files: []
data/lib/mac/README.md DELETED
@@ -1,39 +0,0 @@
1
- # Mac Utils
2
-
3
- <br>
4
-
5
- This module provides macOS-specific utilities for the vesper gem.
6
-
7
- <br>
8
-
9
- # Methods
10
-
11
- <br>
12
-
13
- # `GeminiAI::MacUtils.mac?`
14
-
15
- <br>
16
-
17
- Returns `true` if the current platform is macOS (Darwin), `false` otherwise.
18
-
19
- <br>
20
-
21
- # `GeminiAI::MacUtils.version`
22
-
23
- <br>
24
-
25
- Returns the macOS version string (e.g., "14.1") if running on macOS, `nil` otherwise.
26
-
27
- <br>
28
-
29
- # Usage
30
-
31
- <br>
32
-
33
- ```ruby
34
- require 'mac/mac_utils'
35
-
36
- if GeminiAI::MacUtils.mac?
37
- puts "Running on macOS version #{GeminiAI::MacUtils.version}"
38
- end
39
- ```
data/lib/mac/mac_utils.rb DELETED
@@ -1,15 +0,0 @@
1
- # SPDX-License-Identifier: MIT
2
- # Copyright (c) 2026 vesper
3
-
4
- module GeminiAI
5
- module MacUtils
6
- def self.mac?
7
- require 'rbconfig'
8
- RbConfig::CONFIG['host_os'] =~ /darwin/
9
- end
10
-
11
- def self.version
12
- `/usr/bin/sw_vers -productVersion`.strip if mac?
13
- end
14
- end
15
- end
data/lib/vesper.rb DELETED
@@ -1,7 +0,0 @@
1
- # SPDX-License-Identifier: MIT
2
- # Copyright (c) 2026 vesper
3
-
4
- # frozen_string_literal: true
5
-
6
- # Main entry point for the vesper gem
7
- require_relative 'gemini'