geminai 1.0.0 → 1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 182008113410d8953e5d9dbb32d0b3d31e400f0b64dc6de753bd2b0a0ecd0e3b
4
- data.tar.gz: 5e4f6e4c304a109ec19e1bb00e98d7c60cd27b3f9c36d88fd51721aef9f424a2
3
+ metadata.gz: 87a7d8da785e91c6871f9f108570fb01f3165530ec932629776b9e61e7bc994f
4
+ data.tar.gz: 90235d17777b4c869e5523171c8deeaf961b9727a9204f76caefe594f93ff24e
5
5
  SHA512:
6
- metadata.gz: f1c57d71925d784ff071a79f207b2f5fff3615774929b39a1dced79408c05dbb2bebbc561edc1a6b7b725d394bd9082c0590184ffe131b118d8d6c8edd02143d
7
- data.tar.gz: bb3cf7288bfba9404ea343f75f931ba31b75154a17db76d435703d09acc989eaf7b586d39a8e22f7c5458ac2ebbcde3ad9144701e5a2074100366849b6001e29
6
+ metadata.gz: 3baba4a0640a4e1d30300e502b01bf2edfa1797230c39c72615b706b107eb1f22d4018b7a15ad766c85b6bce852e92beaa84cd2df43d577a05c5791cf6704fb3
7
+ data.tar.gz: f0659f0c2a44b6b6115b7114020c82b72560ce0882382a5bb6b8ad5efc2f2229ff2f26b4f183bcb06827411f859771f270d91ff330214cfc8fe280f9b7d4b26f
@@ -42,6 +42,16 @@ module Geminai
42
42
  body[:response_format][:image_size] = options.delete(:image_size) if options.key?(:image_size)
43
43
  end
44
44
 
45
+ # Handle schema shortcut option
46
+ schema = options.delete(:schema)
47
+ if schema
48
+ body[:response_format] = {
49
+ type: "text",
50
+ mime_type: "application/json",
51
+ schema: SchemaBuilder.build(schema)
52
+ }
53
+ end
54
+
45
55
  if (voice = options.delete(:voice))
46
56
  body[:generation_config] = {speech_config: [{voice: voice}]}
47
57
  end
@@ -0,0 +1,49 @@
1
+ module Geminai
2
+ module SchemaBuilder
3
+ def self.build(schema)
4
+ case schema
5
+ when Symbol, String
6
+ { type: normalize_type(schema) }
7
+ when Array
8
+ { type: "array", items: build(schema.first) }
9
+ when Hash
10
+ if schema.key?(:type) || schema.key?("type")
11
+ normalized = schema.transform_keys(&:to_sym)
12
+ normalized[:properties] = normalized[:properties].transform_values { |v| build(v) } if normalized[:properties]
13
+ normalized[:items] = build(normalized[:items]) if normalized[:items]
14
+ normalized
15
+ else
16
+ properties = {}
17
+ required = []
18
+ schema.each do |key, val|
19
+ properties[key] = build(val)
20
+ required << key.to_s
21
+ end
22
+ {
23
+ type: "object",
24
+ properties: properties,
25
+ required: required
26
+ }
27
+ end
28
+ else
29
+ raise ArgumentError, "Unsupported schema format: #{schema.inspect}"
30
+ end
31
+ end
32
+
33
+ def self.normalize_type(type)
34
+ type = type.to_s.downcase
35
+ case type
36
+ when "str", "string"
37
+ "string"
38
+ when "int", "integer"
39
+ "integer"
40
+ when "float", "number"
41
+ "number"
42
+ when "bool", "boolean"
43
+ "boolean"
44
+ else
45
+ type
46
+ end
47
+ end
48
+ end
49
+ end
@@ -1,3 +1,3 @@
1
1
  module Geminai
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
data/lib/geminai.rb CHANGED
@@ -3,6 +3,7 @@ require_relative "geminai/step"
3
3
  require_relative "geminai/grounding_metadata"
4
4
  require_relative "geminai/interaction"
5
5
  require_relative "geminai/client"
6
+ require_relative "geminai/schema_builder"
6
7
 
7
8
  module Geminai
8
9
  # Helper to construct a client
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geminai
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - swlkr
@@ -20,6 +20,7 @@ files:
20
20
  - lib/geminai/client.rb
21
21
  - lib/geminai/grounding_metadata.rb
22
22
  - lib/geminai/interaction.rb
23
+ - lib/geminai/schema_builder.rb
23
24
  - lib/geminai/step.rb
24
25
  - lib/geminai/version.rb
25
26
  homepage: https://github.com/swlkr/geminai