Sha256: 583a75fa0fb20ff61181a2c6efdc68fa1f698e79fb8820fbdcaa218404e90919

Contents?: true

Size: 1.94 KB

Versions: 1

Compression:

Stored size: 1.94 KB

Contents

# ai_client/configuration.rb
#
# Design Objective:
# AiClient.configure do |config|
#   # global config items that over-ride the defaults
# end
#
# client = AiClient.new(...) do
#   # client specific config items that over-ride the global config
# end 

require 'hashie'
require 'logger'

class AiClient
  # TODO: Use system environment varibles
  #       AI_CLIENT_CONFIG_FILE
  #
  # TODO: Config.load('path/to/some_file.yml')
  #         @@default_config (on require from lib/config.yml)
  #         @@config (if the envar exists ?? merge with default)
  #         @config ... done

  class Config < Hashie::Mash
    include Hashie::Extensions::Mash::PermissiveRespondTo
    include Hashie::Extensions::Mash::SymbolizeKeys
    include Hashie::Extensions::Mash::DefineAccessors
  

    # I'm not sure about this ...
    # def provider(name, &block)
    #   if block_given?
    #     providers[name] = block.call
    #   else
    #     providers[name] || {}
    #   end
    # end

  end


  # Class variables to hold default and current config
  @@default_config = Config.new(
    logger: Logger.new(STDOUT),
    timeout: nil,
    return_raw: false,
    providers: {},
    provider_patterns: {
      anthropic: /^claude/i,
      openai: /^(gpt|davinci|curie|babbage|ada|whisper|tts|dall-e)/i,
      google: /^(gemini|palm)/i,
      mistral: /^(mistral|codestral)/i,
      localai: /^local-/i,
      ollama: /(llama|nomic)/i
    },
    model_types: {
      text_to_text: /^(nomic|gpt|davinci|curie|babbage|ada|claude|gemini|palm|command|generate|j2-|mistral|codestral)/i,
      speech_to_text: /^whisper/i,
      text_to_speech: /^tts/i,
      text_to_image: /^dall-e/i
    }
  )

  @@class_config = @@default_config.dup

  class << self
    def configure(&block)
      yield(class_config)
    end

    def class_config
      @@class_config
    end
    
    def class_config=(value)
      @@class_config = value
    end

    def default_config
      @@default_config
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ai_client-0.2.0 lib/ai_client/configuration.rb