Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ Vertex AI SDK for Python
- `Client Library Documentation`_
- `Product Documentation`_

<!-- trivial change -->

.. |GA| image:: https://img.shields.io/badge/support-ga-gold.svg
:target: https://github.com/googleapis/google-cloud-python/blob/main/README.rst#general-availability
.. |pypi| image:: https://img.shields.io/pypi/v/google-cloud-aiplatform.svg
Expand Down
18 changes: 10 additions & 8 deletions noxfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@
# 'docfx' is excluded since it only needs to run in 'docs-presubmit'
nox.options.sessions = [
"unit",
"unit_minimal",
"unit_ray",
"unit_langchain",
"unit_ag2",
Expand Down Expand Up @@ -219,6 +220,7 @@ def default(session):
"--ignore=tests/unit/vertex_ag2",
"--ignore=tests/unit/vertex_llama_index",
"--ignore=tests/unit/architecture",
"--ignore=tests/unit/vertexai/test_generative_models.py", # Exclude minimal tests
os.path.join("tests", "unit"),
*session.posargs,
)
Expand All @@ -235,11 +237,7 @@ def default(session):

@nox.session(python=UNIT_TEST_PYTHON_VERSIONS)
def unit(session):
"""Run the unit test suite."""
# First run the minimal GenAI tests
unit_genai_minimal_dependencies(session)

# Then run the default full test suite
"""Run the default unit test suite."""
default(session)


Expand All @@ -254,14 +252,18 @@ def unit_genai_minimal_dependencies(session):
session.run(
"py.test",
"--quiet",
f"--junitxml=unit_{session.python}_sponge_log.xml",
# These tests require the PIL module
# "--ignore=TestGenerativeModels::test_image_mime_types",
f"--junitxml=unit_minimal_{session.python}_sponge_log.xml",
os.path.join("tests", "unit", "vertexai", "test_generative_models.py"),
*session.posargs,
)


@nox.session(python=UNIT_TEST_PYTHON_VERSIONS)
def unit_minimal(session):
"""Run the minimal GenAI unit tests."""
unit_genai_minimal_dependencies(session)


@nox.session(python=["3.10", "3.11"])
@nox.parametrize("ray", ["2.9.3", "2.33.0", "2.42.0", "2.47.1"])
def unit_ray(session, ray):
Expand Down
3 changes: 2 additions & 1 deletion testing/constraints-langchain.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
langchain
langchain-core
langchain-google-vertexai
langgraph-checkpoint==2.0.1 # Pinned to unbreak unit tests.
langgraph-checkpoint==2.0.1 # Pinned to unbreak unit tests.
pyarrow>=19.0.1
1 change: 1 addition & 0 deletions testing/constraints-ray-2.33.0.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
ray==2.33.0
numpy<2.0.0 # Ray 2.33.0 not compatible with NumPy 2.x
# Below constraints are inherited from constraints-3.10.txt
google-api-core
proto-plus==1.22.3
Expand Down
1 change: 1 addition & 0 deletions testing/constraints-ray-2.42.0.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
ray==2.42.0
numpy<2.0.0 # Ray 2.42.0 not compatible with NumPy 2.x on Py 3.10
# Below constraints are inherited from constraints-3.10.txt
google-api-core
proto-plus==1.22.3
Expand Down
2 changes: 2 additions & 0 deletions testing/constraints-ray-2.9.3.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
ray==2.9.3
numpy<2.0.0 # Ray 2.9.3 not compatible with NumPy 2.x
pyarrow>=6.0.1,<=14.0.2
# Below constraints are inherited from constraints-3.10.txt
setuptools<70.0.0
google-api-core
Expand Down
5 changes: 4 additions & 1 deletion tests/unit/aiplatform/test_prediction.py
Original file line number Diff line number Diff line change
Expand Up @@ -3279,6 +3279,7 @@ def test_init_no_aip_predict_route(

assert str(exception.value) == expected_message


def test_health(self, model_server_env_mock, importlib_import_module_mock_twice):
model_server = CprModelServer()
client = TestClient(model_server.app)
Expand All @@ -3287,10 +3288,12 @@ def test_health(self, model_server_env_mock, importlib_import_module_mock_twice)

assert response.status_code == 200

def test_predict(self, model_server_env_mock, importlib_import_module_mock_twice):
@pytest.mark.asyncio
async def test_predict(self, model_server_env_mock, importlib_import_module_mock_twice):
model_server = CprModelServer()
client = TestClient(model_server.app)


with mock.patch.object(model_server.handler, "handle") as handle_mock:
future = asyncio.Future()
future.set_result(Response())
Expand Down
20 changes: 16 additions & 4 deletions tests/unit/vertex_rag/test_rag_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -416,13 +416,25 @@ def create_transformation_config(
)


from vertexai.rag.utils.resources import RagVectorDbConfig

def rag_corpus_eq(returned_corpus, expected_corpus):
if returned_corpus != expected_corpus:
print(f"Returned Corpus: {returned_corpus}")
print(f"Expected Corpus: {expected_corpus}")

assert returned_corpus.name == expected_corpus.name
assert returned_corpus.display_name == expected_corpus.display_name
assert returned_corpus.backend_config.__eq__(expected_corpus.backend_config)
assert returned_corpus.vertex_ai_search_config.__eq__(
expected_corpus.vertex_ai_search_config
)

if expected_corpus.vertex_ai_search_config:
assert returned_corpus.vertex_ai_search_config == expected_corpus.vertex_ai_search_config
assert returned_corpus.backend_config == RagVectorDbConfig(vector_db=None, rag_embedding_model_config=None)
elif expected_corpus.backend_config:
assert returned_corpus.backend_config == expected_corpus.backend_config
assert returned_corpus.vertex_ai_search_config is None
else:
assert returned_corpus.backend_config == RagVectorDbConfig(vector_db=None, rag_embedding_model_config=None)
assert returned_corpus.vertex_ai_search_config is None


def rag_file_eq(returned_file, expected_file):
Expand Down
24 changes: 18 additions & 6 deletions tests/unit/vertex_rag/test_rag_data_preview.py
Original file line number Diff line number Diff line change
Expand Up @@ -688,15 +688,27 @@ def create_transformation_config(
)


from vertexai.rag.utils.resources import RagVectorDbConfig

def rag_corpus_eq(returned_corpus, expected_corpus):
if returned_corpus != expected_corpus:
print(f"Returned Corpus: {returned_corpus}")
print(f"Expected Corpus: {expected_corpus}")

assert returned_corpus.name == expected_corpus.name
assert returned_corpus.display_name == expected_corpus.display_name
assert returned_corpus.vector_db.__eq__(expected_corpus.vector_db)
assert returned_corpus.backend_config.__eq__(expected_corpus.backend_config)
assert returned_corpus.vertex_ai_search_config.__eq__(
expected_corpus.vertex_ai_search_config
)
assert returned_corpus.corpus_type_config.__eq__(expected_corpus.corpus_type_config)
assert returned_corpus.vector_db == expected_corpus.vector_db
assert returned_corpus.corpus_type_config == expected_corpus.corpus_type_config

if expected_corpus.vertex_ai_search_config:
assert returned_corpus.vertex_ai_search_config == expected_corpus.vertex_ai_search_config
assert returned_corpus.backend_config == RagVectorDbConfig(vector_db=None, rag_embedding_model_config=None)
elif expected_corpus.backend_config:
assert returned_corpus.backend_config == expected_corpus.backend_config
assert returned_corpus.vertex_ai_search_config is None
else:
assert returned_corpus.backend_config == RagVectorDbConfig(vector_db=None, rag_embedding_model_config=None)
assert returned_corpus.vertex_ai_search_config is None


def rag_file_eq(returned_file, expected_file):
Expand Down
27 changes: 19 additions & 8 deletions tests/unit/vertex_ray/test_vertex_ray_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,25 @@

# -*- coding: utf-8 -*-

_TEST_CLIENT_CONTEXT = ray.client_builder.ClientContext(
dashboard_url=tc.ClusterConstants.TEST_VERTEX_RAY_DASHBOARD_ADDRESS,
python_version="MOCK_PYTHON_VERSION",
ray_version="MOCK_RAY_VERSION",
ray_commit="MOCK_RAY_COMMIT",
_num_clients=1,
_context_to_restore=None,
)
try:
_TEST_CLIENT_CONTEXT = ray.client_builder.ClientContext(
dashboard_url=tc.ClusterConstants.TEST_VERTEX_RAY_DASHBOARD_ADDRESS,
python_version="MOCK_PYTHON_VERSION",
ray_version="MOCK_RAY_VERSION",
ray_commit="MOCK_RAY_COMMIT",
protocol_version=0,
_num_clients=1,
_context_to_restore=None,
)
except TypeError:
_TEST_CLIENT_CONTEXT = ray.client_builder.ClientContext(
dashboard_url=tc.ClusterConstants.TEST_VERTEX_RAY_DASHBOARD_ADDRESS,
python_version="MOCK_PYTHON_VERSION",
ray_version="MOCK_RAY_VERSION",
ray_commit="MOCK_RAY_COMMIT",
_num_clients=1,
_context_to_restore=None,
)

_TEST_VERTEX_RAY_CLIENT_CONTEXT = vertex_ray.client_builder._VertexRayClientContext(
persistent_resource_id="MOCK_PERSISTENT_RESOURCE_ID",
Expand Down