127 lines
4.2 KiB
Python
127 lines
4.2 KiB
Python
"""Tests for llms.adapters.vertex — connection_params resolution."""
|
|
|
|
import pytest
|
|
|
|
from omnigent.errors import OmnigentError
|
|
from omnigent.llms.adapters.vertex import _build_vertex_url, _resolve_vertex_params
|
|
|
|
|
|
def test_resolve_raises_when_no_params() -> None:
|
|
"""
|
|
``None`` input raises ``OmnigentError`` — Vertex requires
|
|
connection_params.
|
|
"""
|
|
with pytest.raises(OmnigentError, match="requires connection_params"):
|
|
_resolve_vertex_params(None)
|
|
|
|
|
|
def test_resolve_raises_when_empty_params() -> None:
|
|
"""
|
|
Empty dict raises ``OmnigentError`` — Vertex requires
|
|
connection_params with project/location or base_url.
|
|
"""
|
|
with pytest.raises(OmnigentError, match="requires connection_params"):
|
|
_resolve_vertex_params({})
|
|
|
|
|
|
def test_resolve_passes_through_base_url() -> None:
|
|
"""
|
|
If ``connection_params`` already has ``"base_url"``, pass through unchanged.
|
|
"""
|
|
params = {"base_url": "https://custom.endpoint.com/v1"}
|
|
assert _resolve_vertex_params(params) is params
|
|
|
|
|
|
def test_resolve_builds_url_from_project_and_location() -> None:
|
|
"""
|
|
``"project"`` and ``"location"`` are converted to a Vertex ``"base_url"``.
|
|
"""
|
|
params = {"project": "my-proj", "location": "europe-west1"}
|
|
result = _resolve_vertex_params(params)
|
|
expected_url = _build_vertex_url("my-proj", "europe-west1")
|
|
assert result["base_url"] == expected_url
|
|
# Original keys are preserved
|
|
assert result["project"] == "my-proj"
|
|
assert result["location"] == "europe-west1"
|
|
|
|
|
|
def test_resolve_raises_when_project_missing() -> None:
|
|
"""
|
|
OmnigentError when ``"location"`` is provided but ``"project"`` is not.
|
|
No env var fallback.
|
|
"""
|
|
params = {"location": "us-east1"}
|
|
with pytest.raises(OmnigentError, match="requires 'project'"):
|
|
_resolve_vertex_params(params)
|
|
|
|
|
|
def test_resolve_raises_when_location_missing() -> None:
|
|
"""
|
|
OmnigentError when ``"project"`` is provided but ``"location"`` is not.
|
|
No env var fallback.
|
|
"""
|
|
params = {"project": "my-proj"}
|
|
with pytest.raises(OmnigentError, match="requires 'location'"):
|
|
_resolve_vertex_params(params)
|
|
|
|
|
|
def test_resolve_raises_when_no_recognized_keys() -> None:
|
|
"""
|
|
Params without ``"project"``, ``"location"``, or ``"base_url"``
|
|
raise OmnigentError — Vertex needs at least one of these.
|
|
"""
|
|
params = {"some_other_key": "value"}
|
|
with pytest.raises(OmnigentError, match="requires 'project'"):
|
|
_resolve_vertex_params(params)
|
|
|
|
|
|
def test_build_vertex_url_structure() -> None:
|
|
"""
|
|
The Vertex URL follows the expected GCP pattern.
|
|
"""
|
|
url = _build_vertex_url("my-proj", "us-central1")
|
|
assert url == (
|
|
"https://us-central1-aiplatform.googleapis.com"
|
|
"/v1/projects/my-proj"
|
|
"/locations/us-central1"
|
|
"/publishers/google/models"
|
|
)
|
|
|
|
|
|
# ── _get_base_url raises ────────────────────────────────
|
|
|
|
|
|
def test_get_base_url_raises() -> None:
|
|
"""VertexAdapter._get_base_url always raises — Vertex requires connection_params."""
|
|
from omnigent.llms.adapters.vertex import VertexAdapter
|
|
|
|
adapter = VertexAdapter()
|
|
with pytest.raises(OmnigentError, match="requires"):
|
|
adapter._get_base_url()
|
|
|
|
|
|
# ── URL for different regions ────────────────────────────
|
|
|
|
|
|
def test_build_vertex_url_different_region() -> None:
|
|
"""URL changes with region."""
|
|
url = _build_vertex_url("proj-2", "europe-west4")
|
|
expected_url = (
|
|
"https://europe-west4-aiplatform.googleapis.com"
|
|
"/v1/projects/proj-2"
|
|
"/locations/europe-west4"
|
|
"/publishers/google/models"
|
|
)
|
|
assert url == expected_url
|
|
|
|
|
|
# ── Resolve preserves extra keys ─────────────────────────
|
|
|
|
|
|
def test_resolve_preserves_extra_connection_keys() -> None:
|
|
"""Extra keys in connection_params are preserved after resolution."""
|
|
params = {"project": "p", "location": "l", "extra_key": "value"}
|
|
result = _resolve_vertex_params(params)
|
|
assert result["extra_key"] == "value"
|
|
assert "base_url" in result
|