Sha256: b7173f2a4773f863c538e499b8844dab9e825bf549de73483033cdd6cc4a3177

Contents?: true

Size: 1.29 KB

Versions: 1

Compression:

Stored size: 1.29 KB

Contents

# frozen_string_literal: true

module Xip
  class Controller
    module Nlp

      extend ActiveSupport::Concern

      included do
        # Memoized in order to prevent multiple requests to the NLP provider
        def perform_nlp!
          Xip::Logger.l(
            topic: :nlp,
            message: "User #{current_session_id} -> Performing NLP."
          )

          unless Xip.config.nlp_integration.present?
            raise Xip::Errors::ConfigurationError, "An NLP integration has not yet been configured (Xip.config.nlp_integration)"
          end

          @nlp_result ||= begin
            nlp_client = nlp_client_klass.new
            @nlp_result = @current_message.nlp_result = nlp_client.understand(
              query: current_message.message
            )

            if Xip.config.log_all_nlp_results
              Xip::Logger.l(
                topic: :nlp,
                message: "User #{current_session_id} -> NLP Result: #{@nlp_result.parsed_result.inspect}"
              )
            end

            @nlp_result
          end
        end

        private

        def nlp_client_klass
          integration = Xip.config.nlp_integration.to_s.titlecase
          klass = "Xip::Nlp::#{integration}::Client"
          klass.classify.constantize
        end
      end

    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
xip-2.0.0.beta2 lib/xip/controller/nlp.rb