xai-org/x-algorithm · error · ValueError

PhoenixGrpcDataset requires server_address: a gRPC address p

Error message

PhoenixGrpcDataset requires server_address: a gRPC address pattern for the data loader service, with a '{}' placeholder for the loader index (e.g. 'http://loader-{}.loaders.svc:9090').

What it means

PhoenixGrpcDataset.make() requires server_address: a gRPC address pattern for the remote data-loader service containing a '{}' placeholder that is formatted with the loader shard index. If server_address is empty/None, the dataset cannot construct any client, so ValueError is raised with an example pattern.

Source

Thrown at phoenix/xrex/data/grpc_recsys.py:61

        server_hosts: list[str],
        server_port: int = 8898,
        skip_rows: int = 0,
        keep_and_pad_partial_batch: bool | None = None,
        prefetch_factor: int = 2,
        resume_position: DataPosition | None = None,
    ) -> Iterator[tuple[RecsysFeaturesBatch, dict[int, int] | None]]:
        del (
            run_server,
            server_hosts,
            server_port,
            skip_rows,
            keep_and_pad_partial_batch,
            prefetch_factor,
            resume_position,
        )

        if not self.server_address:
            raise ValueError(
                "PhoenixGrpcDataset requires server_address: a gRPC address pattern "
                "for the data loader service, with a '{}' placeholder for the loader "
                "index (e.g. 'http://loader-{}.loaders.svc:9090')."
            )

        grpc_client = rust_ext.load("xai_recsys_dataloader")

        rank_logger.info(f"Starting gRPC sequential processing (shard {shard_index}/{num_shards})")

        hash_keys = self.hash_table.hash_keys
        real_addresses = [self.server_address.format(i) for i in range(self.num_data_loaders)]
        real_address = real_addresses[shard_index % len(real_addresses)]
        dataloader = grpc_client.RecsysDataLoaderPyClient(
            real_address,
            self.num_splits,
            user_id_table_size=hash_keys.user_id_table_size,
            user_hash_scales=hash_keys.user_hash_scales,
            user_biases=hash_keys.user_biases,

View on GitHub (pinned to 24c60942c5)

Solutions

  1. Set server_address to a pattern like 'http://loader-{}.loaders.svc:9090' in the dataset config.
  2. Check the env/config variable that populates it is set (e.g. echo $LOADER_ADDR).
  3. Verify the '{}' placeholder is present — a literal address without it will fail later at format time.

Example fix

// before
ds = PhoenixGrpcDataset.make(config={})  # server_address missing

// after
ds = PhoenixGrpcDataset.make(config={'server_address': 'http://loader-{}.loaders.svc:9090', ...})
Defensive patterns

Strategy: validation

Validate before calling

addr = config.get('server_address') or os.environ.get('PHOENIX_LOADER_ADDR')
if not addr or '{}' not in addr:
    raise SystemExit("server_address must be like 'http://loader-{}.loaders.svc:9090'")

Type guard

def is_valid_address_pattern(a: str) -> bool:
    return bool(a) and '{}' in a

Try / catch

try:
    ds = PhoenixGrpcDataset.make(config)
except ValueError as e:
    raise ConfigError(str(e)) from e

Prevention

When it happens

Trigger: Constructing PhoenixGrpcDataset without server_address; passing an empty string because the config key was misspelled or the env var unset; YAML config where server_address is null.

Common situations: Missing env var in a deployed pod; config key renamed between versions; copy-paste config from a local (non-gRPC) dataset variant.

Related errors


AI-assisted analysis of xai-org/x-algorithm@24c60942c5 (2026-08-28). Data as JSON: /api/errors/2fb513c7e95a7146. Report an issue: GitHub.