xai-org/x-algorithm · error · ValueError
batch missing {ACTION_MULTIHOT_COLUMN}
Error message
batch missing {ACTION_MULTIHOT_COLUMN} What it means
fold_action_delays_into_multihot() folds per-action delay columns into the existing ACTION_MULTIHOT_COLUMN of the batch. If action delay columns are present but the multi-hot column is missing from the batch schema, there is nothing to fold into, so it raises ValueError naming the missing column.
Source
Thrown at phoenix/xrex/data/conversion_labels.py:91
def attach_delays(batch: pa.RecordBatch, delays: dict[str, np.ndarray]) -> pa.RecordBatch:
for name, mat in delays.items():
if mat.shape[0] != batch.num_rows:
raise ValueError(f"{name}: delay rows {mat.shape[0]} != batch rows {batch.num_rows}")
arr = pa.FixedSizeListArray.from_arrays(
pa.array(mat.reshape(-1), type=pa.int64()), mat.shape[1]
)
batch = batch.append_column(name, arr)
return batch
def fold_action_delays_into_multihot(batch: pa.RecordBatch, window_ms: int) -> pa.RecordBatch:
action_cols = [n for n in batch.schema.names if n.startswith(ACTION_DELAY_PREFIX)]
if not action_cols:
return batch
col_idx = batch.schema.get_field_index(ACTION_MULTIHOT_COLUMN)
if col_idx < 0:
raise ValueError(f"batch missing {ACTION_MULTIHOT_COLUMN}")
mh = batch.column(col_idx)
seq_len = mh.type.list_size
vocab = mh.type.value_type.list_size
bits = (
mh.flatten()
.flatten()
.to_numpy(zero_copy_only=False)
.astype(np.bool_)
.reshape(batch.num_rows, seq_len, vocab)
.copy()
)
mask_name = next(
(n for n in ("newEventMask", "newEventMaskSeq") if n in batch.schema.names), None
)
if mask_name is None:
raise ValueError("batch missing newEventMask; conversion-label folding is candidate-only")
mask_col = batch.column(mask_name)
is_candidate = (View on GitHub (pinned to 24c60942c5)
Solutions
- Ensure the source batch files contain the multi-hot column (regenerate or use newer data).
- Remove the projection/filter that drops the multi-hot column before folding.
- Disable action-delay folding (include_action_delay_columns=False) if multi-hot is not needed.
Example fix
// before batch = fold_action_delays_into_multihot(batch_wo_multihot, window_ms) # ValueError // after batch = fold_action_delays_into_multihot(batch_with_multihot, window_ms)
Defensive patterns
Strategy: validation
Validate before calling
has_multihot = ACTION_MULTIHOT_COLUMN in batch.schema.names has_action_cols = any(n.startswith(ACTION_DELAY_PREFIX) for n in batch.schema.names) assert not (has_action_cols and not has_multihot), 'cannot fold without multi-hot'
Type guard
def can_fold(batch) -> bool:
names = batch.schema.names
return (ACTION_MULTIHOT_COLUMN in names
and any(n.startswith('action_delay_') for n in names)) Try / catch
try:
batch = fold_action_delays_into_multihot(batch, w)
except ValueError as e:
logger.error('folding failed: %s', e); raise Prevention
- Assert required columns exist right after reading the first batch of a run.
- Keep column projections from dropping the multi-hot column when action delays are enabled.
When it happens
Trigger: Producer path with include_action_delay_columns=True on a batch schema that predates the multi-hot feature; a batch where the multi-hot column was renamed or dropped upstream; delay columns attached but multi-hot column filtered out by a column projection.
Common situations: Training on older datasets lacking the multi-hot column; column pruning config that excludes ACTION_MULTIHOT_COLUMN.
Related errors
- sidecar {sidecar_path} missing column(s) {missing}; availabl
- not a partition batch file path: {batch_file_path}
- batch missing newEventMask; conversion-label folding is cand
- type checking expression %s failed: invalid argument type: %
- Non-optional parameter %s must be declared before optional p
AI-assisted analysis of xai-org/x-algorithm@24c60942c5 (2026-08-28).
Data as JSON: /api/errors/ed5a1e280abdfc7b.
Report an issue: GitHub.