apache/beam · error · ValueError

Multiple values received for api_endpoint in api_endpoint…

Error message

Multiple values received for api_endpoint in api_endpoint and client_options parameters.

What it means

Raised in `VertexAIFeatureStoreEnrichmentHandler.__init__` when kwargs contain a `client_options` dict whose `api_endpoint` differs from the `api_endpoint` parameter. The handler refuses conflicting endpoint configuration because a single client endpoint must be unambiguous.

Solutions

  1. Remove the explicit `api_endpoint` argument and keep only `client_options`, or vice versa.
  2. Make the `api_endpoint` value inside `client_options` identical to the `api_endpoint` argument.
  3. Omit `client_options` entirely so the handler injects the configured `api_endpoint` automatically.

Example fix

// before
handler = VertexAIFeatureStoreEnrichmentHandler(api_endpoint='us-central1-aiplatform.googleapis.com', kwargs={'client_options': {'api_endpoint': 'europe-west1-aiplatform.googleapis.com'}})
// after
handler = VertexAIFeatureStoreEnrichmentHandler(api_endpoint='us-central1-aiplatform.googleapis.com')
Defensive patterns

Strategy: validation

Validate before calling

co = kwargs.get('client_options') or {}
if 'api_endpoint' in co and api_endpoint and co['api_endpoint'] != api_endpoint:
    raise ValueError('conflicting api_endpoint values')

Prevention

When it happens

Trigger: Constructing the handler with both `api_endpoint='us-central1-aiplatform.googleapis.com'` and `kwargs={'client_options': {'api_endpoint': '...other...'}}`, where the two values differ.

Common situations: Generic kwargs plumbing forwarding a client_options dict from another client while also setting api_endpoint explicitly; regional vs global endpoint mismatch copied from docs.

Understand the failure class

Background: Conflicting config options: "cannot be used together" — configuration validation errors across open-source libraries — this error's family across 162 libraries.

Related errors


AI-assisted analysis of apache/beam@12126d8942 (2026-09-13). Data as JSON: /api/errors/6eac141c05f58e43. Report an issue: GitHub.

Appendix: source

Thrown at sdks/python/apache_beam/transforms/enrichment_handlers/vertex_ai_feature_store.py:106

        `apache_beam.transforms.enrichment_handlers.utils.ExceptionLevel`
        to set the level when an empty row is returned from the BigTable query.
        Defaults to `ExceptionLevel.WARN`.
      kwargs: Optional keyword arguments to configure the
        `aiplatform.gapic.FeatureOnlineStoreServiceClient`.
    """
    self.project = project
    self.location = location
    self.api_endpoint = api_endpoint
    self.feature_store_name = feature_store_name
    self.feature_view_name = feature_view_name
    self.row_key = row_key
    self.exception_level = exception_level
    self.kwargs = kwargs if kwargs else {}
    if 'client_options' in self.kwargs:
      if not self.kwargs['client_options']['api_endpoint']:
        self.kwargs['client_options']['api_endpoint'] = self.api_endpoint
      elif self.kwargs['client_options']['api_endpoint'] != self.api_endpoint:
        raise ValueError(
            'Multiple values received for api_endpoint in '
            'api_endpoint and client_options parameters.')
    else:
      self.kwargs['client_options'] = {"api_endpoint": self.api_endpoint}

    # check if the feature store exists
    try:
      admin_client = aiplatform.gapic.FeatureOnlineStoreAdminServiceClient(
          **self.kwargs)
    except Exception:
      _LOGGER.warning(
          'Due to insufficient admin permission, could not verify '
          'the existence of feature store. If the `exception_level` '
          'is set to WARN then make sure the feature store exists '
          'otherwise the data enrichment will not happen without '
          'throwing an error.')
    else:
      location_path = admin_client.common_location_path(

View on GitHub (pinned to 12126d8942)