Skip to content

Commit

Permalink
samples: moving autoML samples from nodejs-translate and refactored t…
Browse files Browse the repository at this point in the history
…hem (#432)
  • Loading branch information
munkhuushmgl authored and Ace Nassri committed Nov 17, 2022
1 parent 1374ff1 commit 7ff7665
Show file tree
Hide file tree
Showing 7 changed files with 362 additions and 129 deletions.
51 changes: 51 additions & 0 deletions automl/beta/cancel_operation.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
// Copyright 2020 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

'use strict';

async function main(operationFullId) {
// [START automl_cancel_operation_beta]

/**
* TODO(developer): Uncomment these variables before running the sample.
*/
// const operationFullId = 'projects/YOUR_PROJECT_ID/locations/YOUR_LOCATIOIN/operations/OPERATION_ID';

// Imports the Google Cloud AutoML library
const {AutoMlClient} = require('@google-cloud/automl').v1beta1;

// Instantiates a client
const client = new AutoMlClient();

async function cancelOperation() {
client.operationsClient.cancelOperation({
name: operationFullId,
});

// Wait for operation to complete.
console.log('Cancelled operation');
}

cancelOperation();
// [END automl_cancel_operation_beta]
}

main(...process.argv.slice(2)).catch(err => {
console.error(err.message);
process.exitCode = 1;
});
process.on('unhandledRejection', err => {
console.error(err.message);
process.exitCode = 1;
});
101 changes: 101 additions & 0 deletions automl/test/automlTranslation.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
// Copyright 2020 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

'use strict';

const {assert} = require('chai');
const {describe, it} = require('mocha');
const cp = require('child_process');
const uuid = require('uuid');

const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'});

const automl = require('@google-cloud/automl');

const cmdDataset = 'node translate/automlTranslateCreateDataset.js';
const cmdModel = 'node translate/automlTranslateCreateModel.js';
const cmdPredict = 'node translate/automlTranslatePredict.js';

const projectId = process.env.AUTOML_PROJECT_ID;
const datasetId = process.env.TRANSLATION_DATASET_ID;
const modelId = process.env.TRANSLATION_MODEL_ID;

const samplePredictionText = './translate/resources/testInput.txt';

describe('Translate AutoML sample tests', () => {
it('should create and delete a dataset', async () => {
const datasetDisplayName = `test_${uuid
.v4()
.replace(/-/g, '_')
.substring(0, 20)}`;

// Create dataset
let output = execSync(
`${cmdDataset} "${projectId}" "${datasetDisplayName}"`
);

//extract dataset id from the output
const newDatasetId = output.split('\n')[1].split(':')[1].trim();
assert.match(output, /Dataset id:/);

// Delete the created dataset
output = execSync(
`node delete_dataset.js ${projectId} us-central1 ${newDatasetId}`
);
assert.match(output, /Dataset deleted/);
});

it('should create model and cancel the training operation', async () => {
// create a model with pre-existing dataset
let output = execSync(
`${cmdModel} ${projectId} us-central1 ${datasetId} translate_test_model`
);
assert.match(output, /Training started../);
const operationFullId = output
.split('Training operation name:')[1]
.split('\n')[0]
.trim();

assert.include(output, operationFullId);

// cancel the training LRO.
output = execSync(`node beta/cancel_operation.js ${operationFullId}`);
assert.match(output, /Cancelled/);
});

it('should run Prediction from translation model', async () => {
// Verify the model is deployed before trying to predict
const client = new automl.AutoMlClient();

const modelFullId = {
name: client.modelPath(projectId, 'us-central1', modelId),
};

const [response] = await client.getModel(modelFullId);
if (response.deploymentState !== 'DEPLOYED') {
// Deploy model if it is not deployed
const [operation] = await client.deployModel(modelFullId);

// Wait for operation to complete.
const [response] = await operation.promise();
console.log(`Model deployment finished. ${response}`);
}

// Run prediction on 'testInput.txt' in resources folder
const output = execSync(
`${cmdPredict} "${projectId}" us-central1 "${modelId}" "${samplePredictionText}" "False"`
);
assert.match(output, /Translated Content:/);
});
});
129 changes: 0 additions & 129 deletions automl/test/automlTranslation.v1beta1.test.js

This file was deleted.

76 changes: 76 additions & 0 deletions automl/translate/automlTranslateCreateDataset.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
// Copyright 2020 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

'use strict';

async function main(projectId, displayName) {
// [START automl_translation_create_dataset]

/**
* Demonstrates using the AutoML client to request to create dataset for
* automl translation.
* TODO(developer): Uncomment the following lines before running the sample.
*/
// const projectId = '[PROJECT_ID]' e.g., "my-gcloud-project";
// const displayName = '[DATASET_DISPLAY_NAME]' e.g., "my-dataset-name";

const automl = require('@google-cloud/automl');

// Create client for automl service.
const client = new automl.AutoMlClient();
const computeRegion = 'us-central1';
const source = 'en';
const target = 'ja';

// A resource that represents Google Cloud Platform location.
const projectLocation = client.locationPath(projectId, computeRegion);

async function createDataset() {
// Specify the source and target language.
const datasetSpec = {
sourceLanguageCode: source,
targetLanguageCode: target,
};

// Set dataset name and dataset specification.
const datasetInfo = {
displayName: displayName,
translationDatasetMetadata: datasetSpec,
};

// Create a dataset with the dataset specification in the region.
const [operation] = await client.createDataset({
parent: projectLocation,
dataset: datasetInfo,
});

// wait for lro to finish
const [dataset] = await operation.promise();
// Display the dataset information
console.log(`Dataset name: ${dataset.name}`);
console.log(`Dataset id: ${dataset.name.split('/').pop(-1)}`);
}

createDataset();
// [END automl_translation_create_dataset]
}

main(...process.argv.slice(2)).catch(err => {
console.error(err.message);
process.exitCode = 1;
});
process.on('unhandledRejection', err => {
console.error(err.message);
process.exitCode = 1;
});
Loading

0 comments on commit 7ff7665

Please sign in to comment.