From 0d8ef40d5fcd05151a215d94f93787a129e0af4d Mon Sep 17 00:00:00 2001 From: gericdong Date: Mon, 22 Apr 2024 21:02:30 -0400 Subject: [PATCH] feat(generative-ai): Add video with audio sample for Gemini 1.5 --- generative-ai/snippets/gemini-video-audio.js | 53 +++++++++++++++++++ .../snippets/test/gemini-video-audio.test.js | 30 +++++++++++ 2 files changed, 83 insertions(+) create mode 100644 generative-ai/snippets/gemini-video-audio.js create mode 100644 generative-ai/snippets/test/gemini-video-audio.test.js diff --git a/generative-ai/snippets/gemini-video-audio.js b/generative-ai/snippets/gemini-video-audio.js new file mode 100644 index 0000000000..5dd9b312e9 --- /dev/null +++ b/generative-ai/snippets/gemini-video-audio.js @@ -0,0 +1,53 @@ +// Copyright 2024 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. + +// [START generativeaionvertexai_gemini_video_with_audio] +const {VertexAI} = require('@google-cloud/vertexai'); + +/** + * TODO(developer): Update these variables before running the sample. + */ +async function analyze_video_with_audio(projectId = 'PROJECT_ID') { + const vertexAI = new VertexAI({project: projectId, location: 'us-central1'}); + + const generativeModel = vertexAI.getGenerativeModel({ + model: 'gemini-1.5-pro-preview-0409', + }); + + const filePart = { + file_data: { + file_uri: 'gs://cloud-samples-data/generative-ai/video/pixel8.mp4', + mime_type: 'video/mp4', + }, + }; + const textPart = { + text: ` + Provide a description of the video. + The description should also contain anything important which people say in the video.`, + }; + + const request = { + contents: [{role: 'user', parts: [filePart, textPart]}], + }; + + const resp = await generativeModel.generateContent(request); + const contentResponse = await resp.response; + console.log(JSON.stringify(contentResponse)); +} +// [END generativeaionvertexai_gemini_video_with_audio] + +analyze_video_with_audio(...process.argv.slice(2)).catch(err => { + console.error(err.message); + process.exitCode = 1; +}); diff --git a/generative-ai/snippets/test/gemini-video-audio.test.js b/generative-ai/snippets/test/gemini-video-audio.test.js new file mode 100644 index 0000000000..3287c6d996 --- /dev/null +++ b/generative-ai/snippets/test/gemini-video-audio.test.js @@ -0,0 +1,30 @@ +// Copyright 2024 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 cp = require('child_process'); +const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); + +const projectId = process.env.CAIP_PROJECT_ID; + +describe('Analyze video with audio', async () => { + it('should analyze video with audio', async () => { + const output = execSync(`node ./gemini-video-audio.js ${projectId}`); + + assert(output.length > 0); + }); +});