diff options
Diffstat (limited to 'components/providers/google.rb')
-rw-r--r-- | components/providers/google.rb | 36 |
1 files changed, 27 insertions, 9 deletions
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 } } ) |