Sha256: 196840615086a53797a97e26930b761f5f8029d3fcb3cb6de21979a7b57a2a42

Contents?: true

Size: 1.85 KB

Versions: 1

Compression:

Stored size: 1.85 KB

Contents

# frozen_string_literal: true

require 'http'

module Xip
  module Nlp
    module Luis
      class Client < Xip::Nlp::Client

        def initialize(subscription_key: nil, app_id: nil, endpoint: nil, datetime_ref: nil)
          begin
            @subscription_key = subscription_key || Xip.config.luis.subscription_key
            @app_id = app_id || Xip.config.luis.app_id
            @endpoint = endpoint || Xip.config.luis.endpoint
            @datetime_ref = datetime_ref || Xip.config.luis.datetime_reference
            @slot = Xip.env.development? ? 'staging' : 'production'
          rescue NoMethodError
            raise(
              Xip::Errors::ConfigurationError,
              'A `luis` configuration key must be specified directly or in `services.yml`'
            )
          end
        end

        def endpoint
          "https://#{@endpoint}/luis/prediction/v3.0/apps/#{@app_id}/slots/#{@slot}/predict"
        end

        def client
          @client ||= begin
            headers = {
              'Content-Type' => 'application/json'
            }
            HTTP.timeout(connect: 15, read: 60).headers(headers)
          end
        end

        def understand(query:)
          params = {
            'subscription-key'    => @subscription_key
          }

          body = MultiJson.dump({
            'query'               => query,
            'options'             => {
              'datetimeReference' => @datetime_ref,
            }
          })

          Xip::Logger.l(
            topic: :nlp,
            message: 'Performing NLP lookup via Microsoft LUIS'
          )
          result = client.post(endpoint, params: params, body: body)
          Result.new(result: result)
        end

      end
    end
  end
end

ENTITY_TYPES = %i(number currency email percentage phone age
                        url ordinal geo dimension temp datetime duration)

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
xip-luis-1.2.2 lib/xip/nlp/luis/client.rb