diff --git a/ai-platform/snippets/list-tuned-models.js b/ai-platform/snippets/list-tuned-models.js new file mode 100644 index 0000000000..4392cecf09 --- /dev/null +++ b/ai-platform/snippets/list-tuned-models.js @@ -0,0 +1,58 @@ +/* + * Copyright 2023 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'; + +function main(project, location, model = 'text-bison@001') { + // [START aiplatform_list_tuned_models] + /** + * TODO(developer): Uncomment these variables before running the sample.\ + * (Not necessary if passing values as arguments) + */ + // const project = 'YOUR_PROJECT_ID'; + // const location = 'YOUR_PROJECT_LOCATION'; + // const model = 'text-bison@001'; + const aiplatform = require('@google-cloud/aiplatform'); + + const {ModelServiceClient} = aiplatform.v1; + const clientOptions = { + apiEndpoint: 'us-central1-aiplatform.googleapis.com', + }; + + // Instantiate the service client. + const modelServiceClient = new ModelServiceClient(clientOptions); + + function listTunedModels() { + // Configure the parent resource + const parent = `projects/${project}/locations/${location}`; + const filter = `labels.google-vertex-llm-tuning-base-model-id=${model}`; + + const request = { + parent, + filter, + }; + + const [response] = modelServiceClient.listModels(request); + console.log('List Tuned Models response'); + for (const model of response) { + console.log(`\tModel name: ${model.name}`); + console.log(`\tDisplay name: ${model.displayName}`); + } + } + listTunedModels(); + // [END aiplatform_list_tuned_models] +} + +exports.listTunedModels = main; diff --git a/ai-platform/snippets/package.json b/ai-platform/snippets/package.json index 0ea966179d..314123e36e 100644 --- a/ai-platform/snippets/package.json +++ b/ai-platform/snippets/package.json @@ -21,6 +21,7 @@ "c8": "^7.13.0", "chai": "^4.2.0", "mocha": "^10.0.0", - "uuid": "^9.0.0" + "uuid": "^9.0.0", + "sinon": "^15.1.2" } } diff --git a/ai-platform/snippets/test/list-tuned-models.test.js b/ai-platform/snippets/test/list-tuned-models.test.js new file mode 100644 index 0000000000..ed6a10ff11 --- /dev/null +++ b/ai-platform/snippets/test/list-tuned-models.test.js @@ -0,0 +1,46 @@ +/* + * Copyright 2023 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'; + +const {assert} = require('chai'); +const {describe, it} = require('mocha'); +const sinon = require('sinon'); + +const LOCATION = 'us-central1'; +const project = process.env.CAIP_PROJECT_ID; + +const {listTunedModels} = require('../list-tuned-models'); + +describe('AI platform list tuned models', () => { + const stubConsole = function () { + sinon.stub(console, 'error'); + sinon.stub(console, 'log'); + }; + + const restoreConsole = function () { + console.log.restore(); + console.error.restore(); + }; + + beforeEach(stubConsole); + afterEach(restoreConsole); + + it('should list all tuned LLM models', () => { + listTunedModels(project, LOCATION); + assert.include(console.log.firstCall.args, 'List Tuned Models response'); + }); +});