Sha256: e777e0e6a1a73bc3f02a91ac16eb9c89a8d1d764e159c1342dfbf73b1b553762

Contents?: true

Size: 1.69 KB

Versions: 38

Compression:

Stored size: 1.69 KB

Contents

require "singleton"

module EasyML
  class Predict
    include Singleton

    attr_reader :models

    def initialize
      @models = {}
    end

    def self.predict(model_name, df)
      if df.is_a?(Hash)
        df = Polars::DataFrame.new(df)
      end
      raw_input = df.to_hashes&.first
      df = instance.normalize(model_name, df)
      preds = instance.predict(model_name, df)
      current_version = instance.get_model(model_name)

      EasyML::Prediction.create!(
        model: current_version.model,
        model_history: current_version,
        prediction_type: current_version.model.task,
        prediction_value: {
          value: preds.first,
        }.compact,
        raw_input: raw_input,
        normalized_input: df.to_hashes&.first,
      )

      preds
    end

    def self.train(model_name, tuner: nil, evaluator: nil)
      instance.train(model_name, tuner: tuner, evaluator: evaluator)
    end

    def predict(model_name, df)
      get_model(model_name).predict(df)
    end

    def normalize(model_name, df)
      get_model(model_name).dataset.normalize(df, inference: true)
    end

    def get_model(model_name)
      load_model(model_name)
      models[model_name]
    end

    def reset
      @models = {}
    end

    def self.reset
      instance.reset
    end

    private

    def load_model(model_name)
      current_model = EasyML::Model.find_by!(name: model_name).inference_version

      # Load new model if not loaded or different version
      model_not_loaded = models[model_name].nil?
      model_is_new_version = models[model_name]&.id != current_model&.id
      return unless model_not_loaded || model_is_new_version

      models[model_name] = current_model
    end
  end
end

Version data entries

38 entries across 38 versions & 1 rubygems

Version Path
easy_ml-0.2.0.pre.rc38 lib/easy_ml/predict.rb
easy_ml-0.2.0.pre.rc37 lib/easy_ml/predict.rb
easy_ml-0.2.0.pre.rc36 lib/easy_ml/predict.rb
easy_ml-0.2.0.pre.rc35 lib/easy_ml/predict.rb
easy_ml-0.2.0.pre.rc34 lib/easy_ml/predict.rb
easy_ml-0.2.0.pre.rc33 lib/easy_ml/predict.rb
easy_ml-0.2.0.pre.rc32 lib/easy_ml/predict.rb
easy_ml-0.2.0.pre.rc31 lib/easy_ml/predict.rb
easy_ml-0.2.0.pre.rc30 lib/easy_ml/predict.rb
easy_ml-0.2.0.pre.rc29 lib/easy_ml/predict.rb
easy_ml-0.2.0.pre.rc28 lib/easy_ml/predict.rb
easy_ml-0.2.0.pre.rc27 lib/easy_ml/predict.rb
easy_ml-0.2.0.pre.rc26 lib/easy_ml/predict.rb
easy_ml-0.2.0.pre.rc25 lib/easy_ml/predict.rb
easy_ml-0.2.0.pre.rc24 lib/easy_ml/predict.rb
easy_ml-0.2.0.pre.rc23 lib/easy_ml/predict.rb
easy_ml-0.2.0.pre.rc22 lib/easy_ml/predict.rb
easy_ml-0.2.0.pre.rc21 lib/easy_ml/predict.rb
easy_ml-0.2.0.pre.rc20 lib/easy_ml/predict.rb
easy_ml-0.2.0.pre.rc19 lib/easy_ml/predict.rb