omniai-google 1.4.0 → 1.5.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: 1dc0ec04a882a2e35a5d7ff7b613bde89641e57a67ed4a68cdb84ab72d04a982
4
- data.tar.gz: a72573e3a57e13b6bf56e33c4133ea4a9ae0c4c3d79688979a8f166345508a6f
3
+ metadata.gz: 5654724585620a00d0254e9eb55a80eccae2bc0d58e13bd44cc10d4ccfd3abd4
4
+ data.tar.gz: 3253d076f87054ed57ae84279f83b8dcb06493b504ffecf4fde5ba9d2d0150e0
5
5
  SHA512:
6
- metadata.gz: 3cd82fccac3f31b37f9505569ff411d91c9c2a9429fde7308c7b5b34abe922bd4734613f355ed616ff27ff49502c17714d380d0676a2f6f63493fa4baf65c0bc
7
- data.tar.gz: c1ac419641eebf177c72a425ac695e5fad10d09cd943998c5952d29ace751234a135eeb009e3000db47869de07db675bbadcddec6cd225ce851641635ffc2550
6
+ metadata.gz: 28b889a214a03e16478a0ad57856e53faabc28e007b75c165723136110aba6dcca2ffb3ba31a4244b4294922a44e14639d570d2a011131ec8a2a4df0fc923a6e
7
+ data.tar.gz: 0ac2802328f1acda7739039f9365fd2eaecd78a11255dee060b853481c7e85e517060080dfcfbf943eb4088bd92efed9a5252d17d8f54750f80e6189106d4abd
data/Gemfile CHANGED
@@ -5,7 +5,6 @@ source 'https://rubygems.org'
5
5
  gemspec
6
6
 
7
7
  gem 'rake'
8
-
9
8
  gem 'rspec'
10
9
  gem 'rspec_junit_formatter'
11
10
  gem 'rubocop'
@@ -13,3 +12,4 @@ gem 'rubocop-rake'
13
12
  gem 'rubocop-rspec'
14
13
  gem 'simplecov'
15
14
  gem 'webmock'
15
+ gem 'yard'
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OmniAI
4
+ module Google
5
+ class Chat
6
+ module Response
7
+ # A chunk given when streaming.
8
+ class Chunk < OmniAI::Chat::Response::Chunk
9
+ # @return [Array<OmniAI::Chat::Choice>]
10
+ def choices
11
+ @choices ||= [].tap do |choices|
12
+ @data['candidates'].each do |candidate|
13
+ candidate['content']['parts'].each do |part|
14
+ choices << OmniAI::Chat::Response::DeltaChoice.new(data: {
15
+ 'index' => candidate['index'],
16
+ 'delta' => {
17
+ 'role' => candidate['content']['role'],
18
+ 'content' => part['text'],
19
+ },
20
+ })
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OmniAI
4
+ module Google
5
+ class Chat
6
+ module Response
7
+ # A completion returned by the API.
8
+ class Completion < OmniAI::Chat::Response::Completion
9
+ # @return [Array<OmniAI::Chat::Choice>]
10
+ def choices
11
+ @choices ||= [].tap do |entries|
12
+ @data['candidates'].each do |candidate|
13
+ candidate['content']['parts'].each do |part|
14
+ entries << OmniAI::Chat::Response::MessageChoice.new(data: {
15
+ 'index' => candidate['index'],
16
+ 'message' => {
17
+ 'role' => candidate['content']['role'],
18
+ 'content' => part['text'],
19
+ },
20
+ })
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OmniAI
4
+ module Google
5
+ class Chat
6
+ module Response
7
+ # A stream given when streaming.
8
+ class Stream < OmniAI::Chat::Response::Stream
9
+ # @yield [OmniAI::Chat::Chunk]
10
+ def stream!(&)
11
+ @response.body.each do |chunk|
12
+ @parser.feed(chunk) do |_, data|
13
+ yield(Chunk.new(data: JSON.parse(data)))
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -40,10 +40,20 @@ module OmniAI
40
40
  def payload
41
41
  OmniAI::Google.config.chat_options.merge({
42
42
  contents:,
43
+ tools:,
43
44
  generationConfig: generation_config,
44
45
  }).compact
45
46
  end
46
47
 
48
+ # @return [Hash]
49
+ def tools
50
+ return unless @tools
51
+
52
+ [
53
+ function_declarations: @tools&.map(&:prepare),
54
+ ]
55
+ end
56
+
47
57
  # @return [Hash]
48
58
  def generation_config
49
59
  return unless @temperature
@@ -50,10 +50,11 @@ module OmniAI
50
50
  # @param format [Symbol] optional :text or :json
51
51
  # @param temperature [Float, nil] optional
52
52
  # @param stream [Proc, nil] optional
53
+ # @param tools [Array<OmniAI::Chat::Tool>, nil] optional
53
54
  #
54
55
  # @return [OmniAI::Chat::Completion]
55
- def chat(messages, model: Chat::Model::GEMINI_PRO, temperature: nil, format: nil, stream: nil)
56
- Chat.process!(messages, model:, temperature:, format:, stream:, client: self)
56
+ def chat(messages, model: Chat::Model::GEMINI_PRO, temperature: nil, format: nil, stream: nil, tools: nil)
57
+ Chat.process!(messages, model:, temperature:, format:, stream:, tools:, client: self)
57
58
  end
58
59
  end
59
60
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module OmniAI
4
4
  module Google
5
- VERSION = '1.4.0'
5
+ VERSION = '1.5.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omniai-google
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Sylvestre
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-07-04 00:00:00.000000000 Z
11
+ date: 2024-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: event_stream_parser
@@ -63,9 +63,9 @@ files:
63
63
  - README.md
64
64
  - lib/omniai/google.rb
65
65
  - lib/omniai/google/chat.rb
66
- - lib/omniai/google/chat/chunk.rb
67
- - lib/omniai/google/chat/completion.rb
68
- - lib/omniai/google/chat/stream.rb
66
+ - lib/omniai/google/chat/response/chunk.rb
67
+ - lib/omniai/google/chat/response/completion.rb
68
+ - lib/omniai/google/chat/response/stream.rb
69
69
  - lib/omniai/google/client.rb
70
70
  - lib/omniai/google/config.rb
71
71
  - lib/omniai/google/version.rb
@@ -91,7 +91,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
91
  - !ruby/object:Gem::Version
92
92
  version: '0'
93
93
  requirements: []
94
- rubygems_version: 3.5.3
94
+ rubygems_version: 3.5.14
95
95
  signing_key:
96
96
  specification_version: 4
97
97
  summary: A generalized framework for interacting with Google
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module OmniAI
4
- module Google
5
- class Chat
6
- # A chunk given when streaming.
7
- class Chunk < OmniAI::Chat::Chunk
8
- # @return [Array<OmniAI::Chat::Choice>]
9
- def choices
10
- @choices ||= [].tap do |choices|
11
- @data['candidates'].each do |candidate|
12
- candidate['content']['parts'].each do |part|
13
- choices << OmniAI::Chat::DeltaChoice.for(data: {
14
- 'index' => candidate['index'],
15
- 'delta' => { 'role' => candidate['content']['role'], 'content' => part['text'] },
16
- })
17
- end
18
- end
19
- end
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module OmniAI
4
- module Google
5
- class Chat
6
- # A completion returned by the API.
7
- class Completion < OmniAI::Chat::Completion
8
- # @return [Array<OmniAI::Chat::Choice>]
9
- def choices
10
- @choices ||= [].tap do |entries|
11
- @data['candidates'].each do |candidate|
12
- candidate['content']['parts'].each do |part|
13
- entries << OmniAI::Chat::MessageChoice.for(data: {
14
- 'index' => candidate['index'],
15
- 'message' => { 'role' => candidate['content']['role'], 'content' => part['text'] },
16
- })
17
- end
18
- end
19
- end
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module OmniAI
4
- module Google
5
- class Chat
6
- # A stream given when streaming.
7
- class Stream < OmniAI::Chat::Stream
8
- # @yield [OmniAI::Chat::Chunk]
9
- def stream!(&)
10
- @response.body.each do |chunk|
11
- @parser.feed(chunk) do |_, data|
12
- yield(Chunk.new(data: JSON.parse(data)))
13
- end
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end