{"record":{"id":"d4130c3e16582354","repo":"xai-org/x-algorithm","slug":"resume-position-is-only-supported-in-metadata-mode","errorCode":null,"errorMessage":"resume_position is only supported in metadata mode (.valid_batches.json)","messagePattern":"resume_position is only supported in metadata mode \\(\\.valid_batches\\.json\\)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"phoenix/xrex/data/parquet_recsys.py","lineNumber":272,"sourceCode":"        interleave_k: int,\n        num_kafka_partitions: int,\n        skip_rows: int = 0,\n        date_range: tuple[str, str] | None = None,\n        continuous: bool = False,\n        poll_interval_s: float = 60.0,\n        resume_position: DataPosition | None = None,\n        min_timestamp_ms: int | None = None,\n        max_timestamp_ms: int | None = None,\n        conversion_delay_columns: list[str] | None = None,\n        include_action_delay_columns: bool = False,\n    ):\n        self._conversion_delay_columns = conversion_delay_columns\n        self._include_action_delay_columns = include_action_delay_columns\n        if metadata_path is None and index_path is None:\n            raise ValueError(\"Either metadata_path or index_path must be provided\")\n\n        if resume_position is not None and metadata_path is None:\n            raise ValueError(\n                \"resume_position is only supported in metadata mode (.valid_batches.json)\"\n            )\n\n        has_time_range = min_timestamp_ms is not None or max_timestamp_ms is not None\n        if has_time_range and metadata_path is None:\n            raise ValueError(\n                \"min_timestamp_ms/max_timestamp_ms require metadata mode (.valid_batches.json)\"\n            )\n\n        self._index_path = index_path\n        self._metadata_path = metadata_path\n        if metadata_path is not None:\n            if topic_dir is None:\n                topic_dir = str(Path(metadata_path).parent)\n            topic_dir = os.path.abspath(topic_dir)\n            self._topic_dir = topic_dir\n        self._path = str(Path(index_path).parent) if index_path else topic_dir or \"\"\n        self._batch_size = batch_size","sourceCodeStart":254,"sourceCodeEnd":290,"githubUrl":"https://github.com/xai-org/x-algorithm/blob/24c60942c5c5fdad3a6addffb4c6e6d2f228f04f/phoenix/xrex/data/parquet_recsys.py#L254-L290","documentation":"resume_position (used to continue training from a batch id) is only implemented for metadata mode, because it relies on the .valid_batches.json ordering maintained by metadata_path. Passing resume_position with index_path (and no metadata_path) raises ValueError at construction.","triggerScenarios":"ParquetRecsysDataset(..., index_path='files.txt', resume_position=1234); resuming a job after switching from metadata mode to index mode.","commonSituations":"Switching deployment from .valid_batches.json to a static index while keeping resume logic; config leftovers from a previous run mode.","solutions":["Provide metadata_path (and its .valid_batches.json) when using resume_position.","Or drop resume_position and restart from the beginning of the index.","Convert your file list into a .valid_batches.json to keep resume support."],"exampleFix":"# before\nds = ParquetRecsysDataset(..., index_path='files.txt', resume_position=500)  # ValueError\n\n# after\nds = ParquetRecsysDataset(..., metadata_path='topic.valid_batches.json', resume_position=500)","handlingStrategy":"validation","validationCode":"if resume_position is not None and metadata_path is None:\n    resume_position = None  # or fail config validation\n    logger.warning('resume_position ignored without metadata mode')","typeGuard":null,"tryCatchPattern":"try:\n    ds = ParquetRecsysDataset(...)\nexcept ValueError as e:\n    if 'resume_position' in str(e):\n        retry_without_resume()\n    else:\n        raise","preventionTips":["Encode mode-specific options separately in config so incompatible combos can't be expressed.","Document which options are metadata-mode-only."],"tags":["configuration","resume","dataset","argument-combination"],"backgroundTag":"invalid-argument-combination","analyzedSha":"24c60942c5c5fdad3a6addffb4c6e6d2f228f04f","analyzedAt":"2026-08-28T11:40:14.686Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}