diff options
author | icebaker <113217272+icebaker@users.noreply.github.com> | 2023-12-15 08:35:09 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-15 08:35:09 -0300 |
commit | f3200fe0448044ebf43fb52f40a47bc648082c56 (patch) | |
tree | 6a5db83f9210a15b4e57516791d23f353b27f7a3 /components/providers/openai.rb | |
parent | fb96658a1ca4b6e3e0505e7a39f660e1a05b3c6e (diff) | |
parent | 639fcc2da50333da00fe50a0970fe28b4e5e9908 (diff) |
Merge pull request #9 from icebaker/ib-gemini
Adding support for Google Gemini
Diffstat (limited to 'components/providers/openai.rb')
-rw-r--r-- | components/providers/openai.rb | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/components/providers/openai.rb b/components/providers/openai.rb index 6384181..f6eafd4 100644 --- a/components/providers/openai.rb +++ b/components/providers/openai.rb @@ -6,9 +6,9 @@ require_relative 'base' require_relative '../crypto' require_relative '../../logic/providers/openai/tools' -require_relative '../../controllers/interfaces/tools' +require_relative '../../logic/providers/openai/tokens' -require_relative 'openai/tools' +require_relative 'tools' module NanoBot module Components @@ -18,7 +18,7 @@ module NanoBot CHAT_SETTINGS = %i[ model stream temperature top_p n stop max_tokens - presence_penalty frequency_penalty logit_bias + presence_penalty frequency_penalty logit_bias seed response_format ].freeze attr_reader :settings @@ -40,12 +40,18 @@ module NanoBot def evaluate(input, streaming, cartridge, &feedback) messages = input[:history].map do |event| if event[:message].nil? && event[:meta] && event[:meta][:tool_calls] - { role: 'assistant', content: nil, tool_calls: event[:meta][:tool_calls] } + { role: 'assistant', content: nil, + tool_calls: event[:meta][:tool_calls], + _meta: { at: event[:at] } } elsif event[:who] == 'tool' { role: event[:who], content: event[:message].to_s, - tool_call_id: event[:meta][:id], name: event[:meta][:name] } + tool_call_id: event[:meta][:id], + name: event[:meta][:name], + _meta: { at: event[:at] } } else - { role: event[:who] == 'user' ? 'user' : 'assistant', content: event[:message] } + { role: event[:who] == 'user' ? 'user' : 'assistant', + content: event[:message], + _meta: { at: event[:at] } } end end @@ -54,7 +60,8 @@ module NanoBot messages.prepend( { role: key == :directive ? 'system' : 'user', - content: input[:behavior][key] } + content: input[:behavior][key], + _meta: { at: Time.now } } ) end @@ -66,7 +73,7 @@ module NanoBot payload.delete(:logit_bias) if payload.key?(:logit_bias) && payload[:logit_bias].nil? - payload[:tools] = input[:tools].map { |raw| NanoBot::Logic::OpenAI::Tools.adapt(raw) } if input[:tools] + payload[:tools] = input[:tools].map { |raw| Logic::OpenAI::Tools.adapt(raw) } if input[:tools] if streaming content = '' @@ -114,13 +121,15 @@ module NanoBot needs_another_round: true, interaction: { who: 'AI', message: nil, meta: { tool_calls: tools } } } ) - Tools.apply(cartridge, input[:tools], tools, feedback).each do |interaction| + Tools.apply( + cartridge, input[:tools], tools, feedback, Logic::OpenAI::Tools + ).each do |interaction| feedback.call({ should_be_stored: true, needs_another_round: true, interaction: }) end end feedback.call( - { should_be_stored: !(content.nil? || content == ''), + { should_be_stored: !(content.nil? || content.to_s.strip == ''), interaction: content.nil? || content == '' ? nil : { who: 'AI', message: content }, finished: true } ) @@ -128,7 +137,7 @@ module NanoBot end begin - @client.chat(parameters: payload) + @client.chat(parameters: Logic::OpenAI::Tokens.apply_policies!(cartridge, payload)) rescue StandardError => e raise e.class, e.response[:body] if e.response && e.response[:body] @@ -136,7 +145,7 @@ module NanoBot end else begin - result = @client.chat(parameters: payload) + result = @client.chat(parameters: Logic::OpenAI::Tokens.apply_policies!(cartridge, payload)) rescue StandardError => e raise e.class, e.response[:body] if e.response && e.response[:body] @@ -153,7 +162,9 @@ module NanoBot needs_another_round: true, interaction: { who: 'AI', message: nil, meta: { tool_calls: tools } } } ) - Tools.apply(cartridge, input[:tools], tools, feedback).each do |interaction| + Tools.apply( + cartridge, input[:tools], tools, feedback, Logic::OpenAI::Tools + ).each do |interaction| feedback.call({ should_be_stored: true, needs_another_round: true, interaction: }) end end |