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
- Set server_address to a pattern like 'http://loader-{}.loaders.svc:9090' in the dataset config.
- Check the env/config variable that populates it is set (e.g. echo $LOADER_ADDR).
- 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
- Fail fast on config load: require the key and assert the '{}' placeholder.
- Use env-var defaults with a clear error when unset.
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
- {cls.__name__} must set TASK_GENERATOR_TYPE to be registered
- Duplicate generator registration for {key!r}: {existing.__na
- No task generator registered for type {cfg.type!r}. Register
- No generators provided
- All weights must be positive
AI-assisted analysis of xai-org/x-algorithm@24c60942c5 (2026-08-28).
Data as JSON: /api/errors/2fb513c7e95a7146.
Report an issue: GitHub.