lib/ruby_conversations.rb



# frozen_string_literal: true

require 'zeitwerk'
require 'ruby_conversations/version'
require 'ruby_conversations/configuration'
require 'ruby_conversations/errors'
require 'ruby_conversations/client'
require 'ruby_conversations/aws_credential_provider'
require 'ruby_llm'

# Main module for RubyConversations
module RubyConversations
  class << self
    attr_writer :configuration

    def configuration
      @configuration ||= Configuration.new
    end

    def configure
      yield(configuration)
    end

    def client
      @client ||= build_client
    end

    def reset!
      @configuration = nil
      @client = nil
    end

    private

    def build_client
      configuration.validate!
      Client.new(
        url: configuration.api_url,
        jwt_secret: configuration.jwt_secret
      )
    end
  end
end

# Set up Zeitwerk autoloading
loader = Zeitwerk::Loader.new
loader.push_dir("#{__dir__}/../app/models")
loader.setup