app/models/ruby_conversations/concerns/llm_credentials.rb
# frozen_string_literal: true module RubyConversations module Concerns # Handles the management of LLM credentials for AI conversations. # Provides methods for configuring LLM credentials from either # environment variables or an AWS credential provider. module LlmCredentials extend ActiveSupport::Concern # Helper methods for retrieving AWS credentials from different sources # These methods are meant to be used as class methods in the LlmCredentials module module CredentialHelpers private def env_credentials { api_key: ENV.fetch('AWS_ACCESS_KEY_ID', nil), secret_key: ENV.fetch('AWS_SECRET_ACCESS_KEY', nil), session_token: ENV.fetch('AWS_SESSION_TOKEN', nil) } end def provider_credentials provider = AwsCredentialProvider.instance provider.refresh_if_expired! { api_key: provider.access_key_id, secret_key: provider.secret_access_key, session_token: provider.session_token } end end class_methods do include CredentialHelpers def configure_llm_credentials RubyLLM.configure do |config| creds = provider_credentials config.bedrock_region = ENV.fetch('AWS_REGION', 'us-west-2') config.bedrock_api_key = creds[:api_key] config.bedrock_secret_key = creds[:secret_key] config.bedrock_session_token = creds[:session_token] end end end def configure_llm_credentials self.class.configure_llm_credentials end end end end