Open
Description
MatchingEngineIndexEndpoint.find_neighbors
fails when using api_transport="rest"
if project
and location
are not explicitly passed to aiplatform.init()
. The gRPC transport works correctly without these explicit parameters.
The REST call results in a 400 BadRequest
error: Could not find field "%24alt" in the type "google.cloud.aiplatform.v1beta1.FindNeighborsRequest"
.
Is it intended that the REST transport requires explicit project
and location
in init
, while gRPC can infer them from the endpoint's resource name? The behavior seems inconsistent.
Code Example:
from google.cloud import aiplatform
# Fails with the below configuration
aiplatform.init(api_transport="rest")
# This configuration works
# aiplatform.init(api_transport="grpc")
# This configuration also works
# from google.cloud.aiplatform.initializer import initializer
# aiplatform.init(
# project=GCP.project,
# location=GCP.location,
# api_transport="rest"
# )
def get_docs_search_endpoint():
return aiplatform.MatchingEngineIndexEndpoint(Artifacts.docs_search_endpoint_id)
docs_search_endpoint = get_docs_search_endpoint()
try:
match_resp = docs_search_endpoint.find_neighbors(
deployed_index_id=Artifacts.docs_search_deployment_id,
queries=[[1] * 768],
num_neighbors=500,
)
print(match_resp)
except Exception as e:
print(e)
Stack Trace:
google.api_core.exceptions.BadRequest: 400 POST https://209XXXX46.us-central1-901XXXX18323.vdb.vertexai.goog/v1beta1/projects/901XXXX8323/locations/us-central1/indexEndpoints/793471XXXX752470528:findNeighbors?%24alt=json%3Benum-encoding%3Dint: Could not find field "%24alt" in the type "google.cloud.aiplatform.v1beta1.FindNeighborsRequest".