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