class IBM::ML::Cloud

Class for calling cloud-based Watson Machine Learning scoring service

Public Class Methods

new(username, password, instance_id) click to toggle source
Calls superclass method IBM::ML::new
# File lib/ibm/ml/cloud.rb, line 7
def initialize(username, password, instance_id)
  super('ibm-watson-ml.mybluemix.net', username, password)
  @instance_id = instance_id
  @http.use_ssl = true
end

Public Instance Methods

deployment(deployment_id) click to toggle source
# File lib/ibm/ml/cloud.rb, line 21
def deployment(deployment_id)
  find_by_id(deployments, deployment_id)
end
deployment_by_name(name) click to toggle source
# File lib/ibm/ml/cloud.rb, line 25
def deployment_by_name(name)
  find_by_name(deployments, name)
end
deployments() click to toggle source
# File lib/ibm/ml/cloud.rb, line 17
def deployments
  get_request "#{instance_url}/deployments", 'resources'
end
model(model_id) click to toggle source
# File lib/ibm/ml/cloud.rb, line 29
def model(model_id)
  get_request "#{instance_url}/published_models/#{model_id}", 'entity'
end
model_by_name(name) click to toggle source
# File lib/ibm/ml/cloud.rb, line 33
def model_by_name(name)
  find_by_name(models, name)
end
models() click to toggle source
# File lib/ibm/ml/cloud.rb, line 13
def models
  get_request "#{instance_url}/published_models", 'resources'
end
query_score(score, field) click to toggle source
# File lib/ibm/ml/cloud.rb, line 60
def query_score(score, field)
  query_ml_score(score, field, 'values')
end
score(deployment_id, record) click to toggle source
# File lib/ibm/ml/cloud.rb, line 42
def score(deployment_id, record)
  deployment  = deployment(deployment_id)['entity']
  field_names = model_of_deployment(deployment)['entity']['input_data_schema']['fields'].map do |f|
    f['name']
  end

  cleaned_rec   = record.map { |k, v| [k.downcase, v] }.to_h
  record_values = field_names.map { |name| cleaned_rec[name.downcase] }

  response = post_request deployment['scoring_url'], {
    fields: field_names,
    values: [record_values]
  }.to_json

  raise(response['message'] + ' : ' + response['description']) if response.key?('message')
  response
end
score_by_name(name, record) click to toggle source
# File lib/ibm/ml/cloud.rb, line 37
def score_by_name(name, record)
  deployment = find_by_name(deployments, name)
  score(deployment['metadata']['guid'], record)
end

Private Instance Methods

find_by_id(response, guid) click to toggle source
# File lib/ibm/ml/cloud.rb, line 84
def find_by_id(response, guid)
  response['resources'].each do |resource|
    return resource if resource['metadata']['guid'] == guid
  end
  raise(QueryError, "Could not find resource with id \"#{guid}\"")
end
find_by_name(response, name) click to toggle source
# File lib/ibm/ml/cloud.rb, line 91
def find_by_name(response, name)
  response['resources'].each do |resource|
    return resource if resource['entity']['name'] == name
  end
  raise(QueryError, "Could not find resource with name \"#{name}\"")
end
instance_url() click to toggle source
# File lib/ibm/ml/cloud.rb, line 70
def instance_url
  "https://#{@host}/v3/wml_instances/#{@instance_id}"
end
ldap_request(url) click to toggle source
# File lib/ibm/ml/cloud.rb, line 74
def ldap_request(url)
  request = Net::HTTP::Get.new(url)
  request.basic_auth @username, @password
  request
end
ldap_url() click to toggle source
# File lib/ibm/ml/cloud.rb, line 66
def ldap_url
  "https://#{@host}/v3/identity/token"
end
model_of_deployment(deployment) click to toggle source
# File lib/ibm/ml/cloud.rb, line 98
def model_of_deployment(deployment)
  model(deployment['published_model']['guid'])
end
process_ldap_response(response) click to toggle source
# File lib/ibm/ml/cloud.rb, line 80
def process_ldap_response(response)
  JSON.parse(response.read_body)['token']
end