diff --git a/genai/controlled-generation/ctrlgen-with-enum-schema.js b/genai/controlled-generation/ctrlgen-with-enum-schema.js new file mode 100644 index 0000000000..e0002a2b9d --- /dev/null +++ b/genai/controlled-generation/ctrlgen-with-enum-schema.js @@ -0,0 +1,55 @@ +// Copyright 2025 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'; + +// [START googlegenaisdk_ctrlgen_with_enum_schema] +const {GoogleGenAI, Type} = require('@google/genai'); + +const GOOGLE_CLOUD_PROJECT = process.env.GOOGLE_CLOUD_PROJECT; +const GOOGLE_CLOUD_LOCATION = process.env.GOOGLE_CLOUD_LOCATION || 'global'; + +async function generateContent( + projectId = GOOGLE_CLOUD_PROJECT, + location = GOOGLE_CLOUD_LOCATION +) { + const ai = new GoogleGenAI({ + vertexai: true, + project: projectId, + location: location, + }); + + const responseSchema = { + type: Type.STRING, + enum: ['Percussion', 'String', 'Woodwind', 'Brass', 'Keyboard'], + }; + + const response = await ai.models.generateContent({ + model: 'gemini-2.0-flash', + contents: 'What type of instrument is an oboe?', + config: { + responseMimeType: 'text/x.enum', + responseSchema: responseSchema, + }, + }); + + console.log(response.text); + + return response.text; +} +// [END googlegenaisdk_ctrlgen_with_enum_schema] + +module.exports = { + generateContent, +}; diff --git a/genai/count-tokens/counttoken-with-txt-vid.js b/genai/count-tokens/counttoken-with-txt-vid.js new file mode 100644 index 0000000000..8ac40f2480 --- /dev/null +++ b/genai/count-tokens/counttoken-with-txt-vid.js @@ -0,0 +1,53 @@ +// Copyright 2025 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'; + +// [START googlegenaisdk_counttoken_with_txt_vid] +const {GoogleGenAI} = require('@google/genai'); + +const GOOGLE_CLOUD_PROJECT = process.env.GOOGLE_CLOUD_PROJECT; +const GOOGLE_CLOUD_LOCATION = process.env.GOOGLE_CLOUD_LOCATION || 'global'; + +async function countTokens( + projectId = GOOGLE_CLOUD_PROJECT, + location = GOOGLE_CLOUD_LOCATION +) { + const ai = new GoogleGenAI({ + vertexai: true, + project: projectId, + location: location, + }); + + const video = { + fileData: { + fileUri: 'gs://cloud-samples-data/generative-ai/video/pixel8.mp4', + mimeType: 'video/mp4', + }, + }; + + const response = await ai.models.countTokens({ + model: 'gemini-2.0-flash', + contents: [video, 'Provide a description of the video.'], + }); + + console.log(response); + + return response.totalTokens; +} +// [END googlegenaisdk_counttoken_with_txt_vid] + +module.exports = { + countTokens, +}; diff --git a/genai/test/counttoken-with-txt-vid.test.js b/genai/test/counttoken-with-txt-vid.test.js new file mode 100644 index 0000000000..088223f414 --- /dev/null +++ b/genai/test/counttoken-with-txt-vid.test.js @@ -0,0 +1,28 @@ +// Copyright 2025 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 projectId = process.env.CAIP_PROJECT_ID; +const sample = require('../count-tokens/counttoken-with-txt-vid.js'); + +describe('counttoken-with-txt-vid', async () => { + it('should return the total token count for a text and video prompt', async () => { + const output = await sample.countTokens(projectId); + assert(output > 0); + }); +}); diff --git a/genai/test/ctrlgen-with-enum-schema.test.js b/genai/test/ctrlgen-with-enum-schema.test.js new file mode 100644 index 0000000000..02bbe7954b --- /dev/null +++ b/genai/test/ctrlgen-with-enum-schema.test.js @@ -0,0 +1,28 @@ +// Copyright 2025 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 projectId = process.env.CAIP_PROJECT_ID; +const sample = require('../controlled-generation/ctrlgen-with-enum-schema.js'); + +describe('ctrlgen-with-enum-schema', async () => { + it('should generate text content in Json', async () => { + const output = await sample.generateContent(projectId); + assert(output.length > 0 && output.includes('Woodwind')); + }); +});