22# Sample type definitions for Bagel-Energon integration.
33
44from dataclasses import dataclass , field
5- from typing import Any , Dict , List , Optional , Tuple
5+ from typing import Any
66
77import torch
88
@@ -13,12 +13,13 @@ class BagelSample:
1313
1414 This is what goes into the PackingDataset buffer.
1515 """
16- image_tensor_list : List [torch .Tensor ] # ViT/VAE preprocessed images
17- text_ids_list : List [List [int ]] # Tokenized text segments
18- sequence_plan : List [Dict [str , Any ]] # Packing instructions per segment
19- num_tokens : int # Total token count for this sample
20- is_mandatory : bool = False # Whether this sample must appear in every pack
21- subflavor : str = "" # Task type: "t2i" / "vlm"
16+
17+ image_tensor_list : list [torch .Tensor ] # ViT/VAE preprocessed images
18+ text_ids_list : list [list [int ]] # Tokenized text segments
19+ sequence_plan : list [dict [str , Any ]] # Packing instructions per segment
20+ num_tokens : int # Total token count for this sample
21+ is_mandatory : bool = False # Whether this sample must appear in every pack
22+ subflavor : str = "" # Task type: "t2i" / "vlm"
2223 # Energon metadata
2324 __key__ : str = ""
2425 __restore_key__ : tuple = ()
@@ -27,58 +28,59 @@ class BagelSample:
2728@dataclass
2829class BagelPackedBatch :
2930 """Output of pack_selected_samples — a fully packed sequence ready for the model."""
31+
3032 sequence_length : int
31- sample_lens : List [int ]
33+ sample_lens : list [int ]
3234 packed_text_ids : torch .Tensor
3335 packed_text_indexes : torch .Tensor
3436 packed_position_ids : torch .Tensor
3537 # FlexAttention fields
36- split_lens : List [int ] = field (default_factory = list )
37- attn_modes : List [str ] = field (default_factory = list )
38+ split_lens : list [int ] = field (default_factory = list )
39+ attn_modes : list [str ] = field (default_factory = list )
3840 # VAE image generation (optional)
39- padded_images : Optional [ torch .Tensor ] = None
40- patchified_vae_latent_shapes : Optional [ List ] = None
41- packed_latent_position_ids : Optional [ torch .Tensor ] = None
42- packed_vae_token_indexes : Optional [ torch .Tensor ] = None
41+ padded_images : torch .Tensor | None = None
42+ patchified_vae_latent_shapes : list | None = None
43+ packed_latent_position_ids : torch .Tensor | None = None
44+ packed_vae_token_indexes : torch .Tensor | None = None
4345 # ViT image understanding (optional)
44- packed_vit_tokens : Optional [ torch .Tensor ] = None
45- packed_vit_position_ids : Optional [ torch .Tensor ] = None
46- packed_vit_token_indexes : Optional [ torch .Tensor ] = None
47- vit_token_seqlens : Optional [ torch .Tensor ] = None
46+ packed_vit_tokens : torch .Tensor | None = None
47+ packed_vit_position_ids : torch .Tensor | None = None
48+ packed_vit_token_indexes : torch .Tensor | None = None
49+ vit_token_seqlens : torch .Tensor | None = None
4850 # Diffusion timesteps (optional)
49- packed_timesteps : Optional [ torch .Tensor ] = None
50- mse_loss_indexes : Optional [ torch .Tensor ] = None
51+ packed_timesteps : torch .Tensor | None = None
52+ mse_loss_indexes : torch .Tensor | None = None
5153 # CE loss (optional)
52- packed_label_ids : Optional [ torch .Tensor ] = None
53- ce_loss_indexes : Optional [ torch .Tensor ] = None
54- ce_loss_weights : Optional [ torch .Tensor ] = None
54+ packed_label_ids : torch .Tensor | None = None
55+ ce_loss_indexes : torch .Tensor | None = None
56+ ce_loss_weights : torch .Tensor | None = None
5557
5658 def to_dict (self ):
5759 """Convert to dict for get_batch compatibility."""
5860 data = {
59- ' sequence_length' : self .sequence_length ,
60- ' sample_lens' : self .sample_lens ,
61- ' packed_text_ids' : self .packed_text_ids ,
62- ' packed_text_indexes' : self .packed_text_indexes ,
63- ' packed_position_ids' : self .packed_position_ids ,
64- ' split_lens' : self .split_lens ,
65- ' attn_modes' : self .attn_modes ,
61+ " sequence_length" : self .sequence_length ,
62+ " sample_lens" : self .sample_lens ,
63+ " packed_text_ids" : self .packed_text_ids ,
64+ " packed_text_indexes" : self .packed_text_indexes ,
65+ " packed_position_ids" : self .packed_position_ids ,
66+ " split_lens" : self .split_lens ,
67+ " attn_modes" : self .attn_modes ,
6668 }
6769 if self .padded_images is not None :
68- data [' padded_images' ] = self .padded_images
69- data [' patchified_vae_latent_shapes' ] = self .patchified_vae_latent_shapes
70- data [' packed_latent_position_ids' ] = self .packed_latent_position_ids
71- data [' packed_vae_token_indexes' ] = self .packed_vae_token_indexes
70+ data [" padded_images" ] = self .padded_images
71+ data [" patchified_vae_latent_shapes" ] = self .patchified_vae_latent_shapes
72+ data [" packed_latent_position_ids" ] = self .packed_latent_position_ids
73+ data [" packed_vae_token_indexes" ] = self .packed_vae_token_indexes
7274 if self .packed_vit_tokens is not None :
73- data [' packed_vit_tokens' ] = self .packed_vit_tokens
74- data [' packed_vit_position_ids' ] = self .packed_vit_position_ids
75- data [' packed_vit_token_indexes' ] = self .packed_vit_token_indexes
76- data [' vit_token_seqlens' ] = self .vit_token_seqlens
75+ data [" packed_vit_tokens" ] = self .packed_vit_tokens
76+ data [" packed_vit_position_ids" ] = self .packed_vit_position_ids
77+ data [" packed_vit_token_indexes" ] = self .packed_vit_token_indexes
78+ data [" vit_token_seqlens" ] = self .vit_token_seqlens
7779 if self .packed_timesteps is not None :
78- data [' packed_timesteps' ] = self .packed_timesteps
79- data [' mse_loss_indexes' ] = self .mse_loss_indexes
80+ data [" packed_timesteps" ] = self .packed_timesteps
81+ data [" mse_loss_indexes" ] = self .mse_loss_indexes
8082 if self .packed_label_ids is not None :
81- data [' packed_label_ids' ] = self .packed_label_ids
82- data [' ce_loss_indexes' ] = self .ce_loss_indexes
83- data [' ce_loss_weights' ] = self .ce_loss_weights
83+ data [" packed_label_ids" ] = self .packed_label_ids
84+ data [" ce_loss_indexes" ] = self .ce_loss_indexes
85+ data [" ce_loss_weights" ] = self .ce_loss_weights
8486 return data
0 commit comments