@@ -255,6 +255,22 @@ def __init__(
255255 self ._extract_html_kwargs : Dict [str , Any ] = {} # noqa: F821
256256 self ._use_nemotron_parse_only : bool = False
257257
258+ @staticmethod
259+ def _positive_int (value : Any ) -> int | None :
260+ try :
261+ parsed = int (value )
262+ except (TypeError , ValueError ):
263+ return None
264+ return parsed if parsed > 0 else None
265+
266+ @staticmethod
267+ def _positive_float (value : Any ) -> float | None :
268+ try :
269+ parsed = float (value )
270+ except (TypeError , ValueError ):
271+ return None
272+ return parsed if parsed > 0.0 else None
273+
258274 def files (self , documents : Union [str , List [str ]]) -> "BatchIngestor" :
259275 """
260276 Add local files for batch processing.
@@ -857,16 +873,21 @@ def embed(
857873 resolved = resolved .model_copy (update = {"api_key" : resolve_remote_api_key ()})
858874
859875 kwargs = build_embed_kwargs (resolved , include_batch_tuning = True )
876+ embed_batch_size = (
877+ self ._positive_int (kwargs .get ("embed_batch_size" )) or self ._requested_plan .get_embed_batch_size ()
878+ )
879+ embed_workers = self ._positive_int (kwargs .get ("embed_workers" ))
880+ embed_initial_actors = embed_workers or self ._requested_plan .get_embed_initial_actors ()
881+ embed_min_actors = embed_workers or self ._requested_plan .get_embed_min_actors ()
882+ embed_max_actors = embed_workers or self ._requested_plan .get_embed_max_actors ()
860883
861884 # Remaining kwargs are forwarded to the actor constructor.
862885 embed_modality = resolved .embed_modality
863886 embed_granularity = resolved .embed_granularity
864887 self ._tasks .append (("embed" , dict (kwargs )))
865888
866889 # We want to create Ray batches that are of the same size as the embed_batch_size.
867- self ._rd_dataset = self ._rd_dataset .repartition (
868- target_num_rows_per_block = self ._requested_plan .get_embed_batch_size ()
869- )
890+ self ._rd_dataset = self ._rd_dataset .repartition (target_num_rows_per_block = embed_batch_size )
870891
871892 if embed_granularity == "page" :
872893 _row_fn = partial (
@@ -884,7 +905,7 @@ def embed(
884905 )
885906 self ._rd_dataset = self ._rd_dataset .map_batches (
886907 _row_fn ,
887- batch_size = self . _requested_plan . get_embed_batch_size () ,
908+ batch_size = embed_batch_size ,
888909 batch_format = "pandas" ,
889910 num_cpus = 1 ,
890911 )
@@ -894,17 +915,19 @@ def embed(
894915 if endpoint :
895916 embed_actor_num_gpus = 0 # We do not need GPU resources if invoking a remote NIM endpoint
896917 else :
897- embed_actor_num_gpus = self ._requested_plan .get_embed_gpus_per_actor ()
918+ embed_actor_num_gpus = (
919+ self ._positive_float (kwargs .get ("gpu_embed" )) or self ._requested_plan .get_embed_gpus_per_actor ()
920+ )
898921
899922 self ._rd_dataset = self ._rd_dataset .map_batches (
900923 _BatchEmbedActor ,
901- batch_size = self . _requested_plan . get_embed_batch_size () ,
924+ batch_size = embed_batch_size ,
902925 batch_format = "pandas" ,
903926 num_gpus = embed_actor_num_gpus , # pulled from if statement above
904927 compute = rd .ActorPoolStrategy (
905- initial_size = self . _requested_plan . get_embed_initial_actors () ,
906- min_size = self . _requested_plan . get_embed_min_actors () ,
907- max_size = self . _requested_plan . get_embed_max_actors () ,
928+ initial_size = embed_initial_actors ,
929+ min_size = embed_min_actors ,
930+ max_size = embed_max_actors ,
908931 ),
909932 fn_constructor_kwargs = {"params" : resolved },
910933 )
0 commit comments