Name

sn_nlu_discovery.IntentDiscoveryUtilQuebec

Description

No description available

Script

var IntentDiscoveryUtilQuebec = Class.create();
IntentDiscoveryUtilQuebec.prototype = {
  initialize: function() {
      this.CLASSIFCATION_ONLY = "classification";
      this.CLUSTERING_ONLY = "clustering";
  },

  createJob: function(sysId, table, field, encodedQuery, extraOpts) {
      try {
          // TODO support for langauge
          // authoringModel required for constructor
          var authoringModel = {
              "schemaVersion": "NY-1",
              "name": sysId,
              "language": "en",
              "version": "2.02",
              "intents": [],
              "entities": [],
          };

          var solutionInfo = {
              "label": sysId,
              "nluTrainingMode": "CoverageReport",
              "datasetProperties": {
                  "tableName": table,
                  "fieldNames": [field]
              },
              "Coverage-Cluster-Lang": "ml",
              "Coverage-Text-Field": field,
              "Coverage-Inlucde-Msg": false,
          };

          if (extraOpts && extraOpts != undefined) {
              Object.keys(extraOpts).forEach(function(key) {
                  // user fields is the only key that can't be placed directly in solution properties.
                  // we need to append it to "field" so that data for these columns are sent to the training server.
                  if (key === "user_fields") {
                      solutionInfo.datasetProperties.fieldNames = [solutionInfo.datasetProperties.fieldNames.concat(extraOpts[key]).join(",")];
                  } else {
                      solutionInfo[key] = extraOpts[key];
                  }
              });
          }

          if (encodedQuery && encodedQuery != null) {
              solutionInfo.datasetProperties.encodedQuery = encodedQuery;
          }

          var nluSolution = new sn_ml.NLUSolution(solutionInfo, authoringModel);
          var solutionName = sn_ml.NLUSolutionStore.add(nluSolution);
          gs.debug("Created solution for Intent Discovery:" + solutionName);
          var solutionVersion = nluSolution.submitTrainingJob();
          var trainingStatus = solutionVersion.getStatus(false);
          gs.debug("props: " + JSON.stringify(solutionVersion.getProperties()));
          return solutionName;
      } catch (e) {
          gs.warn('Error creating report definition:' + e.message + '\n' + e);
      }
  },

  getOptions: function(extraOpts, reportDef) {
      var shouldCluster = reportDef.getValue("cluster_records");
      if (shouldCluster === 0 || shouldCluster === false || shouldCluster === "0") {
          extraOpts["Coverage-Job-Type"] = this.CLASSIFCATION_ONLY;
      } else if (!reportDef.getValue("model")) {
          // Only run clustering for no Taxonomy
          extraOpts["Coverage-Job-Type"] = this.CLUSTERING_ONLY;
      }

      if (reportDef.getValue("model") && reportDef.getValue("model").toLowerCase() == "hr") {
          extraOpts["Coverage-Model-Type"] = "atlas_hr_english";
          extraOpts["Coverage-ML-Model-Type"] = "atlas_hr_ml";
      }

      return extraOpts;
  },

  rerun: function(solutionDefId, solutionDefRec, reportDef) {
      var solutionName = solutionDefRec.getValue('solution_name');

      var solution;
      var status;
      try {
          solution = sn_ml.NLUSolutionStore.get(solutionName);
      } catch (e) {
          var IDUtil = new sn_nlu_discovery.IntentDiscoveryUtil();
          solutionName = IDUtil.createReport(reportDef);
          solution = sn_ml.NLUSolutionStore.get(solutionName);
          if (!gs.nil(solution)) {
              status = solution.getLatestVersion().getStatus();
              gs.debug('[DISC] Re-running solution training job ' + solutionName);
              return {
                  error: null,
                  status: status
              };
          }
      }
      var errorMsg;
      if (gs.nil(solution)) {
          errorMsg = 'Cannot load solution with name ' + solutionName;
          gs.warn('[DISC] rerun_report: ' + errorMsg);
          return {
              error: errorMsg
          };
      }

      status = solution.getLatestVersion().getStatus();
      status = status ? JSON.parse(status) : status;
      gs.debug('[DISC] Solution training job status before re-running is ' + status + ', status.hasJobEnded=' + JSON.stringify(status.hasJobEnded));

      if (status && status.hasJobEnded == 'true') {
          gs.debug('[DISC] Re-running solution training job ' + solutionName);
          solution.submitTrainingJob();
      } else {
          errorMsg = '[DISC] Training already in progress. ' + solutionName;
          gs.warn(errorMsg);
          return {
              error: errorMsg
          };
      }
      status = solution.getLatestVersion().getStatus();
      gs.debug('[DISC] Solution training job final status is ' + status);
      return {
          error: null,
          status: status
      };
  },

  getSolution: function(solutionName) {
      return sn_ml.NLUSolutionStore.get(solutionName);
  },

  type: 'IntentDiscoveryUtilQuebec'
};

Sys ID

aabd42c8c7403010c59db91703c2608d

Offical Documentation

Official Docs: