summaryrefslogtreecommitdiff
path: root/components/providers/openai.rb
diff options
context:
space:
mode:
authoricebaker <113217272+icebaker@users.noreply.github.com>2023-12-15 08:35:09 -0300
committerGitHub <noreply@github.com>2023-12-15 08:35:09 -0300
commitf3200fe0448044ebf43fb52f40a47bc648082c56 (patch)
tree6a5db83f9210a15b4e57516791d23f353b27f7a3 /components/providers/openai.rb
parentfb96658a1ca4b6e3e0505e7a39f660e1a05b3c6e (diff)
parent639fcc2da50333da00fe50a0970fe28b4e5e9908 (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.rb37
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