summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
Diffstat (limited to 'components')
-rw-r--r--components/provider.rb2
-rw-r--r--components/providers/base.rb2
-rw-r--r--components/providers/google.rb36
-rw-r--r--components/providers/openai.rb7
4 files changed, 33 insertions, 14 deletions
diff --git a/components/provider.rb b/components/provider.rb
index d83319f..57f1cca 100644
--- a/components/provider.rb
+++ b/components/provider.rb
@@ -9,7 +9,7 @@ module NanoBot
def self.new(provider, environment: {})
case provider[:id]
when 'openai'
- Providers::OpenAI.new(provider[:settings], provider[:credentials], environment:)
+ Providers::OpenAI.new(nil, provider[:settings], provider[:credentials], environment:)
when 'google'
Providers::Google.new(provider[:options], provider[:settings], provider[:credentials], environment:)
else
diff --git a/components/providers/base.rb b/components/providers/base.rb
index 7a99833..0bea758 100644
--- a/components/providers/base.rb
+++ b/components/providers/base.rb
@@ -6,7 +6,7 @@ module NanoBot
module Components
module Providers
class Base
- def initialize(_settings, _credentials, _environment: {})
+ def initialize(_options, _settings, _credentials, _environment: {})
raise NoMethodError, "The 'initialize' method is not implemented for the current provider."
end
diff --git a/components/providers/google.rb b/components/providers/google.rb
index f847677..b15dd1b 100644
--- a/components/providers/google.rb
+++ b/components/providers/google.rb
@@ -13,26 +13,38 @@ module NanoBot
module Components
module Providers
class Google < Base
+ SAFETY_SETTINGS = %i[category threshold].freeze
+
SETTINGS = {
generationConfig: %i[
temperature topP topK candidateCount maxOutputTokens stopSequences
].freeze
}.freeze
- SAFETY_SETTINGS = %i[category threshold].freeze
-
attr_reader :settings
def initialize(options, settings, credentials, _environment)
@settings = settings
+ gemini_credentials = if credentials[:'api-key']
+ {
+ service: credentials[:service],
+ api_key: credentials[:'api-key'],
+ project_id: credentials[:'project-id'],
+ region: credentials[:region]
+ }
+ else
+ {
+ service: credentials[:service],
+ file_path: credentials[:'file-path'],
+ project_id: credentials[:'project-id'],
+ region: credentials[:region]
+ }
+ end
+
@client = Gemini.new(
- credentials: {
- file_path: credentials[:'file-path'],
- project_id: credentials[:'project-id'],
- region: credentials[:region]
- },
- settings: { model: options[:model], stream: options[:stream] }
+ credentials: gemini_credentials,
+ options: { model: options[:model], stream: options[:stream] }
)
end
@@ -61,9 +73,15 @@ module NanoBot
%i[backdrop directive].each do |key|
next unless input[:behavior][key]
+ messages.prepend(
+ { role: 'model',
+ parts: { text: 'Understood.' },
+ _meta: { at: Time.now } }
+ )
+
# TODO: Does Gemini have system messages?
messages.prepend(
- { role: key == :directive ? 'user' : 'user',
+ { role: 'user',
parts: { text: input[:behavior][key] },
_meta: { at: Time.now } }
)
diff --git a/components/providers/openai.rb b/components/providers/openai.rb
index f6eafd4..e71f143 100644
--- a/components/providers/openai.rb
+++ b/components/providers/openai.rb
@@ -17,13 +17,14 @@ module NanoBot
DEFAULT_ADDRESS = 'https://api.openai.com'
CHAT_SETTINGS = %i[
- model stream temperature top_p n stop max_tokens
- presence_penalty frequency_penalty logit_bias seed response_format
+ model stream frequency_penalty logit_bias logprobs top_logprobs
+ max_tokens n presence_penalty response_format seed stop temperature
+ top_p tool_choice
].freeze
attr_reader :settings
- def initialize(settings, credentials, environment: {})
+ def initialize(_options, settings, credentials, environment: {})
@settings = settings
@credentials = credentials
@environment = environment