This page contains the auto-generated API reference documentation.
Stable integration API¶
sequifier.api is the stable model boundary for sibling packages. It exposes
the composable network, portable artifacts, explicit encode/decode and tracing
types, canonical parameter naming, and parameter catalogs without exposing the
training lifecycle.
Stable sibling-facing, model-level Sequifier API.
- class sequifier.api.CaptureRequest(sites: 'tuple[str, ...]', detach: 'bool' = True, retain_grad: 'bool' = False, clone: 'bool' = False, positions: 'slice | Tensor | None' = None)[source]¶
- clone: bool = False¶
- detach: bool = True¶
- positions: slice | Tensor | None = None¶
- retain_grad: bool = False¶
- sites: tuple[str, ...]¶
- class sequifier.api.ComposableTransformerNetwork(*, backbone: Module, interfaces: dict[str, sequifier.model.network.ModelInterfaceModule], attention_mask_policy: Tensor, context_length: int)[source]¶
A shared backbone with explicitly selected named model interfaces.
- property context_length: int¶
- decode_representation(representation: Tensor, request: DecodeRequest = DecodeRequest(target_columns=None, positions=None, apply_output_transform=False, apply_final_norm=False), *, teacher_targets: dict[str, Tensor] | None = None, teacher_valid_mask: Tensor | None = None, interface_name: str | None = None, trace: TraceContext | None = None) dict[str, Tensor][source]¶
- property dim_model: int¶
- encode(features: dict[str, Tensor], metadata: dict[str, Tensor], *, interface_name: str | None = None, trace: TraceContext | None = None) Tensor[source]¶
- forward(features: dict[str, Tensor], metadata: dict[str, Tensor], *, teacher_targets: dict[str, Tensor] | None = None, teacher_valid_mask: Tensor | None = None, interface_name: str | None = None, trace: TraceContext | None = None) ModelOutput[source]¶
Define the computation performed at every call.
Should be overridden by all subclasses.
Note
Although the recipe for forward pass needs to be defined within this function, one should call the
Moduleinstance afterwards instead of this since the former takes care of running the registered hooks while the latter silently ignores them.
- regularization_loss(interface_name: str | None = None) Tensor[source]¶
Return decoder regularization through an explicit model contract.
- resolve_interface(interface_name: str | None) ModelInterfaceModule[source]¶
- trace(features: dict[str, Tensor], metadata: dict[str, Tensor], request: CaptureRequest, *, interface_name: str | None = None, interventions: tuple[InterventionBinding, ...] = ()) TracedModelOutput[source]¶
- class sequifier.api.DecodeRequest(target_columns: 'tuple[str, ...] | None' = None, positions: 'slice | Tensor | None' = None, apply_output_transform: 'bool' = False, apply_final_norm: 'bool' = False)[source]¶
- apply_final_norm: bool = False¶
- apply_output_transform: bool = False¶
- positions: slice | Tensor | None = None¶
- target_columns: tuple[str, ...] | None = None¶
- class sequifier.api.EncodeRequest(interface_name: 'str | None' = None)[source]¶
- interface_name: str | None = None¶
- class sequifier.api.InterventionBinding(site: 'str', intervention: 'Intervention')[source]¶
- intervention: Intervention¶
- site: str¶
- class sequifier.api.ModelArtifact(format_version: 'int', model_config: 'ModelExecutionConfig', model_state_dict: 'dict[str, Tensor]', metadata: 'ModelArtifactMetadata')[source]¶
- format_version: int¶
- classmethod from_state_dict(payload: Mapping[str, Any]) ModelArtifact[source]¶
- metadata: ModelArtifactMetadata¶
- model_config: ModelExecutionConfig¶
- model_state_dict: dict[str, torch.Tensor]¶
- class sequifier.api.ModelArtifactMetadata(trace_sites: 'tuple[str, ...]' = (), provenance: 'dict[str, Any]' = <factory>)[source]¶
- provenance: dict[str, Any]¶
- trace_sites: tuple[str, ...] = ()¶
- class sequifier.api.ModelExecutionConfig(values: dict[str, Any])[source]¶
Serializable configuration required to reconstruct model execution.
- classmethod from_training_config(config: Any) ModelExecutionConfig[source]¶
- values: dict[str, Any]¶
- class sequifier.api.ModelInterfaceModule(*, ingestion: Module, ingestion_adapter: Module, decoder: Module, decoder_input_width: int, decoding_support: int, prediction_length: int, target_columns: tuple[str, ...], target_column_types: dict[str, str])[source]¶
One named ingestion/adapter/decoder route around the shared backbone.
- decode(representation: Tensor, request: DecodeRequest = DecodeRequest(target_columns=None, positions=None, apply_output_transform=False, apply_final_norm=False), *, teacher_targets: dict[str, Tensor] | None = None, teacher_valid_mask: Tensor | None = None, trace: TraceContext | None = None) dict[str, Tensor][source]¶
- decode_with_auxiliary(representation: Tensor, request: DecodeRequest = DecodeRequest(target_columns=None, positions=None, apply_output_transform=False, apply_final_norm=False), *, teacher_targets: dict[str, torch.Tensor] | None = None, teacher_valid_mask: Tensor | None = None, trace: TraceContext | None = None) tuple[dict[str, torch.Tensor], dict[str, tuple[torch.Tensor, ...]]][source]¶
- class sequifier.api.ModelOutput(logits: 'dict[str, Tensor]', prediction_positions: 'slice | Tensor', auxiliary_logits: 'dict[str, tuple[Tensor, ...]]' = <factory>)[source]¶
- auxiliary_logits: dict[str, tuple[torch.Tensor, ...]]¶
- logits: dict[str, torch.Tensor]¶
- prediction_positions: slice | Tensor¶
- class sequifier.api.ParameterCatalog(model: Module)[source]¶
- descriptors() tuple[sequifier.model.parameter_catalog.ParameterDescriptor, ...][source]¶
- select(*, component: str | None = None, semantic_group: str | None = None) tuple[sequifier.model.parameter_catalog.ParameterDescriptor, ...][source]¶
- class sequifier.api.ParameterDescriptor(parameter_id: 'str', canonical_name: 'str', aliases: 'tuple[str, ...]', component: 'ParameterComponent', semantic_group: 'str', parameter_kind: 'ParameterKind', shape: 'tuple[int, ...]', dtype: 'torch.dtype', shared_parameter_id: 'str | None', depth_parameter: 'bool' = False, branch_path: 'tuple[str, ...]' = ())[source]¶
- aliases: tuple[str, ...]¶
- branch_path: tuple[str, ...] = ()¶
- canonical_name: str¶
- component: Literal['ingestion', 'backbone', 'decoder']¶
- depth_parameter: bool = False¶
- dtype: dtype¶
- parameter_id: str¶
- parameter_kind: Literal['weight', 'bias', 'other']¶
- semantic_group: str¶
- shape: tuple[int, ...]¶
- class sequifier.api.TraceSite(name: 'str', axes: 'tuple[str, ...]', width: 'int | None' = None)[source]¶
- axes: tuple[str, ...]¶
- name: str¶
- width: int | None = None¶
- class sequifier.api.TracedModelOutput(output: 'ModelOutput', captures: 'dict[str, Tensor]' = <factory>)[source]¶
- captures: dict[str, torch.Tensor]¶
- output: ModelOutput¶
- sequifier.api.build_transformer_network(config: Any, *, device: device, initialize: bool = True, logger: Any | None = None) BuiltModel[source]¶
Build one shared backbone and every distinct named model interface.
- sequifier.api.canonical_parameter_name(name: str) str[source]¶
Remove compiler/distributed wrapper segments from one parameter name.
- sequifier.api.canonicalize_state_dict(state_dict: Mapping[str, T]) dict[str, T][source]¶
Return a canonical state dict and reject ambiguous normalizations.
- sequifier.api.load_model_artifact(path: str | Path, *, device: str = 'cpu', interface_name: str | None = None) tuple[Any, Any, sequifier.artifacts.model_artifact.ModelArtifact][source]¶
Load a portable artifact and return network, resolved config, and schema.
- sequifier.api.load_weights_from_run_checkpoint(path: str | Path, *, device: str = 'cpu', interface_name: str | None = None) tuple[Any, Any, sequifier.artifacts.model_artifact.ModelArtifact][source]¶
Training integration API¶
Update-aware integrations use sequifier.training_api for optimization,
step identity, directives, distributed strategies, and run state.
Stable update-aware primitives for training integrations.
- class sequifier.training_api.DistributedDataParallelStrategy(rank: 'int' = 0, local_rank: 'int' = 0, world_size: 'int' = 1, device: 'torch.device' = device(type='cpu'), find_unused_parameters: 'bool' = False)[source]¶
-
- find_unused_parameters: bool = False¶
- class sequifier.training_api.DistributedStrategy(*args, **kwargs)[source]¶
-
- device: device¶
- local_rank: int¶
- rank: int¶
- world_size: int¶
- class sequifier.training_api.FullyShardedStrategy(rank: 'int' = 0, local_rank: 'int' = 0, world_size: 'int' = 1, device: 'torch.device' = device(type='cpu'), find_unused_parameters: 'bool' = False, cpu_offload: 'bool' = False, mixed_precision_dtype: 'torch.dtype | None' = None)[source]¶
-
- cpu_offload: bool = False¶
- mixed_precision_dtype: dtype | None = None¶
- class sequifier.training_api.LocalStrategy(rank: 'int' = 0, local_rank: 'int' = 0, world_size: 'int' = 1, device: 'torch.device' = device(type='cpu'))[source]¶
-
- device: device = device(type='cpu')¶
- local_rank: int = 0¶
- rank: int = 0¶
- world_size: int = 1¶
- class sequifier.training_api.OptimizationRuntime(optimizer: 'Optimizer', scheduler: 'Any', scaler: 'GradScaler', scheduler_policy: 'SchedulerPolicy', gradient_policy: 'GradientPolicy', optimizer_step: 'int' = 0, skip_next_scheduler_step: 'bool' = False)[source]¶
-
- accumulate(loss: Any, identity: StepIdentity, integrations: IntegrationManager, network: Module) None[source]¶
- complete_step(network: Module, identity: StepIdentity, integrations: IntegrationManager, policy: UpdatePolicy) StepResult[source]¶
- classmethod create(training: Any, device: str, parameters: Iterable[Parameter] | list[dict[str, Any]], *, parameter_catalog: ParameterCatalog | None = None, phase_epochs: int | None = None) OptimizationRuntime[source]¶
- gradient_policy: GradientPolicy¶
- optimizer: Optimizer¶
- optimizer_step: int = 0¶
- scaler: GradScaler¶
- scheduler: Any¶
- scheduler_policy: SchedulerPolicy¶
- skip_next_scheduler_step: bool = False¶
- class sequifier.training_api.RunState(run_id: 'str' = <factory>, session_id: 'str' = <factory>, phase_index: 'int' = 0, phase_epoch: 'int' = 0, phase_epoch_complete: 'bool' = False, source_index: 'int' = 0, source_scheduler_state: 'dict[str, Any]' = <factory>, iterator_positions: 'dict[str, int]' = <factory>, epoch: 'int' = 0, batch: 'int' = 0, global_batch_step: 'int' = 0, optimizer_step: 'int' = 0, accumulation_index: 'int' = 0, best_validation_loss: 'float' = inf, epochs_without_improvement: 'int' = 0, best_model_state_dict: 'dict[str, Tensor] | None' = None, backbone_parent_revision_id: 'str | None' = None)[source]¶
- accumulation_index: int = 0¶
- backbone_parent_revision_id: str | None = None¶
- batch: int = 0¶
- best_model_state_dict: dict[str, torch.Tensor] | None = None¶
- best_validation_loss: float = inf¶
- epoch: int = 0¶
- epochs_without_improvement: int = 0¶
- global_batch_step: int = 0¶
- iterator_positions: dict[str, int]¶
- optimizer_step: int = 0¶
- phase_epoch: int = 0¶
- phase_epoch_complete: bool = False¶
- phase_index: int = 0¶
- run_id: str¶
- session_id: str¶
- source_index: int = 0¶
- source_scheduler_state: dict[str, Any]¶
- class sequifier.training_api.StepIdentity(epoch: 'int', batch: 'int', global_batch_step: 'int', optimizer_step: 'int', accumulation_index: 'int', accumulation_steps: 'int', rank: 'int', world_size: 'int')[source]¶
- accumulation_index: int¶
- accumulation_steps: int¶
- batch: int¶
- epoch: int¶
- global_batch_step: int¶
- optimizer_step: int¶
- rank: int¶
- world_size: int¶
- class sequifier.training_api.StepResult(applied: 'bool', overflow: 'bool', stop_requested: 'bool')[source]¶
- applied: bool¶
- overflow: bool¶
- stop_requested: bool¶
- class sequifier.training_api.TrainingDirective(parameter_group_updates: 'dict[str, dict[str, Any]]' = <factory>, gradient_clip_norm: 'float | None' = None, skip_optimizer_step: 'bool' = False, stop_after_step: 'bool' = False, reason: 'str | None' = None, scheduler_state_updates: 'dict[str, Any]' = <factory>, disable_gradient_clipping: 'bool' = False, skip_scheduler_step: 'bool' = False)[source]¶
- disable_gradient_clipping: bool = False¶
- gradient_clip_norm: float | None = None¶
- parameter_group_updates: dict[str, dict[str, Any]]¶
- reason: str | None = None¶
- scheduler_state_updates: dict[str, Any]¶
- skip_optimizer_step: bool = False¶
- skip_scheduler_step: bool = False¶
- stop_after_step: bool = False¶
Preprocessing Config¶
- class sequifier.config.preprocess_config.PreprocessorModel(*, depth_layouts: ~sequifier.config.depth_layout.DepthLayoutRegistryModel = <factory>, project_root: str, preprocessing_data_path: str, read_format: str = 'csv', write_format: str = 'parquet', merge_output: bool = True, allow_sequence_splitting: bool = False, selected_columns: list[str] | None = None, categorical_columns: list[str] | None = None, real_columns: list[str] | None = None, column_data_types: dict[str, str] | None = None, normalize_real_columns: bool = True, normalize_on_all_data: bool = False, split_ratios: list[float] | None = None, split_method: str = 'within_sequence', split_column: str | None = None, split_values: list[typing.Union[int, str, datetime.date, datetime.datetime]] | None = None, window_length: int | None = None, window_lengths: list[int] | None = None, max_target_offset: int = 1, window_stride: int | None = None, prediction_aligned_splits: list[int] = <factory>, prediction_length: int | None = None, prediction_alignment_steps: int = 1, target_offset: int | None = None, max_rows: int | None = None, seed: int = 1010, n_cores: int | None = None, batches_per_file: int = 1024, process_by_file: bool = True, continue_preprocessing: bool = False, use_precomputed_maps: list[str] | None = None, cardinality_config: dict[str, sequifier.config.preprocess_config.CardinalityLimitModel] = <factory>, metadata_config_path: str | None = None, mask_column: str | None = None, curriculum_column: str | list[str] | None = None)[source]¶
Top-level preprocessing config.
- model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'extra': 'forbid'}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
Training Config¶
Canonical Sequifier training configuration and resolution.
The concise singleton authoring surface is normalized to the canonical named schema before validation. This module intentionally contains no migration adapter for the historical flat single-dataset YAML schema. Runtime consumers select a dataset, part, or model interface explicitly.
- class sequifier.config.train_config.DatasetTrainingSpecModel(*, model_interface: str, parts: dict[str, sequifier.config.train_config.DatasetPartSpecModel], criterion: dict[str, str], class_weights: dict[str, list[float]] | None = None, loss_weights: dict[str, float] | None = None, class_share_log_columns: list[str] = <factory>, freeze: ~sequifier.config.train_config.DatasetFreezingSpecModel = <factory>)[source]¶
- model_config: ClassVar[ConfigDict] = {'extra': 'forbid'}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class sequifier.config.train_config.GlobalTrainingSpecModel(*, read_format: ~typing.Literal['csv', 'parquet', 'pt'] = 'parquet', training_objective: str, context_length: int, target_offset: int = 1, window_stride: int | None = None, inference_batch_size: int, batch_size: int, accumulation_steps: int | None = None, learning_rate: float | None = None, optimizer: ~sequifier.config.optimizer_config.OptimizerPlan | ~sequifier.config.components.ComponentSpec = <factory>, scheduler: ~sequifier.config.components.ComponentSpec = <factory>, scheduler_step_on: ~typing.Literal['epoch', 'batch'] = 'epoch', reset_optimization_on_phase: bool = True, gradient_clip: float | None = None, bert_spec: ~sequifier.config.components.BERTSpecModel | None = None, next_occurrence_config: ~sequifier.config.components.NextOccurrenceConfigModel | None = None, device_max_concat_length: int = 12, log_interval: int = 10, early_stopping_epochs: int | None = None, save_interval_epochs: int = 1, save_latest_interval_minutes: float | None = None, save_interval_minutes: float | None = None, save_interval_batches: int | None = None, save_interval_val_loss: bool = True, calculate_validation_loss_on_initialization: bool = True, resume: ~sequifier.config.components.ResumeConfig | None = None, enforce_determinism: bool = False, distributed: bool = False, load_full_data_to_ram: bool = True, max_ram_gb: int | float = 16, world_size: int = 1, num_workers: int = 0, backend: str = 'nccl', layer_type_dtypes: dict[str, str] | None = None, layer_autocast: bool = False, data_parallelism: ~typing.Literal['ddp', 'fsdp'] | None = None, fsdp_cpu_offload: bool | None = None, torch_compile: ~typing.Literal['outer', 'inner', 'none'] = 'outer', float32_matmul_precision: ~typing.Literal['highest', 'high', 'medium'] = 'highest')[source]¶
Run-wide data, optimization, precision, and distribution settings.
- model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'extra': 'forbid'}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class sequifier.config.train_config.LoadedTrainConfig(config: 'SequifierConfig', resolved: 'ResolvedSequifierConfig', metadata: 'dict[str, DatasetMetadata]')[source]¶
- class sequifier.config.train_config.ModelInterfaceSpecModel(*, input_columns: list[str], target_columns: list[str], categorical_hashing: dict[str, typing.Annotated[typing.Union[sequifier.config.components.MultiHashEmbeddingConfig, sequifier.config.components.QRHashEmbeddingConfig], FieldInfo(annotation=NoneType, required=True, discriminator='type')]] = <factory>, categorical_decoder_special_tokens: dict[str, list[typing.Literal['unknown', 'other', 'mask']]] = <factory>, feature_layout: ~sequifier.config.components.FeatureLayoutRegistryModel | None = None, ingestion: ~sequifier.config.components.EmbeddingIngestionConfig | ~sequifier.config.components.PassthroughIngestionConfig | ~sequifier.config.components.FeaturePoolIngestionConfig | ~sequifier.config.components.GroupedIngestionConfig | ~sequifier.config.components.SiameseIngestionConfig | ~sequifier.config.components.TemporalConvIngestionConfig | ~sequifier.config.components.StructuredIngestionConfig | ~sequifier.config.components.DepthTransformerIngestionConfig | ~sequifier.config.components.CompositeIngestionConfig, decoder: ~sequifier.config.components.LinearDecoderComponentConfig | ~sequifier.config.components.MLPDecoderComponentConfig | ~sequifier.config.components.AutoregressiveTransformerDecoderComponentConfig | ~sequifier.config.components.CompositeDecoderComponentConfig)[source]¶
Architecture and selected-column contract for one named model route.
- model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'extra': 'forbid'}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class sequifier.config.train_config.ModelSpecModel(*, backbone: BackboneComponentConfig, interfaces: dict[str, sequifier.config.train_config.ModelInterfaceSpecModel])[source]¶
One shared backbone and one or more named interfaces.
- model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'extra': 'forbid'}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class sequifier.config.train_config.ResolvedSequifierConfig(*, project_root: str, model_name: str, device: str, seed: int, global_training: GlobalTrainingSpecModel, model: ModelSpecModel, dataset_training: dict[str, sequifier.config.train_config.ResolvedDatasetTrainingSpec], training_plan: list[sequifier.config.train_config.ResolvedTrainingPhase], curriculum_training: bool = False, curriculum_column: str | None = None, evaluation_sources: list[sequifier.config.train_config.ResolvedTrainingSource], evaluation_monitor: EvaluationMonitorSpecModel | None, export_generative_model: bool, export_embedding_model: bool, embedding_layer_names: list[str], export_onnx: bool, export_pt: bool, export_with_dropout: bool = False)[source]¶
Runtime configuration after all dataset parts and interfaces resolve.
- model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'extra': 'forbid'}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class sequifier.config.train_config.SequifierConfig(*, project_root: str, model_name: str, device: str, seed: int = 1010, global_training: ~sequifier.config.train_config.GlobalTrainingSpecModel, model: ~sequifier.config.train_config.ModelSpecModel, dataset_training: dict[str, sequifier.config.train_config.DatasetTrainingSpecModel], training_plan: ~sequifier.config.train_config.TrainingPlanModel, evaluation: ~sequifier.config.train_config.EvaluationSpecModel | None = None, export_generative_model: bool = True, export_embedding_model: bool = False, embedding_layer_names: list[typing.Annotated[str, Strict(strict=True)]] = <factory>, export_onnx: bool = True, export_pt: bool = False, export_with_dropout: bool = False)[source]¶
Training configuration with singleton authoring normalization.
- model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'extra': 'forbid'}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- sequifier.config.train_config.TrainModel¶
alias of
ResolvedSequifierConfig
- class sequifier.config.train_config.TrainingPlanModel(*, curriculum_training: bool = False, curriculum_column: str | None = None, phases: list[sequifier.config.train_config.TrainingPhaseSpecModel])[source]¶
- model_config: ClassVar[ConfigDict] = {'extra': 'forbid'}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- sequifier.config.train_config.resolve_sequifier_config(config: SequifierConfig, metadata: DatasetMetadata | dict[str, sequifier.config.metadata.DatasetMetadata], *, part_overrides: dict[str, dict[str, str]] | None = None) ResolvedSequifierConfig[source]¶
Resolve every dataset part, compatibility contract, and source.
Inference Config¶
- class sequifier.config.infer_config.InferenceConfig(*, project_root: str, preprocessing_data_path: str | None = None, metadata_config_path: str | None = None, model_path: str | list[str], model_type: str, training_objective: str, data_path: str | None = None, training_config_path: str | None = None, dataset: str | None = None, part: str | None = None, model_interface: str | None = None, read_format: str = 'parquet', write_format: str = 'csv', input_columns: list[str] | None, target_columns: list[str], column_data_types: dict[str, str] | None = None, target_column_types: dict[str, str] | None = None, deterministic: bool = False, output_probabilities: bool = False, decode_categories: bool = True, seed: int = 1010, device: str, context_length: int, target_offset: int = 1, window_stride: int | None = None, prediction_length: int | None = None, decoder_support: int = 1, prediction_alignment_steps: int = 1, inference_batch_size: int = 1, sample_from_distribution_columns: list[str] | None = None, infer_with_dropout: bool = False, autoregressive: bool = False, generation_steps: int | None = None)[source]¶
User-authored configuration for one inference run.
- model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'extra': 'forbid'}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class sequifier.config.infer_config.ResolvedInferenceConfig(*, project_root: str, preprocessing_data_path: str | None = None, metadata_config_path: str | None = None, model_path: str | list[str], model_type: str, training_objective: str, data_path: str, training_config_path: str | None = None, dataset: str | None = None, part: str | None = None, model_interface: str | None = None, read_format: str = 'parquet', write_format: str = 'csv', input_columns: list[str], target_columns: list[str], column_data_types: dict[str, str], target_column_types: dict[str, str], deterministic: bool = False, output_probabilities: bool = False, decode_categories: bool = True, seed: int = 1010, device: str, context_length: int, target_offset: int = 1, window_stride: int | None = None, prediction_length: int | None = None, decoder_support: int = 1, prediction_alignment_steps: int = 1, inference_batch_size: int = 1, sample_from_distribution_columns: list[str] | None = None, infer_with_dropout: bool = False, autoregressive: bool = False, generation_steps: int | None = None, categorical_columns: list[str], real_columns: list[str], storage_layout: StoredWindowLayout, aligned_data_path: bool = False, window_view: ModelWindowView, dataset_metadata: DatasetMetadata | None = None)[source]¶
Internal inference config after dataset metadata has been resolved.
- model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'extra': 'forbid'}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- sequifier.config.infer_config.resolve_inference_config(config: InferenceConfig, metadata: DatasetMetadata, *, allow_wider_artifact_folder: bool = False) ResolvedInferenceConfig[source]¶
Return an inference config with all metadata-derived values populated.
Config Composition and Metadata¶
Composition helpers for user-authored configuration fragments.
- sequifier.config.composition.deep_merge_config(base: Mapping[str, Any], override: Mapping[str, Any], *, atomic_paths: frozenset[tuple[str, ...]] = frozenset({('global_training', 'bert_spec', 'span_masking'), ('global_training', 'optimizer'), ('global_training', 'scheduler'), ('model', 'backbone')})) dict[str, Any][source]¶
Return a deep merge of two authored mappings.
Dictionaries merge recursively. Lists and scalar values are replaced, and an explicit
Noneclears the inherited value. Neither input is mutated.
- sequifier.config.composition.load_composed_yaml_config(config_path: str, *, atomic_paths: frozenset[tuple[str, ...]] = frozenset({('global_training', 'bert_spec', 'span_masking'), ('global_training', 'optimizer'), ('global_training', 'scheduler'), ('model', 'backbone')})) dict[str, Any][source]¶
Load one YAML config and its direct, complementary fragments.
Relative fragment paths are resolved against the entry config’s
project_root. Fragments cannot include further fragments. Duplicate authored fields are rejected before the resulting mapping reaches the command-specific Pydantic model.
- sequifier.config.composition.merge_complementary_config_fragments(fragments: Iterable[tuple[str, collections.abc.Mapping[str, Any]]], *, atomic_paths: frozenset[tuple[str, ...]] = frozenset({('global_training', 'bert_spec', 'span_masking'), ('global_training', 'optimizer'), ('global_training', 'scheduler'), ('model', 'backbone')})) dict[str, Any][source]¶
Merge sourced fragments while rejecting duplicate authored fields.
- sequifier.config.composition.merge_config_fragments(fragments: Iterable[Mapping[str, Any]], *, atomic_paths: frozenset[tuple[str, ...]] = frozenset({('global_training', 'bert_spec', 'span_masking'), ('global_training', 'optimizer'), ('global_training', 'scheduler'), ('model', 'backbone')})) dict[str, Any][source]¶
Merge authored fragments in order, with later fragments taking priority.
Typed preprocessing metadata used during config resolution.
- class sequifier.config.metadata.DatasetMetadata(*, depth_layouts: ~sequifier.config.depth_layout.DepthLayoutRegistryModel = <factory>, tensor_payload_version: int = 1, split_paths: list[str] = <factory>, split_index: int | None = None, column_data_types: dict[str, str] = <factory>, n_classes: dict[str, int] = <factory>, id_maps: dict[str, dict[str | int, int]] = <factory>, cardinality_config: dict[str, dict[str, typing.Any]] = <factory>, special_token_ids: dict[str, int] = <factory>, selected_columns_statistics: dict[str, dict[str, float]] = <factory>, normalize_real_columns: bool = True, normalize_on_all_data: bool = False, prediction_aligned_splits: list[int] = <factory>, prediction_alignment_steps: int = 1, prediction_length: int | None = None, target_offset: int | None = None, window_length: int, window_lengths: list[int] | None = None, max_target_offset: int = 1, stored_window_layout_version: int = 2, **extra_data: ~typing.Any)[source]¶
The stable subset of preprocessing metadata consumed by other commands.
- model_config: ClassVar[ConfigDict] = {'extra': 'allow', 'populate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- sequifier.config.metadata.extract_inline_metadata(values: dict[str, Any]) tuple[dict[str, Any], dict[str, Any] | None][source]¶
Split the historical
skip_metadatarepresentation into two mappings.
- sequifier.config.metadata.load_dataset_metadata(path: str) DatasetMetadata[source]¶
Load and validate one preprocessing metadata JSON file.
Hyperparameter Search Config¶
Canonical hyperparameter-search configuration.
Hyperparameter search always starts from a canonical authored training config and applies recursive parameters. Historical self-contained search configs and flat-schema base configs are intentionally unsupported.
- class sequifier.config.hyperparameter_search_config.CanonicalHyperparameterSearchConfig(*, base_config_path: str, parameters: dict[str, Any], project_root: str, name: str, method: Literal['bayesian', 'sample', 'grid'] = 'bayesian', global_seed: int | None = None, trials: int | None = None, prune_trials: bool = True, pruning_warmup_epochs: int | None = None, pruning_warmup_batches: int | None = None, model_config_write_path: str, evaluation_inference_config: str | None = None, evaluation_script: str | None = None, evaluation_metric_directions: list[Literal['minimize', 'maximize']] | None = None, evaluation_metrics: list[str] | None = None)[source]¶
Search controls and a recursive sampler over one canonical train config.
- model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'extra': 'forbid', 'populate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_post_init(context: Any, /) None¶
This function is meant to behave like a BaseModel method to initialize private attributes.
It takes context as an argument since that’s what pydantic-core passes when calling it.
- Parameters:
self – The BaseModel instance.
context – The context.
- sample_trial(trial: Any, run_index: int) SequifierConfig[source]¶
Sample and validate one concrete canonical authored training config.
- sequifier.config.hyperparameter_search_config.compile_canonical_hyperparameter_search_config(config_path: str, config_values: dict[str, Any], skip_metadata: bool) CanonicalHyperparameterSearchConfig[source]¶
Compile base-training plus recursive parameters into a canonical sampler.
- sequifier.config.hyperparameter_search_config.load_hyperparameter_search_config(config_path: str, skip_metadata: bool) CanonicalHyperparameterSearchConfig[source]¶
Load a canonical base-config hyperparameter search.
Non-standard Optimizers¶
- class sequifier.optimizers.ademamix.AdEMAMix(params={}, lr=0.001, betas=(0.9, 0.999, 0.9999), eps=1e-08, weight_decay=0, alpha=5.0, T_alpha_beta3=None)[source]¶
AdEMAMix optimizer.
Configuration for explicit parameter routing and optimizer groups.
- class sequifier.config.optimizer_config.OptimizerGroupSpec(*, id: str, select: OptimizerSelector | Literal['otherwise'], optimizer: ComponentSpec, learning_rate: float, base_learning_rate: float | None = None)[source]¶
One named route and the optimizer applied to its parameters.
- model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'frozen': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class sequifier.config.optimizer_config.OptimizerPlan(*, groups: list[sequifier.config.optimizer_config.OptimizerGroupSpec])[source]¶
Ordered, exhaustive optimizer routes with a final fallback.
- model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'frozen': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class sequifier.config.optimizer_config.OptimizerSelector(*, semantic_groups: list[str] | None = None, component: Literal['ingestion', 'backbone', 'decoder'] | None = None, parameter_kind: Literal['weight', 'bias', 'other'] | None = None, ndim: int | None = None)[source]¶
Match parameter catalog descriptors; supplied conditions are conjunctive.
- model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'frozen': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- sequifier.config.optimizer_config.resolve_plan_scheduler_arguments(plan: OptimizerPlan, scheduler: ComponentSpec) dict[str, Any][source]¶
Resolve scheduler rate boundaries from the ordered optimizer plan.
Route catalog parameters into a standard, checkpointable optimizer.
- class sequifier.optimizers.plan.CompositeOptimizer(groups: tuple[sequifier.optimizers.plan.RoutedOptimizerGroup, ...])[source]¶
Expose several disjoint optimizers as one ordinary PyTorch optimizer.
Child groups and state are shared with this facade. This lets schedulers, gradient scaling, integrations, and PyTorch state-dict helpers operate on one optimizer with the usual
stateandparam_groupslayout.- load_state_dict(state_dict: dict[str, Any]) None[source]¶
Load the optimizer state.
- Parameters:
state_dict (dict) – optimizer state. Should be an object returned from a call to
state_dict().
Warning
Make sure this method is called after initializing
torch.optim.lr_scheduler.LRScheduler, as calling it beforehand will overwrite the loaded learning rates.Note
The names of the parameters (if they exist under the “param_names” key of each param group in
state_dict()) will not affect the loading process. To use the parameters’ names for custom cases (such as when the parameters in the loaded state dict differ from those initialized in the optimizer), a customregister_load_state_dict_pre_hookshould be implemented to adapt the loaded dict accordingly. Ifparam_namesexist in loaded state dictparam_groupsthey will be saved and override the current names, if present, in the optimizer state. If they do not exist in loaded state dict, the optimizerparam_nameswill remain unchanged.Example
>>> # xdoctest: +SKIP >>> optimizer = ... # initialized optimizer matching the saved state >>> scheduler1 = torch.optim.lr_scheduler.LinearLR( ... optimizer, ... start_factor=0.1, ... end_factor=1, ... total_iters=20, ... ) >>> scheduler2 = torch.optim.lr_scheduler.CosineAnnealingLR( ... optimizer, ... T_max=80, ... eta_min=3e-5, ... ) >>> lr = torch.optim.lr_scheduler.SequentialLR( ... optimizer, ... schedulers=[scheduler1, scheduler2], ... milestones=[20], ... ) >>> lr.load_state_dict(torch.load("./save_seq.pt")) >>> # now load the optimizer checkpoint after loading the LRScheduler >>> optimizer.load_state_dict(torch.load("./save_optim.pt"))
- sequifier.optimizers.plan.route_optimizer_parameters(plan: OptimizerPlan, catalog: ParameterCatalog, parameters: Iterable[Parameter]) tuple[sequifier.optimizers.plan.RoutedOptimizerGroup, ...][source]¶
Assign every supplied trainable parameter once, rejecting ambiguous routes.
Internals¶
- sequifier.sequifier.build_args_config(args: Any) dict[str, Any][source]¶
Build config overrides from parsed CLI args.
- class sequifier.preprocess.BatchArrays(sequence_ids: ndarray, item_positions: ndarray, values: dict[str, numpy.ndarray], curriculum_values: dict[str, numpy.ndarray], split_values: ndarray | None, run_starts: ndarray, run_stops: ndarray)[source]¶
Columnar NumPy views for one ordered worker batch.
- class sequifier.preprocess.PredictionAlignment(splits: tuple[int, ...], prediction_length: int, target_offset: int, steps: int = 1)[source]¶
Preprocessing contract for split-end-aligned prediction groups.
- class sequifier.preprocess.Preprocessor(project_root: str, continue_preprocessing: bool, preprocessing_data_path: str, read_format: str, write_format: str, merge_output: bool, allow_sequence_splitting: bool, selected_columns: list[str] | None, split_ratios: list[float] | None, window_length: int | None, window_stride: int, max_rows: int | None, seed: int, n_cores: int | None, batches_per_file: int, process_by_file: bool, prediction_aligned_splits: list[int], prediction_length: int | None, target_offset: int | None, use_precomputed_maps: list[str] | None, metadata_config_path: str | None, prediction_alignment_steps: int = 1, window_lengths: list[int] | None = None, max_target_offset: int = 1, mask_column: str | None = None, column_data_types: dict[str, str] | None = None, categorical_columns: list[str] | None = None, real_columns: list[str] | None = None, split_method: str = 'within_sequence', split_column: str | None = None, split_values: list[Any] | None = None, normalize_real_columns: bool = True, depth_layouts: dict | None = None, curriculum_column: str | list[str] | None = None, normalize_on_all_data: bool = False, cardinality_config: dict[str, Any] | None = None)[source]¶
Stateful preprocessing pipeline for single-file or folder inputs.
- __init__(project_root: str, continue_preprocessing: bool, preprocessing_data_path: str, read_format: str, write_format: str, merge_output: bool, allow_sequence_splitting: bool, selected_columns: list[str] | None, split_ratios: list[float] | None, window_length: int | None, window_stride: int, max_rows: int | None, seed: int, n_cores: int | None, batches_per_file: int, process_by_file: bool, prediction_aligned_splits: list[int], prediction_length: int | None, target_offset: int | None, use_precomputed_maps: list[str] | None, metadata_config_path: str | None, prediction_alignment_steps: int = 1, window_lengths: list[int] | None = None, max_target_offset: int = 1, mask_column: str | None = None, column_data_types: dict[str, str] | None = None, categorical_columns: list[str] | None = None, real_columns: list[str] | None = None, split_method: str = 'within_sequence', split_column: str | None = None, split_values: list[Any] | None = None, normalize_real_columns: bool = True, depth_layouts: dict | None = None, curriculum_column: str | list[str] | None = None, normalize_on_all_data: bool = False, cardinality_config: dict[str, Any] | None = None)[source]¶
Initialize and run preprocessing from validated config fields.
- class sequifier.preprocess.SequenceWindows(sequence_id: int, subsequence_ids: ndarray, start_item_positions: ndarray, left_pad_lengths: ndarray, split_start_item_positions: ndarray, split_end_item_positions: ndarray, values: dict[str, numpy.ndarray], curriculum_columns: tuple[str, ...] = (), sample_positions: ndarray | None = None)[source]¶
Dense windows and metadata extracted from one sequence split.
- property n_samples: int¶
Number of extracted windows.
- sequifier.preprocess.cast_columns_to_string(data: DataFrame) DataFrame[source]¶
Cast Polars column names to strings.
- sequifier.preprocess.combine_maps(map1: dict[Union[str, int], int], map2: dict[Union[str, int], int]) dict[Union[str, int], int][source]¶
Merge maps and reassign user IDs after reserved tokens.
- sequifier.preprocess.combine_multiprocessing_outputs(project_root: str, target_dir: str, n_splits: int, input_files: dict[int, list[str]], dataset_name: str, write_format: str, in_target_dir: bool = False, pre_split_str: str | None = None, post_split_str: str | None = None) None[source]¶
Combine per-split intermediate files.
- sequifier.preprocess.combine_parquet_files(files: list[str], out_path: str) None[source]¶
Stream-concatenate Parquet files with the first file schema.
- sequifier.preprocess.create_file_paths_for_multiple_files1(project_root: str, target_dir: str, n_splits: int, n_batches: int, process_id: int, file_index_str: str, dataset_name: str, write_format: str) dict[int, list[str]][source]¶
Return per-split temp paths for one multi-file shard.
- sequifier.preprocess.create_file_paths_for_multiple_files2(project_root: str, target_dir: str, n_splits: int, n_processes: int, n_files: dict[int, int], dataset_name: str, write_format: str) dict[int, list[str]][source]¶
Return per-split intermediate paths for multi-file merge.
- sequifier.preprocess.create_file_paths_for_single_file(project_root: str, target_dir: str, n_splits: int, n_batches: int, dataset_name: str, write_format: str) dict[int, list[str]][source]¶
Return per-split temp paths for one single-file run.
- sequifier.preprocess.create_id_map(data: DataFrame, column: str) dict[Union[str, int], int][source]¶
Map sorted user values to IDs after reserved tokens.
- sequifier.preprocess.delete_files(files: list[str] | dict[int, list[str]]) None[source]¶
Delete paths from a list or split-indexed dict.
- sequifier.preprocess.extract_sequence_windows(data: DataFrame, layout: StoredWindowLayout, stride_for_split: int, columns: list[str]) SequenceWindows | None[source]¶
Compatibility wrapper for extracting one sequence DataFrame.
- sequifier.preprocess.extract_sequences(data: DataFrame, schema: Any, layout: StoredWindowLayout, stride_for_split: int, columns: list[str]) DataFrame[source]¶
Extract long-format windows from one known sequence.
- sequifier.preprocess.extract_subsequences(in_seq: dict[str, list], window_length: int, stride_for_split: int, columns: list[str]) tuple[dict[str, list[list[Union[float, int]]]], list[int], numpy.ndarray][source]¶
Extract padded windows plus left-pad lengths from one sequence.
- sequifier.preprocess.get_batch_limits(data: DataFrame, n_batches: int, allow_sequence_splitting: bool) list[tuple[int, int]][source]¶
Split rows into batches without crossing sequenceId boundaries unless allowed.
- sequifier.preprocess.get_combined_statistics(n1: int, mean1: float, std1: float, n2: int, mean2: float, std2: float) tuple[float, float][source]¶
Combine two mean/std summaries.
- sequifier.preprocess.get_group_bounds(data_subset: DataFrame, split_ratios: list[float])[source]¶
Return per-split row bounds for one sequence.
- sequifier.preprocess.get_subsequence_starts(in_context_length: int, window_length: int, stride_for_split: int) ndarray[source]¶
Return distributed window starts, including the final available start.
- sequifier.preprocess.insert_top_folder(path: str, folder_name: str) str[source]¶
Insert folder_name before the basename.
- sequifier.preprocess.load_precomputed_id_maps(project_root: str, data_columns: list[str] | None, required_maps: list[str] | None = None) dict[str, dict[Union[str, int], int]][source]¶
Load and validate precomputed ID maps.
- sequifier.preprocess.preprocess(args: Any, args_config: dict[str, Any]) None[source]¶
Load preprocessing config and run preprocessing.
- sequifier.preprocess.preprocess_batch(project_root: str, data_name_root: str, process_id: int, batch: DataFrame, schema: Any, split_paths: list[str], layout: StoredWindowLayout | list[sequifier.helpers.StoredWindowLayout], window_stride: int, data_columns: list[str], col_types: dict[str, str], split_ratios: list[float] | None, target_dir: str, write_format: str, batches_per_file: int, merge_output: bool, split_method: str = 'within_sequence', seed: int = 1010, sequence_split_assignments: dict[int, int] | None = None, alignment: PredictionAlignment | None = None, split_values: list[Any] | None = None) None[source]¶
Extract and write all split windows for one batch.
- sequifier.preprocess.process_and_write_data_pt(data: DataFrame, window_length: int, path: str, column_data_types: dict[str, str])[source]¶
Write long-format sequences as packed PT tensors.
- sequifier.preprocess.process_and_write_sequence_windows_pt(windows: list[sequifier.preprocess.SequenceWindows], path: str, column_data_types: dict[str, str]) None[source]¶
Write dense sequence windows directly as a packed PT payload.
Training command composition and PT inference entry points.
- class sequifier.train.LoadedInferenceModel(network: Any, config: Any, interface_name: str, embedding: bool)[source]¶
Execution metadata alongside the sole weight-owning network.
- sequifier.train.load_inference_model(model_type: str, model_path: str, training_config_path: str | None, args_config: dict[str, Any], device: str, infer_with_dropout: bool) LoadedInferenceModel[source]¶
Load only the new portable-model or exact-run artifact formats.
- sequifier.train.run_training(config: ResolvedSequifierConfig, *, integration_specs: tuple[sequifier.integration.specifications.IntegrationSpec, ...] = (), integration_instances: tuple[Any, ...] = (), semantic_optimizer_grouping: bool = False) None[source]¶
Launch canonical service-composed training locally or across workers.
- sequifier.train.train_worker(local_rank: int, world_size: int, config: ResolvedSequifierConfig, global_rank: int, integration_specs: tuple[sequifier.integration.specifications.IntegrationSpec, ...] = (), integration_instances: tuple[Any, ...] = (), semantic_optimizer_grouping: bool = False) None[source]¶
Initialize one execution environment and run the composed runtime.
- class sequifier.infer.Inferer(model_type: str, model_path: str, project_root: str, id_maps: dict[str, dict[str | int, int]] | None, selected_columns_statistics: dict[str, dict[str, float]], decode_categories: bool, categorical_columns: list[str], real_columns: list[str], input_columns: list[str] | None, target_columns: list[str], target_column_types: dict[str, str], sample_from_distribution_columns: list[str] | None, infer_with_dropout: bool, prediction_length: int, inference_batch_size: int, device: str, args_config: dict[str, Any], training_config_path: str | None, training_objective: str | None = None, normalize_real_columns: bool = True, target_decoder_ids: dict[str, list[int]] | None = None)[source]¶
Inference runtime for PT/ONNX sequifier models.
- __init__(model_type: str, model_path: str, project_root: str, id_maps: dict[str, dict[str | int, int]] | None, selected_columns_statistics: dict[str, dict[str, float]], decode_categories: bool, categorical_columns: list[str], real_columns: list[str], input_columns: list[str] | None, target_columns: list[str], target_column_types: dict[str, str], sample_from_distribution_columns: list[str] | None, infer_with_dropout: bool, prediction_length: int, inference_batch_size: int, device: str, args_config: dict[str, Any], training_config_path: str | None, training_objective: str | None = None, normalize_real_columns: bool = True, target_decoder_ids: dict[str, list[int]] | None = None)[source]¶
Load a PT or ONNX backend and postprocessing state.
- adjust_and_infer_embedding(x: dict[str, numpy.ndarray], size: int, metadata: dict[str, numpy.ndarray], column_data_types: dict[str, torch.dtype])[source]¶
Batch embedding inference across the active backend.
- adjust_and_infer_generative(x: dict[str, numpy.ndarray], size: int, metadata: dict[str, numpy.ndarray], column_data_types: dict[str, torch.dtype])[source]¶
Batch generative inference across the active backend.
- expand_to_batch_size(x: ndarray) ndarray[source]¶
Repeat leading samples until the ONNX batch size is met.
- infer_embedding(x: dict[str, numpy.ndarray], metadata: dict[str, numpy.ndarray], column_data_types: dict[str, torch.dtype]) ndarray[source]¶
Return embeddings for a feature-array batch.
- infer_generative(x: dict[str, numpy.ndarray] | None, metadata: dict[str, numpy.ndarray], probs: dict[str, numpy.ndarray] | None = None, return_probs: bool = False, column_data_types: dict[str, torch.dtype] | None = None) dict[str, numpy.ndarray][source]¶
Return target probabilities or decoded predictions.
- infer_pure(x: dict[str, numpy.ndarray], metadata: dict[str, numpy.ndarray]) list[numpy.ndarray][source]¶
Run one ONNX batch and flatten sequence-major outputs.
- class sequifier.infer.WindowedInferenceBatch(inputs: dict[str, torch.Tensor], metadata: dict[str, torch.Tensor], sequence_ids: Tensor, subsequence_ids: Tensor, model_start_positions: Tensor, window_start_offsets: Tensor, split_start_positions: Tensor, split_end_positions: Tensor)[source]¶
Model-facing windows plus physical identities and adjusted starts.
- sequifier.infer.apply_inference_column_types(data: DataFrame, config: ResolvedInferenceConfig) DataFrame[source]¶
Cast loaded long-format sequence values to the configured unified dtype.
- sequifier.infer.apply_inference_tensor_types(sequences_dict: dict[str, torch.Tensor], column_data_types: dict[str, torch.dtype]) dict[str, torch.Tensor][source]¶
Cast loaded PT feature tensors to the configured per-column dtype.
- sequifier.infer.calculate_item_positions(start_positions: ndarray, context_length: int, prediction_length: int, training_objective: str, target_offset: int = 1) ndarray[source]¶
Return flattened absolute item positions for inference outputs.
- sequifier.infer.fill_number(number: int | float, max_length: int) str[source]¶
Left-pad a number for sortable string keys.
- sequifier.infer.get_embeddings(config: Any, inferer: Inferer, data: DataFrame, column_data_types: dict[str, torch.dtype]) ndarray[source]¶
Infer embeddings from a Polars chunk.
- sequifier.infer.get_embeddings_pt(config: Any, inferer: Inferer, data: dict[str, torch.Tensor], metadata: dict[str, torch.Tensor], column_data_types: dict[str, torch.dtype]) ndarray[source]¶
Infer embeddings from PT tensors.
- sequifier.infer.get_probs_preds_autoregressive(config: Any, inferer: Inferer, data: DataFrame, column_data_types: dict[str, torch.dtype], context_length: int) tuple[Optional[dict[str, numpy.ndarray]], dict[str, numpy.ndarray], numpy.ndarray, numpy.ndarray, numpy.ndarray][source]¶
Infer autoregressive predictions with sequence IDs, positions, and mask.
- sequifier.infer.get_probs_preds_from_df(config: Any, inferer: Inferer, data: DataFrame, column_data_types: dict[str, torch.dtype]) tuple[Optional[dict[str, numpy.ndarray]], dict[str, numpy.ndarray]][source]¶
Infer non-autoregressive predictions from a Polars chunk.
- sequifier.infer.get_probs_preds_from_dict(config: Any, inferer: Inferer, data: dict[str, torch.Tensor], metadata: dict[str, torch.Tensor], column_data_types: dict[str, torch.dtype], total_steps: int = 1) tuple[Optional[dict[str, numpy.ndarray]], dict[str, numpy.ndarray]][source]¶
Infer PT predictions, flattened sample-major across autoregressive steps.
- sequifier.infer.infer(args: Any, args_config: dict[str, Any]) None[source]¶
Load inference config and dispatch the worker.
- sequifier.infer.infer_embedding(config: ResolvedInferenceConfig, inferer: Inferer, model_id: str, dataset: list[Any] | Iterator[Any], column_data_types: dict[str, torch.dtype]) None[source]¶
Write embeddings for each dataset chunk.
- sequifier.infer.infer_generative(config: ResolvedInferenceConfig, inferer: Inferer, model_id: str, dataset: list[Any] | Iterator[Any], column_data_types: dict[str, torch.dtype])[source]¶
Write generative predictions/probabilities for each dataset chunk.
- sequifier.infer.infer_worker(config: Any, args_config: dict[str, Any], id_maps: dict[str, dict[str | int, int]] | None, selected_columns_statistics: dict[str, dict[str, float]], percentage_limits: tuple[float, float] | None, normalize_real_columns: bool)[source]¶
Load data, instantiate models, and run the configured inference mode.
- sequifier.infer.inference_output_path(project_root: str, write_format: str, artifact_type: str, model_id: str, data_id: int, target_column: str | None = None) str[source]¶
Return a canonical inference output path and create its directory.
- sequifier.infer.load_onnx_target_decoder_ids(session: InferenceSession, target_columns: list[str], target_column_types: dict[str, str], model_type: str) dict[str, list[int]][source]¶
Load and validate categorical decoder-index mappings from ONNX metadata.
- sequifier.infer.load_parquet_folder_dataset(data_path: str, start_pct: float, end_pct: float) Iterator[Any][source]¶
Yield a percentage slice of sorted top-level Parquet files.
- sequifier.infer.load_pt_dataset(data_path: str, start_pct: float, end_pct: float) Iterator[Any][source]¶
Yield a percentage slice of sorted top-level PT files.
- sequifier.infer.normalize(outs: dict[str, numpy.ndarray]) dict[str, numpy.ndarray][source]¶
Softmax logits by target column.
- sequifier.infer.sample_with_cumsum(probs: ndarray, is_log_probs: bool = True) ndarray[source]¶
Sample class indices from log-probabilities or probabilities.
- sequifier.infer.verify_variable_order(data: DataFrame) None[source]¶
Require sequenceId order and in-sequence subsequenceId order.
- sequifier.hyperparameter_search.hyperparameter_search(config_path: str, skip_metadata: bool) None[source]¶
Load config, create Optuna study, and optimize trials.
- sequifier.hyperparameter_search.objective(trial: Trial, accepted_trials: int, config, run_config: Any = None) float | tuple[float, ...][source]¶
Run one Optuna trial through the CLI trainer and validation metrics.
- sequifier.hyperparameter_search.set_pdeathsig()[source]¶
Ask Linux to SIGTERM children when this parent dies.
- class sequifier.helpers.ModelWindowSamplingPlan(resolved_view: ResolvedWindowView, stride: int | None = None)[source]¶
Resolve logical model windows contained in one stored window.
- build_masks(left_pad_lengths: Tensor, input_starts: Tensor) dict[str, torch.Tensor][source]¶
Build masks for model windows with different positions in storage.
- property candidate_input_starts: Tensor¶
Return chronological starts, anchored to include the rightmost view.
- first_eligible_start_indices(left_pad_lengths: Tensor, target_valid_from_offsets: Tensor | None = None) Tensor[source]¶
Return the first candidate with at least one valid target position.
- class sequifier.helpers.ModelWindowView(context_length: int, objective: str, target_offset: int)[source]¶
- class sequifier.helpers.ResolvedWindowView(storage: sequifier.helpers.StoredWindowLayout, view: sequifier.helpers.ModelWindowView, required_width: int, input_slice: slice, target_slice: slice)[source]¶
- class sequifier.helpers.StoredWindowLayout(window_length: int, max_target_offset: int, version: int)[source]¶
- class sequifier.helpers.WindowSampleIndex(plan: ModelWindowSamplingPlan, left_pad_lengths: Tensor, target_valid_from_offsets: Tensor | None = None)[source]¶
Compact logical-index mapping for variable per-row window counts.
- sequifier.helpers.assign_sequence_to_split(sequence_id: int, split_ratios: list[float], seed: int) int[source]¶
Deterministically assign one sequenceId to a split index.
- sequifier.helpers.build_valid_mask(left_pad_lengths: Tensor, full_length: int, view_slice: slice) Tensor[source]¶
Boolean mask from left-padding metadata.
- sequifier.helpers.configure_determinism(seed: int, strict: bool = False) None[source]¶
Enforces deterministic execution for reproducibility.
- sequifier.helpers.configure_logger(project_root: str, model_name: str, rank: int | None = 0, *, dataset_names: tuple[str, ...] = (), rank_specific: bool = False)[source]¶
Configure canonical model/dataset operational log files.
- sequifier.helpers.configured_window_stride(config: Any) int | None[source]¶
Read the optional stride from validated configs or legacy test doubles.
- sequifier.helpers.construct_index_maps(id_maps: dict[str, dict[Union[str, int], int]] | None, target_columns_index_map: list[str], decode_categories: bool | None) dict[str, dict[int, Union[str, int]]][source]¶
Build index-to-ID maps, including reserved token labels.
- sequifier.helpers.derive_target_column_types(target_columns: list[str], column_data_types: dict[str, str]) dict[str, str][source]¶
Derive categorical/real target kinds from configured physical dtypes.
- sequifier.helpers.get_best_model_path(project_root: str, run_name: str, model_type: str, *, dataset_name: str | None = None, dataset_count: int = 1) tuple[str, int][source]¶
Return the highest-epoch canonical best-model path.
- sequifier.helpers.get_last_training_batch_timedelta(model_name: str, rank: int, project_root: str = '.') float[source]¶
Return seconds between the last two structured train observations.
- sequifier.helpers.get_left_pad_lengths_from_preprocessed_data(data: DataFrame) Tensor[source]¶
One leftPadLength per long-format subsequence.
- sequifier.helpers.metadata_config_path_from_preprocessing_data_path(preprocessing_data_path: str) str[source]¶
Return the metadata path generated for a preprocessing input path.
- sequifier.helpers.normalize_path(path: str, project_root: str) str[source]¶
Return path rooted under project_root.
- sequifier.helpers.numpy_storage_to_pytorch(data: DataFrame, column_data_types: dict[str, torch.dtype], all_columns: list[str], window_length: int, sort_rows: bool = True) tuple[dict[str, torch.Tensor], torch.Tensor][source]¶
Convert complete stored windows to tensors for virtual window sampling.
- sequifier.helpers.numpy_to_pytorch(data: DataFrame, column_data_types: dict[str, torch.dtype], all_columns: list[str], resolved_view: ResolvedWindowView) tuple[dict[str, torch.Tensor], dict[str, torch.Tensor]][source]¶
Convert long-format Polars windows to tensors plus masks.
- sequifier.helpers.read_data(path: str, read_format: str, columns: list[str] | None = None) DataFrame[source]¶
Read CSV/Parquet into Polars.
- sequifier.helpers.resolve_unified_polars_numeric_dtype(column_data_types: dict[str, str]) Any[source]¶
Resolve one Polars dtype for long-format numeric sequence columns.
- sequifier.helpers.subset_to_input_columns(data: DataFrame | LazyFrame, input_columns: list[str]) DataFrame | LazyFrame[source]¶
Keep long-format rows whose inputCol is selected.
- sequifier.helpers.write_data(data: DataFrame, path: str, write_format: str, **kwargs) None[source]¶
Write Polars/Pandas data as CSV or Parquet.
- class sequifier.io.yaml.TrainModelDumper(stream, default_style=None, default_flow_style=False, canonical=None, indent=None, width=None, allow_unicode=None, line_break=None, encoding=None, explicit_start=None, explicit_end=None, version=None, tags=None, sort_keys=True)[source]¶
YAML dumper for sequifier config objects.
- sequifier.io.yaml.represent_numpy_float(dumper, data)[source]¶
Represent NumPy floats as YAML floats.
- sequifier.io.yaml.represent_numpy_int(dumper, data)[source]¶
Represent NumPy integers as YAML integers.
- sequifier.io.yaml.represent_sequifier_object(dumper, data)[source]¶
Represent sequifier config objects as plain YAML mappings.
- class sequifier.io.sequifier_dataset_from_folder_pt.SequifierDatasetFromFolderPt(data_path: str, config: Any, shuffle: bool = True)[source]¶
Eager PT-folder dataset yielding rank/worker-aligned batches.
- class sequifier.io.sequifier_dataset_from_folder_pt_lazy.SequifierDatasetFromFolderPtLazy(data_path: str, config: Any, shuffle: bool = True)[source]¶
Streams PT chunks into rank/worker-aligned batches.
- class sequifier.io.sequifier_dataset_from_folder_parquet.SequifierDatasetFromFolderParquet(data_path: str, config: Any, shuffle: bool = True)[source]¶
Eager Parquet-folder dataset yielding rank/worker-aligned batches.
- class sequifier.io.sequifier_dataset_from_folder_parquet_lazy.SequifierDatasetFromFolderParquetLazy(data_path: str, config: Any, shuffle: bool = True)[source]¶
Streams long-format Parquet chunks into rank/worker-aligned batches.
- class sequifier.io.sequifier_dataset_from_file.SequifierDatasetFromFile(data_path: str, config: Any, shuffle: bool = True)[source]¶
Eager single-file dataset yielding pre-collated batches.
- sequifier.io.window_sampling.build_window_batch(sequences: dict[str, torch.Tensor], input_columns: Sequence[str], target_columns: Sequence[str], sample_index: WindowSampleIndex, logical_indices: Tensor | list[int], sample_is_real: Sequence[bool] | Tensor | None = None, depth_valid_masks: dict[str, torch.Tensor] | None = None, start_item_positions: Tensor | None = None, split_start_item_positions: Tensor | None = None, split_end_item_positions: Tensor | None = None) SequifierBatch[source]¶
Gather one batch of virtual model windows from stored tensors.
- sequifier.io.window_sampling.target_valid_from_offsets(left_pad_lengths: Tensor, start_item_positions: Tensor, split_start_item_positions: Tensor) Tensor[source]¶
Return the first stored offset whose target belongs to this split.
- sequifier.io.window_sampling.validate_split_bounds_available(start_item_positions: Tensor | None, split_start_item_positions: Tensor | None, split_end_item_positions: Tensor | None, source: str) None[source]¶
Reject stored windows without enforceable target bounds.