diff options
author | icebaker <icebaker@proton.me> | 2023-12-16 21:09:29 -0300 |
---|---|---|
committer | icebaker <icebaker@proton.me> | 2023-12-16 21:09:29 -0300 |
commit | 55a717a548375e7fed0b02fbd9d69aae167d98ec (patch) | |
tree | 1f9b121ca28db627d079ad488adca41bc2ddaaa3 /components/providers | |
parent | 3cfd5ee507ead55322cebe514b383ffc50c41728 (diff) |
improving repl experience
Diffstat (limited to 'components/providers')
-rw-r--r-- | components/providers/google.rb | 58 |
1 files changed, 23 insertions, 35 deletions
diff --git a/components/providers/google.rb b/components/providers/google.rb index a522d06..25ffbde 100644 --- a/components/providers/google.rb +++ b/components/providers/google.rb @@ -130,46 +130,34 @@ module NanoBot end end - begin - @client.stream_generate_content( - Logic::Google::Tokens.apply_policies!(cartridge, payload), - stream: true, &stream_call_back - ) - - if tools&.size&.positive? - feedback.call( - { should_be_stored: true, - needs_another_round: true, - interaction: { who: 'AI', message: nil, meta: { tool_calls: tools } } } - ) - Tools.apply( - cartridge, input[:tools], tools, feedback, Logic::Google::Tools - ).each do |interaction| - feedback.call({ should_be_stored: true, needs_another_round: true, interaction: }) - end - end + @client.stream_generate_content( + Logic::Google::Tokens.apply_policies!(cartridge, payload), + stream: true, &stream_call_back + ) + if tools&.size&.positive? feedback.call( - { should_be_stored: !(content.nil? || content == ''), - interaction: content.nil? || content == '' ? nil : { who: 'AI', message: content }, - finished: true } + { should_be_stored: true, + needs_another_round: true, + interaction: { who: 'AI', message: nil, meta: { tool_calls: tools } } } ) - rescue StandardError => e - raise e.class, e.response[:body] if e.response && e.response[:body] - - raise e + Tools.apply( + cartridge, input[:tools], tools, feedback, Logic::Google::Tools + ).each do |interaction| + feedback.call({ should_be_stored: true, needs_another_round: true, interaction: }) + end end - else - begin - result = @client.stream_generate_content( - Logic::Google::Tokens.apply_policies!(cartridge, payload), - stream: false - ) - rescue StandardError => e - raise e.class, e.response[:body] if e.response && e.response[:body] - raise e - end + feedback.call( + { should_be_stored: !(content.nil? || content == ''), + interaction: content.nil? || content == '' ? nil : { who: 'AI', message: content }, + finished: true } + ) + else + result = @client.stream_generate_content( + Logic::Google::Tokens.apply_policies!(cartridge, payload), + stream: false + ) tools = result.dig(0, 'candidates', 0, 'content', 'parts').filter do |part| part.key?('functionCall') |