From e19c285bac419565ee8a0a2b5d35b5238fd738fb Mon Sep 17 00:00:00 2001 From: gericdong Date: Sat, 3 Jun 2023 09:39:22 -0400 Subject: [PATCH 1/2] feat: chat prompt sample for Vertex LLMs --- ai-platform/snippets/predict-chat-prompt.js | 105 ++++++++++++++++++ .../snippets/test/predict-chat-prompt.test.js | 40 +++++++ 2 files changed, 145 insertions(+) create mode 100644 ai-platform/snippets/predict-chat-prompt.js create mode 100644 ai-platform/snippets/test/predict-chat-prompt.test.js diff --git a/ai-platform/snippets/predict-chat-prompt.js b/ai-platform/snippets/predict-chat-prompt.js new file mode 100644 index 0000000000..71a045d34c --- /dev/null +++ b/ai-platform/snippets/predict-chat-prompt.js @@ -0,0 +1,105 @@ +/* + * 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'; + +async function main(project, location = 'us-central1') { + // [START aiplatform_sdk_chat] + /** + * 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 aiplatform = require('@google-cloud/aiplatform'); + + // Imports the Google Cloud Prediction service client + const {PredictionServiceClient} = aiplatform.v1; + + // Import the helper module for converting arbitrary protobuf.Value objects. + const {helpers} = aiplatform; + + // Specifies the location of the api endpoint + const clientOptions = { + apiEndpoint: 'us-central1-aiplatform.googleapis.com', + }; + const publisher = 'google'; + const model = 'chat-bison@001'; + + // Instantiates a client + const predictionServiceClient = new PredictionServiceClient(clientOptions); + + async function callPredict() { + // Configure the parent resource + const endpoint = `projects/${project}/locations/${location}/publishers/${publisher}/models/${model}`; + + const prompt = { + context: + 'My name is Ned. You are my personal assistant. My favorite movies are Lord of the Rings and Hobbit.', + examples: [ + { + input: {content: 'Who do you work for?'}, + output: {content: 'I work for Ned.'}, + }, + { + input: {content: 'What do I like?'}, + output: {content: 'Ned likes watching movies.'}, + }, + ], + messages: [ + { + author: 'user', + content: 'Are my favorite movies based on a book series?', + }, + ], + }; + const instanceValue = helpers.toValue(prompt); + const instances = [instanceValue]; + + const parameter = { + temperature: 0.2, + maxOutputTokens: 256, + topP: 0.95, + topK: 40, + }; + const parameters = helpers.toValue(parameter); + + const request = { + endpoint, + instances, + parameters, + }; + + // Predict request + const [response] = await predictionServiceClient.predict(request); + console.log('Get chat prompt response'); + const predictions = response.predictions; + console.log('\tPredictions :'); + for (const prediction of predictions) { + console.log(`\t\tPrediction : ${JSON.stringify(prediction)}`); + } + } + + callPredict(); + // [END aiplatform_sdk_chat] +} + +process.on('unhandledRejection', err => { + console.error(err.message); + process.exitCode = 1; +}); + +main(...process.argv.slice(2)); diff --git a/ai-platform/snippets/test/predict-chat-prompt.test.js b/ai-platform/snippets/test/predict-chat-prompt.test.js new file mode 100644 index 0000000000..c8361f9b23 --- /dev/null +++ b/ai-platform/snippets/test/predict-chat-prompt.test.js @@ -0,0 +1,40 @@ +/* + * 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 path = require('path'); +const {assert} = require('chai'); +const {describe, it} = require('mocha'); + +const cp = require('child_process'); +const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); +const cwd = path.join(__dirname, '..'); + +const project = process.env.CAIP_PROJECT_ID; +const location = 'us-central1'; + +describe('AI platform predict chat prompt', () => { + it('should make predictions using a large language model', async () => { + const stdout = execSync( + `node ./predict-chat-prompt.js ${project} ${location}`, + { + cwd, + } + ); + assert.match(stdout, /Get chat prompt response/); + }); +}); From d00f9484aa4aa9f6f252a201405587f8d3114d8e Mon Sep 17 00:00:00 2001 From: gericdong Date: Mon, 5 Jun 2023 12:11:15 -0400 Subject: [PATCH 2/2] addressed review comments --- ai-platform/snippets/predict-chat-prompt.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/ai-platform/snippets/predict-chat-prompt.js b/ai-platform/snippets/predict-chat-prompt.js index 71a045d34c..829f256b50 100644 --- a/ai-platform/snippets/predict-chat-prompt.js +++ b/ai-platform/snippets/predict-chat-prompt.js @@ -48,21 +48,19 @@ async function main(project, location = 'us-central1') { const prompt = { context: - 'My name is Ned. You are my personal assistant. My favorite movies are Lord of the Rings and Hobbit.', + 'My name is Miles. You are an astronomer, knowledgeable about the solar system.', examples: [ { - input: {content: 'Who do you work for?'}, - output: {content: 'I work for Ned.'}, - }, - { - input: {content: 'What do I like?'}, - output: {content: 'Ned likes watching movies.'}, + input: {content: 'How many moons does Mars have?'}, + output: { + content: 'The planet Mars has two moons, Phobos and Deimos.', + }, }, ], messages: [ { author: 'user', - content: 'Are my favorite movies based on a book series?', + content: 'How many planets are there in the solar system?', }, ], };