diff --git a/package.json b/package.json index e20531c9..ff61339c 100644 --- a/package.json +++ b/package.json @@ -19,17 +19,12 @@ "docs-test": "linkinator docs", "compile:oss": "tsc -p tsconfig.json.oss", "fix": "gts fix", - "test": "npm run test:src && npm run test:test", - "test": "npm run test:legacy:src && npm run test:legacy:test", - "test:src": "npm run test:legacy:src", - "test:test": "npm run test:legacy:test", - "test:system": "npm run test:legacy:system && npm run test:genai:system", - "test:legacy:src": "jasmine build/vertexai/src/functions/test/*_test.js build/vertexai/src/models/test/*_test.js --reporter=test/spec/reporter.js", - "test:legacy:test": "jasmine build/vertexai/test/*_test.js --reporter=test/spec/reporter.js", - "test:legacy:system": "jasmine build/vertexai/system_test/*_test.js --reporter=test/spec/reporter.js", - "test:genai:system": "jasmine build/system_test/*_test.js --reporter=test/spec/reporter.js", - "lint": "ESLINT_USE_FLAT_CONFIG=true eslint src/genai --no-ignore --config src/genai/eslint.config.mjs", - "format": "prettier 'src/genai/**/*.ts' 'src/genai/**/*.mjs' --write", + "test": "npm run test:unit", + "test:unit": "jasmine build/test/unit/*_test.js --reporter=test/spec/reporter.js", + "test:system": "jasmine build/system_test/*_test.js --reporter=test/spec/reporter.js", + "test:replays": "jasmine build/test/replays/*_test.js --reporter=test/spec/reporter.js", + "lint": "ESLINT_USE_FLAT_CONFIG=true eslint src --no-ignore --config src/eslint.config.mjs", + "format": "prettier 'src/**/*.ts' 'src/**/*.mjs' --write", "clean-js-files": "find . -type f -name \"*.js\" -exec rm -f {} +", "clean-js-map-files": "find . -type f -name \"*.js.map\" -exec rm -f {} +", "postpack": "if [ \"${CLEAN}\" ]; then npm run clean-after-pack; fi", diff --git a/src/genai/.prettierignore b/src/.prettierignore similarity index 100% rename from src/genai/.prettierignore rename to src/.prettierignore diff --git a/src/genai/.prettierrc b/src/.prettierrc similarity index 100% rename from src/genai/.prettierrc rename to src/.prettierrc diff --git a/src/genai/_internal_types.ts b/src/_internal_types.ts similarity index 100% rename from src/genai/_internal_types.ts rename to src/_internal_types.ts diff --git a/src/genai/agentengines.ts b/src/agentengines.ts similarity index 100% rename from src/genai/agentengines.ts rename to src/agentengines.ts diff --git a/src/genai/client.ts b/src/client.ts similarity index 100% rename from src/genai/client.ts rename to src/client.ts diff --git a/src/genai/converters/_agentengines_converters.ts b/src/converters/_agentengines_converters.ts similarity index 100% rename from src/genai/converters/_agentengines_converters.ts rename to src/converters/_agentengines_converters.ts diff --git a/src/genai/converters/_memories_converters.ts b/src/converters/_memories_converters.ts similarity index 100% rename from src/genai/converters/_memories_converters.ts rename to src/converters/_memories_converters.ts diff --git a/src/genai/converters/_memoryrevisions_converters.ts b/src/converters/_memoryrevisions_converters.ts similarity index 100% rename from src/genai/converters/_memoryrevisions_converters.ts rename to src/converters/_memoryrevisions_converters.ts diff --git a/src/genai/converters/_sandboxes_converters.ts b/src/converters/_sandboxes_converters.ts similarity index 100% rename from src/genai/converters/_sandboxes_converters.ts rename to src/converters/_sandboxes_converters.ts diff --git a/src/genai/converters/_sessionevents_converters.ts b/src/converters/_sessionevents_converters.ts similarity index 100% rename from src/genai/converters/_sessionevents_converters.ts rename to src/converters/_sessionevents_converters.ts diff --git a/src/genai/converters/_sessions_converters.ts b/src/converters/_sessions_converters.ts similarity index 100% rename from src/genai/converters/_sessions_converters.ts rename to src/converters/_sessions_converters.ts diff --git a/src/genai/eslint.config.mjs b/src/eslint.config.mjs similarity index 100% rename from src/genai/eslint.config.mjs rename to src/eslint.config.mjs diff --git a/src/index.ts b/src/index.ts index a3a6b4ca..98222d7a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -15,8 +15,5 @@ * limitations under the License. */ -export {VertexAI} from '../vertexai/src/vertex_ai'; -export {Client} from './genai/client'; - -export * from '../vertexai/src/types'; -export * from '../vertexai/src/models'; +export {Client} from './client'; +export * from './types'; diff --git a/src/genai/memories.ts b/src/memories.ts similarity index 100% rename from src/genai/memories.ts rename to src/memories.ts diff --git a/src/genai/memoryrevisions.ts b/src/memoryrevisions.ts similarity index 100% rename from src/genai/memoryrevisions.ts rename to src/memoryrevisions.ts diff --git a/src/genai/sandboxes.ts b/src/sandboxes.ts similarity index 100% rename from src/genai/sandboxes.ts rename to src/sandboxes.ts diff --git a/src/genai/sessionevents.ts b/src/sessionevents.ts similarity index 100% rename from src/genai/sessionevents.ts rename to src/sessionevents.ts diff --git a/src/genai/sessions.ts b/src/sessions.ts similarity index 100% rename from src/genai/sessions.ts rename to src/sessions.ts diff --git a/src/genai/types.ts b/src/types.ts similarity index 100% rename from src/genai/types.ts rename to src/types.ts diff --git a/src/genai/types/common.ts b/src/types/common.ts similarity index 100% rename from src/genai/types/common.ts rename to src/types/common.ts diff --git a/system_test/agent_engine_e2e_test.ts b/system_test/agent_engine_e2e_test.ts index 963773b8..f9e6f64a 100644 --- a/system_test/agent_engine_e2e_test.ts +++ b/system_test/agent_engine_e2e_test.ts @@ -4,7 +4,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {Client} from '../src/genai/client'; +import {Client} from '../src/client'; const PROJECT = process.env['GCLOUD_PROJECT']; const LOCATION = 'us-central1'; diff --git a/test/genai/_replay_client.ts b/test/replays/_replay_client.ts similarity index 99% rename from test/genai/_replay_client.ts rename to test/replays/_replay_client.ts index b61a89cc..a0129418 100644 --- a/test/genai/_replay_client.ts +++ b/test/replays/_replay_client.ts @@ -8,7 +8,7 @@ import {Pager} from '@google/genai'; import * as fs from 'fs'; import * as path from 'path'; -import {Client} from '../../src/genai/client.js'; +import {Client} from '../../src/client.js'; /** * Bypass real credential fetching during replay. diff --git a/test/genai/agentengines_memories_test.ts b/test/replays/agentengines_memories_test.ts similarity index 100% rename from test/genai/agentengines_memories_test.ts rename to test/replays/agentengines_memories_test.ts diff --git a/test/genai/agentengines_sandboxes_test.ts b/test/replays/agentengines_sandboxes_test.ts similarity index 98% rename from test/genai/agentengines_sandboxes_test.ts rename to test/replays/agentengines_sandboxes_test.ts index cec26600..2be3f0d7 100644 --- a/test/genai/agentengines_sandboxes_test.ts +++ b/test/replays/agentengines_sandboxes_test.ts @@ -8,7 +8,7 @@ import 'jasmine'; import {NodeAuth} from '@google/genai/vertex_internal'; -import * as types from '../../src/genai/types.js'; +import * as types from '../../src/types.js'; import {ReplayClient} from './_replay_client.js'; diff --git a/test/genai/agentengines_sessions_test.ts b/test/replays/agentengines_sessions_test.ts similarity index 100% rename from test/genai/agentengines_sessions_test.ts rename to test/replays/agentengines_sessions_test.ts diff --git a/test/genai/agentengines_test.ts b/test/replays/agentengines_test.ts similarity index 100% rename from test/genai/agentengines_test.ts rename to test/replays/agentengines_test.ts diff --git a/test/replays/run_replay_tests.sh b/test/replays/run_replay_tests.sh new file mode 100755 index 00000000..9d4f726e --- /dev/null +++ b/test/replays/run_replay_tests.sh @@ -0,0 +1,65 @@ +#!/bin/bash + +# This script runs replay tests for the Vertex SDK JS GenAI modules. +# It is intended to be used from the google3 directory of a CitC client. +# +# Example: +# ./third_party/javascript/node_modules/vertexai/test/genai/run_replay_tests.sh + +START_DIR=$(pwd) + +if [[ "$START_DIR" != */google3 ]]; then + echo "Error: This script must be run from your client's '/google3' directory." + echo "Your current directory is: $START_DIR" + exit 1 +fi + +export GOOGLE_GENAI_REPLAYS_DIRECTORY="$START_DIR/google/cloud/aiplatform/sdk/genai/replays/tests/vertex_sdk_genai_replays/" + +if [ ! -d "$GOOGLE_GENAI_REPLAYS_DIRECTORY" ]; then + echo "Error: Replays directory not found at $GOOGLE_GENAI_REPLAYS_DIRECTORY" + exit 1 +fi + +PARSED_ARGS=$(getopt -o "" -l "mode:" -- "$@") + +if [ $? -ne 0 ]; then + echo "Error: Failed to parse command line arguments." >&2 + exit 1 +fi + +eval set -- "$PARSED_ARGS" +MODE_VALUE="replay" + +while true; do + case "$1" in + --mode) + MODE_VALUE="$2" + shift 2 + ;; + --) + shift + break + ;; + *) + echo "Internal error: Unrecognized arg option: '$1'" >&2 + exit 1 + ;; + esac +done + +if [ "$MODE_VALUE" != "replay" ]; then + echo "Error: The JS SDK currently only supports --mode replay." + exit 1 +fi + +echo "Running JS GenAI replay tests via blaze..." + +blaze test --test_strategy=local \ + --test_env=GOOGLE_GENAI_REPLAYS_DIRECTORY="$GOOGLE_GENAI_REPLAYS_DIRECTORY" \ + --test_output=errors \ + //third_party/javascript/node_modules/vertexai/test:genai_modules_replay_tests + +EXIT_CODE=$? +echo "Tests completed with exit code: $EXIT_CODE." +exit $EXIT_CODE diff --git a/test/genai/sessionevents_test.ts b/test/replays/sessionevents_test.ts similarity index 100% rename from test/genai/sessionevents_test.ts rename to test/replays/sessionevents_test.ts diff --git a/test/replays/test_env.js b/test/replays/test_env.js new file mode 100644 index 00000000..2b7b4e13 --- /dev/null +++ b/test/replays/test_env.js @@ -0,0 +1,24 @@ +/** + * @license + * Copyright 2025 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +const path = require('path'); + +module.exports = { + beforeJasmine: () => { + process.env['GOOGLE_CLOUD_PROJECT'] = 'vertex-sdk-dev'; + process.env['GOOGLE_CLOUD_LOCATION'] = 'us-central1'; + + if (process.env['RUNFILES']) { + process.env['GOOGLE_GENAI_REPLAYS_DIRECTORY'] = path.join( + process.env['RUNFILES'], + 'google3/google/cloud/aiplatform/sdk/genai/replays/tests/vertex_sdk_genai_replays' + ); + } + + return Promise.resolve(); + }, + afterJasmine: (failureReason) => Promise.resolve(failureReason), +}; diff --git a/test/unit/client_test.ts b/test/unit/client_test.ts new file mode 100644 index 00000000..ee9e08ab --- /dev/null +++ b/test/unit/client_test.ts @@ -0,0 +1,30 @@ +import {AgentEngines} from '../../src/agentengines'; +import {Client} from '../../src/client'; + +describe('GenAI Client Instantiation', () => { + const options = { + project: 'test-project', + location: 'us-central1', + }; + + it('should initialize with provided project and location', () => { + const client = new Client(options); + expect(client).toBeDefined(); + }); + + it('should expose agentEnginesInternal as an instance of AgentEngines', + () => { + const client = new Client(options); + // This will log an experimental warning. + expect(client.agentEnginesInternal).toBeDefined(); + expect(client.agentEnginesInternal instanceof AgentEngines).toBe(true); + }); + + it('should correctly initialize AgentEngines submodules', () => { + const client = new Client(options); + const ae = client.agentEnginesInternal; + expect(ae.sessions).toBeDefined(); + expect(ae.sandboxes).toBeDefined(); + expect(ae.memories).toBeDefined(); + }); +}); diff --git a/vertexai/package.json b/vertexai/package.json index e20531c9..ff61339c 100644 --- a/vertexai/package.json +++ b/vertexai/package.json @@ -19,17 +19,12 @@ "docs-test": "linkinator docs", "compile:oss": "tsc -p tsconfig.json.oss", "fix": "gts fix", - "test": "npm run test:src && npm run test:test", - "test": "npm run test:legacy:src && npm run test:legacy:test", - "test:src": "npm run test:legacy:src", - "test:test": "npm run test:legacy:test", - "test:system": "npm run test:legacy:system && npm run test:genai:system", - "test:legacy:src": "jasmine build/vertexai/src/functions/test/*_test.js build/vertexai/src/models/test/*_test.js --reporter=test/spec/reporter.js", - "test:legacy:test": "jasmine build/vertexai/test/*_test.js --reporter=test/spec/reporter.js", - "test:legacy:system": "jasmine build/vertexai/system_test/*_test.js --reporter=test/spec/reporter.js", - "test:genai:system": "jasmine build/system_test/*_test.js --reporter=test/spec/reporter.js", - "lint": "ESLINT_USE_FLAT_CONFIG=true eslint src/genai --no-ignore --config src/genai/eslint.config.mjs", - "format": "prettier 'src/genai/**/*.ts' 'src/genai/**/*.mjs' --write", + "test": "npm run test:unit", + "test:unit": "jasmine build/test/unit/*_test.js --reporter=test/spec/reporter.js", + "test:system": "jasmine build/system_test/*_test.js --reporter=test/spec/reporter.js", + "test:replays": "jasmine build/test/replays/*_test.js --reporter=test/spec/reporter.js", + "lint": "ESLINT_USE_FLAT_CONFIG=true eslint src --no-ignore --config src/eslint.config.mjs", + "format": "prettier 'src/**/*.ts' 'src/**/*.mjs' --write", "clean-js-files": "find . -type f -name \"*.js\" -exec rm -f {} +", "clean-js-map-files": "find . -type f -name \"*.js.map\" -exec rm -f {} +", "postpack": "if [ \"${CLEAN}\" ]; then npm run clean-after-pack; fi",